Операции над строками

Над числами, как мы убедились выше, можно с успехом проделывать различные операции. А как быть со строками текста? Было бы здорово выделять частьстроки по своему усмотрению или соединять две строки в одну. Эти и множество других операций над строками предусмотрены в Visual FoxPro 9.

Начнем с объединения строк. Эта операция производится абсолютно аналогично сложению чисел. Можно использовать при сложении и сами строки, заключая их в одинарные или двойные кавычки, и переменные, которым присвоены строковые значения. Например:

В первом случае в переменную lc_Stroka поместится строка "Здравствуйте, уважаемый пользователь!", а во втором случае переменной lc_Strokalбудет присвоено значение "Здравствуйте, Петр Федосеевич!".

Остальные действия над строками производятся при помощи довольно разнообразных по назначению функций Visual FoxPro 9. Рассмотрим только основные, поскольку, если разбираться с каждой строковой функцией в отдельности, пришлось бы посвятить этому добрую треть книги.

Довольно часто требуется оценить длину строки. Например, если пользователь ввел длинную строку и вам нужно проверить, поместится ли она целикомв ограниченное по длине символьное поле таблицы. Для определения длиныстроки используют функцию ьЕЩ<строка>). Возвращаемое значение - целоечисло. Например:

Переменная ln_StrLn в итоге будет иметь значение 24. А что получится врезультате выполнения указанного ниже выражения?

Каждый из вызовов функции LEN вернет соответственно 4, 5 и 4 (по количеству символов в соответствующих строках). Переменной ln_StrLn будет присвоено значение 13 (4 + 5 + 4).

Для решения еще одной часто встречающейся задачи - выделению подстрокив строке - предназначены функции LEFT, RIGHT и SUBSTR.

LEFT(<строка>, <количество_символов>) - возвращает указанное количество символов строки, отсчитывая их от левого края строки. Например:

В результате переменной lc_sbstr будет присвоено значение "Мультик".

RIGHT (<строка>, <количество_символов>) - возвращает указанное количество символов строки, отсчитывая их от правого края строки. Например:

В результате переменной lc_sbstr будет присвоено значение «датчик».

Можно выделять из строки и подстроку в произвольном порядке. Для этогослужит следующая функция.

SUBSTR(<строка>, <позиция_начала>[, <количество_символов>]) -возвращает подстроку, начинающуюся с указанной позиции, с заданной длиной.Позиция первого символа - 1. Если не указать длину подстроки, вернется подстрока, начинающаяся с указанного символа и заканчивающаяся с окончанием исходной строки.

Примеры:

В результате переменной lc_sbstr будет присвоено значение "канал".

В результате переменной lc_sbstr будет присвоено значение "тик".

В результате переменной lc_sbstr будет присвоено значение "передатчик".

Вам может потребоваться выделить, например, второе слово в строке издвух слов. А строка не известна заранее. Как быть? В этом случае требуетсясначала определить положение пробела, разделяющего первое и второе слово, а затем выделить подстроку начиная с этой позиции.

АТ (<подстрока>, <строка> [, <номер_вхождения>]) - ищет указанное вхождение указанной подстроки в строке. Если ничего не находит, возвращается 0.Для нашего примера:

В результате переменной lc_StrStart будет присвоено значение 4, а переменной lc_SecondWord - значение " слова". Мы использовали в функции SUBSTRв качестве параметра выражение ln_StrStart + 1 потому, что в переменнойln_StrStart хранится позиция пробела в строке, а нам нужен первый символслова, следующего за пробелом.

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

В результате переменной lc_StrStart будет присвоено значение 12, а переменной lc_StrEnd - значение 15. Длина подстроки, присваиваемая переменнойln_SbStrLn, составит в результате вычисления 2. В результате использованияфункции SUBSTR переменной lc_SecondWord будет присвоено значение "из”.

Может получиться так, что пользователь ввел в начале исходной строкипробел или даже несколько пробелов. Тогда наша программка не будет работатьправильно. Вместо первого пробела, разделяющего, как нам кажется, первое ивторое слово, найдется пробел, стоящий в начале строки. Однако и этой бедеможно помочь средствами Visual FoxPro 9. Существуют функции, которые обрезают «лишние» пробелы.

-    возвращает строку с удаленными из начала строки пробелами или указанными символами. Флаг определяет чувствительность к большим и маленьким буквам. Еслифлаг не указан, функция регистрозависимая, то есть различает большие и маленькие буквы. Если флаг равен 1, функция регистронезависимая, то есть неразличает большие и маленькие буквы. Максимальное количество символов,которые можно указать для удаления, составляет 23.

-    возвращает строку с удаленными из конца строки пробелами или указанными символами. Флаг определяет чувствительность к большим и маленьким буквам. Еслифлаг не указан, функция регистрозависимая, то есть различает большие и маленькие буквы. Если флаг равен 1, функция регистронезависимая, то есть неразличает большие и маленькие буквы. Максимальное количество символов,которые можно указать для удаления, составляет 23.

-    возвращает строку с удаленными из начала и конца строки пробелами или указаннымисимволами. Флаг определяет чувствительность к большим и маленьким буквам.Если флаг не указан, функция регистрозависимая, то есть различает большие ималенькие буквы. Если флаг равен 1, функция регистронезависимая, то есть неразличает большие и маленькие буквы. Максимальное количество символов,которые можно указать для удаления, составляет 23.

Что характерно, все три функции работают и с символьным типом Character,и с двоичным типом Varbinary, введенным в Visual FoxPro версии 9. ,

Примеры:

В результате переменной lc_sbstr будет присвоено значение "Книга о VisualFoxPro 9".

В результате переменной lc_sbstr будет присвоено значение "KHnraoVisualFoxPro 9”.

В результате переменной lc_sbstr будет присвоено значение " Книга о VisualFoxPro 9".

В результате переменной lc_sbstr будет присвоено значение "Книга о VisualFoxPro 9".

В результате переменной lc_sbst.r будет присвоено значение " Книга о VisualFoxPro 9".

Есть и обратные операции, которые добавляют пробелы или указанные символы, чтобы строка достигла определенного размера.

PADR(<cTpoKa>, <размер>[, <символ>]) - добавляет пробелы или указанныесимволы в конец строки.

PADL (<строка>, <размер>[, <символ>]) - добавляет пробелы или указанныесимволы в начало строки.

PADC (<строка>, <размер>[, <символ>]) - добавляет пробелы или указанныесимволы в начало и конец строки.

Примеры:

В результате переменной lc_str будет присвоено значение "***Глава".

В результате переменной lc_str будет присвоено значение "**Глава**".

В Visual FoxPro появились функции для работы со словами в строке, отсутствовавшие в FoxPro для MS DOS: GETWORDCOUNT (), GETWORDNUM ().

GETWORDCOUNT (<строка> [, <разделитель>]) - возвращает количество слов,разделенных разделителем. Если разделитель не указан, считается, что словаразделены пробелами.

GETWORDNUM (<строка>, <номер_слова> [, <разделитель>]) - возвращает слово с указанным номером из строки. Если слова разделяются не пробелами, нужно указать разделитель.

Все приведенные примеры использования строковых функций вы можете опробовать, запуская их на выполнение в окне Command. Программы можно ввести и запустить на выполнение, как это было описано в разделе «Создаем первую программу». Не забудьте в программах добавить последней строкой выводпеременной с результатом. Так же как и в случае использования окна Command,воспользуйтесь для этого либо командой ?, либо командой MESSAGEBOX, как этоописано в конце раздела «Арифметические действия».

Выполнение при определенных условиях

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

В Visual FoxPro предусмотрены специальные конструкции для ветвлениявыполнения операций.