При работе со строчками обычно необходимо узнать, не видится ли заданное слово, фраза либо знак в некоей строке, и в случае, если – да, то в каком конкретно месте. В Visual Basic предусмотрены средства поиска одной строки в второй. С их помощью возможно создавать программы для поиска нужных слов в тексте, и для их последующей замены вторыми словами.
Посредством функции InStr возможно делать поиск в строчке как отдельного знака, так и целой группы знаков. У обрисовываемой функции имеется два необходимых и два необязательных параметра. К необходимым параметрам относятся строчок, в которой выполняется поиск, и строчок, содержащая искомые знаки. В случае, если заданная последовательность знаков отыскана, функция InStr возвращает номер первого совпадающего знака в исходной строчке, начиная с единицы. В случае, если последовательность знаков не отыскана, функция InStr возвращает нулевое значение. В несложном случае, синтаксис функции InStr выглядит следующим образом:
Function InStr ( [ Start as Long , ] S as String , Sub as String [ , Compare As VbCompareMethod = vbBinaryCompare ] )
Параметр S – исходная строчок, Sub – искомая подстрока, Start – номер знака в строчке, с которого начинается поиск подстроки. Параметр Start есть необязательным, если он не указан, то поиск осуществляется В первую очередь строчка. Параметр Compare кроме этого есть необязательным и определяет метод поиска подстроки. Если он не указан, то равен по умолчанию vbBinaryCompare = 0 и поиск осуществляется с учётом регистра знаков. В случае, если параметр Compare равен vbTextCompare = 1, то поиск осуществляется без учёта регистра знаков.
К примеру, в следствии исполнения строчка кода
Print InStr ( Я встречу вас во вторник , вас )
будет напечатано число 11, потому, что слово “вас” находится в исходной строчке с 11 позиции от начала.
Посредством первого (необязательного) параметра функции InStr возможно указать начальную позицию в исходной строчке, с которой необходимо затевать поиск. Этот параметр должен быть хорошим целым числом. В случае, если начальная позиция больше длины строчка, функция InStr () возвращает нулевое значение.
К примеру, в следствии исполнения строчка кода
Print InStr ( 7,Kто не работает, тот ест, е )
будет напечатано число 14, не обращая внимания на то, что первая буква “е” видится в данной фразе на 6-й позиции. Обстоятельство пребывает в том, что мы заказали поиск знака “е” в строчке, начиная с 7-й позиции.
Пример: Формирование перечня слов предложения
Dim S As String ‘строчок предложения
Dim Word As String ‘слово
Dim Start As Long ‘позиция начала поиска
Dim Pos As Long ‘позиция первого разделителя
Const Char = U ‘разделитель
lstWord.Clear ‘очистка перечня lstWord
If Len ( txt.Text ) = 0 Then Exit Sub ‘в случае, если нет текста в поле txt, то выходим из процедуры
S = txt.Text Char ‘добавляем разделитель в финиш строчка
Start=1 ‘определяем позицию начала поиска
Pos = InStr ( S , Char ) ‘определяем позицию первого разделителя
Do ‘начало цикла с условием выхода
Word = Mid$ ( S , Start , Pos – Start ) ‘считываем слово с позиции начала поиска до следующего разделителя
lstWord.AddItem Word ‘добавляем слово в перечень lstWord
Start = Pos + 1 ‘устанавливаем начало поиска следующего слова с знака по окончании разделителя
Pos = InStr ( Start , S , Char ) ‘определяем позицию очередного разделителя
Loop Until Pos = 0 ‘выходим из цикла, в случае, если разделитель не отыскан
В приведенном фрагменте программа разбирает строчок знаков, поделённых пробелами, на отдельные слова и помещает их в перечень lstWord. Мы вычисляем словом любую последовательность знаков, заканчивающихся пробелом. Исходя из этого добавили в финиш строчка пробел. Позиция первого пробела – финиш первого слова. Дабы отыскать следующие слова, мы изменяем позицию начала поиска. Для этого значение, полученное в следствии вызова Функции InStr, мы используем в качестве параметра Start на следующей итерации.
Для исполнения поиска в обратном направлении в Visual Basic предусмотрена еще одна функция, которая именуется InStrRev. Принцип ее работы сходится с функцией InStr, лишь синтаксис мало отличается:
Function InStr (S as String , Sub as String [ , Start as Long [ , Compare As VbCompareMethod = vbBinaryCompare ] ] )
Главное отличие пребывает в tow, что параметр Start, показывающий начальную позицию в исходной строчке, с которой будет начат поиск, находится по окончании самих строчков, а не перед ними, как у функции InStr.
А сейчас давайте мало поменяем текст программы формирования перечня слов предложения и создадим на его базе еще одну процедуру, делающую поиск слов в обратном порядке.
Пример: Формирование перечня слов предложения в обратном порядке
Dim S As String ‘строчок предложения
Dim Word As String ‘слово
Dim Start As Long ‘позиция начала поиска
Dim Pos As Long ‘позиция первого разделителя
Const Char = U ‘разделитель
lstWord.Clear ‘очистка перечня lstWord
If Len ( txt.Text ) = 0 Then Exit Sub ‘в случае, если нет текста в поле txt, то выходим из процедуры
S = txt.Text ‘копирование содержимого текстового поля
Start = Len ( txt.Text ) ‘определяем позицию начала поиска
Pos = InStr ( S , Char ) ‘определяем позицию последнего разделителя
Do ‘начало цикла с условием выхода
Word = Mid$ ( S , Pos + 1 , Start – Pos ) ‘считываем слово от позиции разделителя до позиции начала поиска
lstWord.AddItem Word ‘добавляем слово в перечень lstWord
Start = Pos -1 ‘устанавливаем начало поиска следующего слова с знака по окончании разделителя
Pos = InStrRev ( S , Char , Start ) ‘определяем позицию очередного разделителя
Loop Until Pos = 0 ‘выходим из цикла, в случае, если разделитель не отыскан
Word = Mid$ ( S , 1 , Start ) ‘выходим из цикла, в случае, если разделитель не отыскан
lstWord.AddItem Word ‘выходим из цикла, в случае, если разделитель не отыскан