Поиск текста в строке
Изменение регистра символов в строке
Для изменения регистра символов в строке предусмотрены две специальные функции: UCase () и LCase (). Функция UCase () возвращает переданную ей в качестве аргумента строку, все символы которой преобразованы в верхний регистр. Функция LCase () выполняет обратную задачу, конвертирует символы исходной строки в нижний регистр.
Описываемые функции изменения регистра символов оказываются очень полезными при работе с командами, введенными пользователем с клавиатуры. В этом случае в программе нужно сравнить полученную строку с набором ключевых слов, которые обычно бывают набраны только прописными буквами. Таким образом, если преобразовать символы введенной команды в верхний регистр, то операция сравнения будет всегда правильно выполняться.
Синтаксис этих команд следующий:
Строка2 = UCase ( Строка1 );
Строка3 = LCase (Строка1).
Где Строка1 может быть набрана как прописными так и строчными буквами, Строка2 – результат работы функции UСase – строка, содержащая только прописные буквы, а Строка3 – результат работы функции LСase – строка, содержащая только строчные буквы.
Например:
UCase ("Visual Basic") возвращает " Visual Basic ";
LCase ("Visual Basic") возвращает " visual basic "
При работе со строками зачастую нужно выяснить, не встречается ли заданное слово, фраза или любая другая последовательность символов в некоторой строке, и если — да. то в каком именно месте. В Visual Basic предусмотрены средства поиска одной строки в другой. С их помощью можно создавать программы для поиска нужных слов в тексте, а также для их последующей замены другими словами. Например, может понадобиться в тексте какого-нибудь документа заменить слово текст словом строка.
С помощью функции InStr () можно выполнять поиск в строке как отдельного символа, так и целой группы символов. У описываемой функции есть два обязательных и два необязательных параметра. К обязательным параметрам относятся строка, в которой выполняется поиск, и строка. содержащая искомые символы. Если заданная последовательность символов найдена, функция InStr () возвращает номер первого совпадающего символа в исходной строке, начиная с единицы. Если последовательность символов не найдена, функция InStr () возвращает нулевое значение. В простейшем случае, синтаксис функции InStr () выглядит следующим образом:
НомерПервогоСимвола = InStr(ИсходнаяСтрока, ИскомаяСтрока)
Например, в результате выполнения строки кода
Print InStr('Я встречу вас во вторник", "вас")
будет напечатано число 11, поскольку слово вас расположено в исходной строке с 11 позиции от начала.
С помощью первого (необязательного) параметра функции InStr () можно указать начальную позицию в исходной строке, с которой нужно начинать поиск. Данный параметр должен быть положительным целым числом. Если начальная позиция больше длины строки, функция InStr () возвращает нулевое значение. В данном случае, синтаксис функции InStr () выглядит следующим образом:
НомерПервогоСимвола = InStr(НачальнаяПозиция, ИсходнаяСтрока, ИскомаяСтрока)
Например, в результате выполнения строки кода
Print Instr(7,"KTO не работает, тот ест", "е")
будет напечатано число 14, несмотря на то, что первая буква е встречается в данной фразе на 6-й позиции. Причина состоит в том. что мы заказали поиск символа е в строке, начиная с 7-й позиции.
Еще один необязательный параметр определяет, будет ли выполняться поиск без учета или с учетом регистра букв. В последнем случае одноименные строчные и прописные буквы будут восприниматься как совершенно разные символы. Если установить значение данного параметра равным 0 (принято по умолчанию), будет выполнен поиск с учетом регистра букв. Чтобы выполнить поиск без учета регистра букв, присвойте данному параметру значение 1. Синтаксис функции InStr (), для выполнения поиска без учета регистра букв выглядит следующим образом:
НомерПервогоСимвола = InStr(НачальнаяПозиция, ИсходнаяСтрока, ИскомаяСтрока, 1)
С помощью последнего необязательного параметра можно найти все вхождения заданной цепочки символов в исходной строке.
Для выполнения поиска в обратном направлении в Visual Basic предусмотрена еще одна функция, которая называется InStrRev(). Принцип ее работы совпадает с функцией InStr (), только синтаксис немного отличается:
InStrRev(Исходная_Строка, Искомая_Строка [, Начальная_Позиция])
Основное отличие состоит в том, что параметр Начальная_Позиция, указывающий начальную позицию в исходной строке, с которой будет начат поиск, располагается после самих строк, а не перед ними, как у функции InStr().
Пример: Вывести номера позиций на которых встречается буква «к».
Private Sub Command1_Click()
Text1.Text = "Обычное праздничное блюдо на пикнике - шашлык. Однако можно придумать и что-нибудь оригинальное (запечённую в углях рыбу или мясо, жаренную на вертеле индейку)."
S = Text1
N = InStr(S, "к")
N2 = InStr(N + 1, S, "к")
N3 = InStr(N2 + 1, S, "к")
N4 = InStr(N3 + 1, S, "к")
Text2.Text = N & ", " & N2 & ", " & N3 & ", " & N4
End Sub