Поиск ПОДСТРОКИ в строке

При работе со строчками часто необходимо узнать, не встречается ли данное слово, фраза либо знак в некой строке, и если – да, то в каком конкретно месте. В 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, невзирая на то, что 1-ая буковка “е” встречается в данной фразе на 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 ‘выходим из цикла, если разделитель не найден


poiski-putej-modernizacii-shkolnogo-obrazovaniya.html
poiski-smisla-i-pravdi-zhizni-sochinenie.html
poiski-tryoh-ribakov-vedutsya-v-primore-informacionnoe-agentstvo-novij-region-rossiya-09102012.html