Операции над строками
Над числами, как мы убедились выше, можно с успехом проделывать различные операции. А как быть со строками текста? Было бы здорово выделять частьстроки по своему усмотрению или соединять две строки в одну. Эти и множество других операций над строками предусмотрены в 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 предусмотрены специальные конструкции для ветвлениявыполнения операций.