Функция поиска

Одной из базовых функций работы с переменными строкового типа является функция поиска подстроки в строке POS (S,S2), указывающая на числовую позицию первого символа подстроки.

Например, в случае



– должна быть переменной целочисленного типа (Integer, Word или Longint) и в данном случае получит значение 6 – позицию подстроки «мыла» в строке.

Функция Pos достаточно хороша во многих случаях, однако особенностью строчных данных может быть и такой случай, когда подстрока встречается в строке несколько раз. В таком случае функция Pos вернет первое попадание в подстроку.

Например, следующее выражение



вернет значение 2, хотя символ «а» встречается здесь несколько раз и верными могли быть также значения 4, 9 и 12.

Копирование

Если нам требуется получить фрагмент текста, являющегося частью строки, можно использовать функцию Copy (S,N1,N2); Здесь N1 определяет, с какого символа будет производиться копирование, а N2 – число копируемых символов.

Например, действие



присвоит переменной S значение «мыла». Если мы изменим числовые значения, например, на «11, 4» – в переменной S окажется слово «раму»; при «1, 4» – это будет «Мама»; а при «6, 2» в переменной окажется слово «мы».

Также, одним из ключевых элементов работы с фрагментами текста является функция Length (S), позволяющая определять длину строки, чтобы не выходить за ее рамки.

Например,



присвоит переменной n значение 14 – число символов, содержащихся в строке.25

Рассмотрим и возможности построения более сложных конструкций с символами.

Предположим, переменной S присвоено значение «Мама мыла раму»; но нам известно только, что в ней находится три слова (длина которых неизвестна) и необходимо получить первое слово из этой строки, отправив его в переменную S2. Это действие мы можем выполнить так:



– ведь мы помним, что функция Pos находит первое совпадение подстроки, а в начале строки пробела у нас нет. Так в S2 попадет слово «Мама».

Если же нам требуется скопировать текст, следующий за первым пробелом, эта процедура будет выглядеть несколько сложнее:



Здесь, в качестве позиции для отсчета мы берем место нахождения в строке первого пробела и копируем следующие за ним символы за минусом числа символов, следующих до пробела включительно. Проверить верность этой формулы можно в следующей программе:


Илл. 6. Копирование фрагмента строки с помощью функций Copy и Pos, с целью получения части текста, следующего за первым словом в строке.


Результат – можно увидеть на экране:


Илл. 7. Результат работы программы копирования фрагмента текста.


Также, предположим, что нам необходимо скопировать последнее слово из строки. В данном случае, поскольку функция «Pos» нам не поможет, придется воспользоваться циклом, чтобы «вручную» установить место нахождения последнего пробела.

Контролировать конкретный символ строки можно, используя числовое значение индекса символа в строке, при этом числовой индекс указывается в квадратных скобках S [n].

Так, в упомянутой строке S [1] =«М», S [2] =«а», s [3] =«м» и т. д. Зная общее число символов с помощью функции length (S) мы можем перебором достигнуть нужного нам символа в цикле и после произвести нужную операцию. В следующей программе мы получаем последнее слово, благодаря перебору символов с «хвоста», уменьшая значение, полученное из длины строки оператором Dec (i). Так же, на всякий случай мы уточняем условие выхода из цикла в случае, если пробел так и не будет достигнут (i <1).


Илл. 8. Копирование последнего слова из фрагмента текста с использованием цикла Repeat и строкового индекса.


Результат удовлетворяет ожиданиям.