Распечатать страницу

Функции для символьных данных в Visual FoxPro

« Назад

Приведены в табл. 3.25.

Таблица 3.25

Символьные функции

Функция

Описание

ALINES( )

Копирует каждую строку символьной строки или memo-поля в соответствующий элемент одномерного массива

ALLTRIM(Expression
                [, nFlags]
                [, cParseChar
               
[, cParseChar2 [, ...]]])

Возвращает параметр Expression без ведущих и хвостовых пробелов, cParseChar-строк или 0-байтов.
Expression – выражение типа Character или Varbinary, из которого удаляются ведущие и хвостовые пробелы или 0-байты или cParseChar, cParseChar2, .... строки.
nFlags – задает, будет ли удаление чувствительным к регистру, когда заданы удаляемые символы cParseChar, cParseChar2, …
cParseChar [, cParseChar2 [, ...]] – удаляемые начальные или конечные символьные строки. Если параметры не заданы, то удаляются пробелы или 0-байты. Максимальное число cParseChar-строк – 23

ASC(cExpression)

Возвращает ANSI-код первого символа строки cExpression

AT(cSearchExpression,
                cExpressionSearched
               
[, nOccurrence])

Возвращает номер позиции, с которой подстрока cSearchExpression начинается в строке cExpressionSearched. Если задан параметр nOccurrence, то ищется вхождение, номер которого равен nOccurrence; направление поиска – слева направо

ATC(cSearchExpression,
                cExpressionSearched
               
[, nOccurrence])

Работает так же, как и AT( ), не учитывая регистр сравниваемых символов

ATCLINE(cSearchExpression,
                cExpressionSearched
)

Возвращает номер строчки, в которой подстрока cSearchExpression имеется в строке cExpressionSearched; направление поиска – снизу вверх; поиск ведется без учета регистра сравниваемых символов. Результат зависит от установки, заданной командой SET MEMOWIDTH

ATLINE(cSearchExpression,
                cExpressionSearched
)

Работает так же, как и ATCLINE( ), но уже учитывая регистр сравниваемых символов

BINTOC(nExpression [, nSize])

Преобразовывает целую величину nExpression в двоичную в символьном представлении; рассмотрена в табл. 3.12

CHR(nANSICode)

Возвращает по ANSI-коду nANSICode соответствующий ему символ

CHRSAW(nSeconds)

Возвращает .T., если в буфере клавиатуры есть символ, или .F. – в противном случае

CHRTRAN(
                cSearchedExpression,
                cSearchExpression
,

                cReplacementExpression)

Замещает символ строки cSearchedExpression, если он имеется в строке cSearchExpression, на символ из строки cReplacementExpression; позиции участвующих в замене символов второй и третьей строк совпадают.
Если cReplacementExpression имеет меньше символов, чем cSearchExpression, то избыточные символы cSearchExpression удаляются из cSearchedExpression. Если в cReplacementExpression больше символов, чем в cSearchExpression, то дополнительные символы cReplacementExpression игнорируются

CPCONVERT(
                nCurrentCodePage,
                nNewCodePage,
                cExpression
)

Заменяет текущую кодовую страницу nCurrentCodePage строки cExpression на новую nNewCodePage (перечень кодовых страниц приведен в разд. 3.7.6)

CREATEBINARY(cExpression)

Преобразовывает строку символов cExpression, созданную в VFP, в двоичную строку символов, пригодную для передачи объекту ActiveX или объекту автоматизации

CTOBIN(cExpression
               
[, cFlags])

Преобразовывает двоичное число cExpression в символьном представлении в целую величину; выполняет действие, обратное действию BINTOC( ).
Если символьное представление числовой величины, заданное cExpression, имеет размер 4 или 8 байт, то типом результата функции можно управлять параметром  cFlags, принимающим следующие значения:
·              1, 2, 4 или 8 – длина cExpression соответственно 1, 2, 4 или 8 байт;
·              B – длина cExpression должна быть 8 байт; CTOBIN( ) возвращает величину типа Double;
·              N – длина cExpression должна быть 4 или 8 байт; CTOBIN( ) возвращает величину типа Numeric;
·              Y – длина cExpression должна быть 8 байт; CTOBIN( ) возвращает величину типа Currency;
·              R – реверсирует двоичное выражение;
·              S – предотвращает изменение знакового бита числа (BITXOR).
Параметр cFlags используется аддитивно; регистр символов произвольный, например:

? Ctobin("A")               && или CTOBIN("A", "1")
? Ctobin(Bintoc($12.34, "8"), "Y")
? Ctobin(Bintoc(12.34, "8"), "B")
? Ctobin(Bintoc(Pi( ),"BR"), "NRS")

CTOD(cExpression)

Преобразовывает строку cExpression в дату. Функция может возвращать неверные даты, если SET STRICTDATE установлен в 2. При такой установке следует пользоваться DATE( )

CTOT(cExpression)

Преобразовывает строку cExpression в дату и время. Если SET STRICTDATE установлен в 2, следует использовать DATETIME( )

DIFFERENCE(cExpression1,
                cExpression2
)

Возвращает целое число от 0 до 4, характеризующее фонетическую разность между строками cExpression1 и cExpression2. Результат тем больше, чем выше схожесть в произношении строк cExpression1 и cExpression2. Для строк различных в фонетическом отношении функция вернет 0, для схожих – 4

DMY(dExpression
               
| tExpression)

Возвращает символьное представление даты и времени в формате ДД Месяц ГГ | ГГГГ. Подробное описание см. в табл. 3.36

DTOC(dExpression
               
| tExpression [, 1])

Возвращает символьное представление даты или даты и времени; если задан 2-й параметр, то результат формируется в том же формате, что и функцией DTOS( ). Подробное описание см. в табл. 3.36

DTOS(dExpression
               
| tExpression)

Возвращает символьное представление даты или даты и времени в формате ГГГГММДД [ччммсс]. Подробное описание см. в табл. 3.36

EMPTY(eExpression)

Возвращает .T., если выражение eExpression пустое, или .F. – в противном случае. Строка считается пустой, если она имеет нулевую длину, состоит из пробелов, символов табуляции, возврата каретки или конца строки или из произвольной комбинации указанных символов

? Empty(' ' + Chr(10))     && Напечатает: .T.

EVALUATE(cExpression)

Оценивает выражение, заключенное в кавычки, и возвращает его результат; рассмотрена в разд. 5.6.2

FILETOSTR(cFileName)

Возвращает содержимое текстового файла cFileName в виде символьной строки. Имя файла может включать путь и должно содержать расширение, если таковое имеется. Максимальное число символов в строке равно 16,777,184

GETWORDCOUNT(cString
               
[, cDelimiters])

Возвращает число слов в строке cString. Заданные по умолчанию разделители слов (пробел, символы табуляции, конца строки и возврата каретки) можно заменить на иные, употребив параметр cDelimiters. При этом заданные по умолчанию разделители слов игнорируются. Каждый символ cDelimiters рассматривается функцией GETWORDCOUNT( ) как отдельный разделитель

GETWORDNUM(cString,
                nIndex [, cDelimiters])

Возвращает слово, присутствующее в строке cString под номером nIndex. По умолчанию в качестве разделителей слов употребляются пробел, символы табуляции, конца строки и возврата каретки. Параметр cDelimiters позволяет задать другие разделители. Каждый символ cDelimiters используется как самостоятельный разделитель.
Если в строке cString меньше слов, чем задано параметром nIndex, то функция вернет пустую строку

INLIST(eExpression1,
                eExpression2
               
[, eExpression3])

Возвращает .T., если параметр eExpression1 равен хотя бы одному из последующих параметров функции (которых может быть не более 24-х), или .F. – в противном случае; правила сравнения строк регулируется командой SET EXACT

IMESTATUS([nExpression])

Устанавливает IME (Input Method Editor) окно в ON (nExpression  = 0) или в OFF (nExpression = 1) или возвращает текущий IME-статус

ISALPHA(cExpression)

Возвращает .T., если первый символ строки cExpression является буквой, или .F. – в противном случае

ISBLANK(eExpression)

Если eExpression имеет символьный тип, то функция вернет .T., когда eExpression – это строка нулевой длины или строка из пробелов, или символьное поле вновь добавленной APPEND BLANK-записи, либо очищенной BLANK. В противном случае функция вернет .F. Отличается от EMPTY( ) и ISNULL( ). Так, EMPTY( ) вернет .T., когда строка – это комбинации символов табуляции, пробелов, возврата каретки или конца строки. ISBLANK( ) в такой ситуации вернет .F.

ISDIGIT(cExpression)

Возвращает .T., если первый символ строки cExpression является цифрой, или .F. – в противном случае

ISLEADBYTE(cExpression)

Вернет .T., если первый байт первого символа строки cExpression является ведущим байтом 2-байтовой строки. Вернет .F., если cExpression – это 1-байтовая строка

ISLOWER(cExpression)

Возвращает .T., если первый символ строки cExpression является строчной буквой, или .F. – в противном случае

ISUPPER(cExpression)

Возвращает .T., если первый символ строки cExpression является прописной буквой, или .F. – в противном случае

LEFT(cExpression,
                nCharacters
)

Возвращает первые nCharacters символов строки cExpression. Вернет пустую строку, если nCharacters ≤ 0

LEN(cExpression)

Возвращает длину (число символов) строки cExpression

LIKE(cExpression1,
                cExpression2
)

Возвращает .T., если строка cExpression1 соответствует строке cExpression2, или .F. – в противном случае. Параметр cExpression1 может содержать символы * и ?, употребляемые в общепринятом смысле. SET COMPATIBLE определяет, как оцениваются параметры функции. Если установка SET COMPATIBLE – это ON или DB4, хвостовые пробелы в cExpression1 и cExpression2 перед сравнением удаляются, в противном случае они сохраняются и учитываются при сравнении (примеры см. в разд. 3.7.3)

LOWER(cExpression)

Возвращает строку cExpression, в которой прописные буквы заменены на строчные

LTRIM(Expression
                [, nFlags]
                [, cParseChar
               
[, cParseChar2 [, ...]]])

Возвращает параметр Expression без ведущих пробелов, cParseChar-строк или 0-байтов. Параметры описаны при рассмотрении функции ALLTRIM( )

MAX(eExpression1,
                eExpression2
               
[, eExpression3 …])

Возвращает значение наибольшего параметра

MIN(eExpression1,
                eExpression2
               
[, eExpression3 …])

Возвращает значение наименьшего параметра

NORMALIZE(cExpression)

Приводит выражение, содержащееся в строке cExpression, к виду, который имеют выражения, возвращаемые некоторыми функциями VFP, например функцией KEY( ).
Возвращает символьную строку, получаемую из cExpression в результате следующих преобразований:
·              строчные символы выражения заменяются на прописные, однако вложенные строки не меняются, например

Normalize("Left('Hello', 1)")

вернет

LEFT('Hello',1);

  • любое сокращенное имя встроенной функции (ключевого слова) расширяется до полного имени, например

Normalize("isdi(subs(someString, k))")

вернет

ISDIGIT(SUBSTR(SOMESTRING,K));

  • знаки операции –>, разделяющие псевдоним от имени поля заменяются на точку, например

Normalize("uppe(cust–>fname)")

вернет

UPPER(CUST.FNAME)

Если выражение, содержащееся в строке cExpression, синтаксически неверно, то NORMALIZE( ) генерирует сообщение об ошибке.
Функция не проверяет существования указанных в выражении ссылок – имен полей, переменных, пользовательских процедур и др.

OCCURS(cSearchExpression,
                cExpressionSearched)

Возвращает число вхождений подстроки cSearchExpression в строку cExpressionSearched

PADL(cExpression,
                nResultSize
                [, cPadCharacters])

PADR(cExpression,
                nResultSize
                [, cPadCharacters])

PADC(cExpression,
                nResultSize
                [, cPadCharacters])

Возвращает строку cExpression, в которую добавлен несколько раз пробел, если cPadCharacters опущен или равен пробелу, или заданные символы cPadCharacters. Пробелы или иные символы в случае PADL( ) добавляются слева, в случае PADR( ) – справа, а в случае PADC( ) – и слева и справа. Число добавленных символов таково, что длина результирующей строки равна nResultSize.
Если nResultSize меньше длины cExpression, то функция вернет LEFT(cExpression, nResultSize)

PROPER(cExpression)

Возвращает строку cExpression, в словах которой первые буквы заменены на прописные, а все остальные – на строчные

RAT(cSearchExpression,
                cExpressionSearched
               
[, nOccurrence])

Возвращает номер позиции, с которой подстрока cSearchExpression начинается в подстроке cExpressionSearched. Если задан параметр nOccurrence, то ищется вхождение, номер которого равен nOccurrence; направление поиска – справа налево

RATLINE(cSearchExpression,
                cExpressionSearched
)

Возвращает номер строчки, в которой подстрока cSearchExpression имеется в строке cExpressionSearched; направление поиска – снизу вверх; поиск ведется с учетом регистра выражений. Нумерация строк ведется сверху вниз, т. е. так же, как и при работе с функцией ATLINE( ). Результат зависит от установки, заданной командой SET MEMOWIDTH

REPLICATE(cExpression,
                nTimes
)

Возвращает строку, образованную в результате повторения nTimes раз строки cExpression

RIGHT(cExpression,
                nCharacters
)

Возвращает последние nCharacters символов строки cExpression. Функция вернет пустую строку, если nCharacters ≤ 0

RTRIM(Expression
                [, nFlags]
                [, cParseChar
               
[, cParseChar2 [, ...]]])

Возвращает параметр Expression без хвостовых пробелов, cParseChar-строк или 0-байтов. Параметры описаны при рассмотрении функции ALLTRIM( )

SOUNDEX(cExpression)

Возвращает 4 символа, характеризующие фонетическое представление заданной строки cExpression. Сравнивая результаты функции, полученные для разных строк, можно определить, насколько эти строки близки фонетически. Функция может быть использована для поиска в таблицах схожих описаний

SPACE(nSpaces)

Возвращает строку, состоящую из заданного числа пробелов

STR(nExpression
               
[, nLength
                [, nDecimalPlaces]])

Преобразовывает число nExpression в строку, содержащую nLength символов, из которых nDecimalPlaces символов используются для отображения цифр после десятичной точки.
Если nLength больше имеющихся в числе nExpression символов, то STR( ) добавит к результату с левой стороны пробелы.
Если nExpression имеет тип Numeric или Float и величина nLength недостаточна для представления числа, то STR( ) пытается представить число в научном формате; если это невозможно, то результат выводится в виде звездочек.
Если nExpression – это целое число и величина nLength недостаточна для его представления, то результат выводится в виде звездочек.
Если параметр nLength опущен, то длина результирующей строки равна 10 символам.
Если nDecimalPlaces меньше, чем число десятичных знаков в nExpression, то перед преобразованием nExpression округляется.
Если параметр nDecimalPlaces не задан, то число десятичных знаков в результате равно 0; десятичная точка не отображается

STRCONV(cExpression,
                nConversionSetting
                [, nRegionalIdentifier
               
[, nRegionalIDType]])

Преобразовывает строку cExpression в строку указанного вида: 1-байтовую, 2-байтовую, UNICODE и др. или выполняет иное преобразование. Рассмотрена после настоящей табл. и примеров

STREXTRACT(
                cSearchExpression,
                cBeginDelim
                [, cEndDelim
                [, nOccurrence
                [, nFlag]]]])

Находит строку, расположенную между двумя разделителями. Рассмотрена после настоящей табл. и примеров

STRTOFILE(cExpression,
                cFileName
               
[, lAdditive | nFlag])

Записывает строку cExpression в файл cFileName. Рассмотрена после настоящей табл. и примеров

STRTRAN(cSearched,
                cExpressionSought
               
[, cReplacement]

                [, nStartOccurrence]
                [, nNumberOfOccurrence],

                [, nFlags])

Находит в строке cSearched подстроку cExpressionSought и заменяет ее вхождения подстрокой cReplacement. Номер первого заменяемого вхождения задается параметром nStartOccurrence. Число замен ограничивает параметр nNumberOfOccurrence. Преобразованная строка возвращается в качестве результата.
Параметры cSearched и cExpressionSought могут быть memo-полями.
Если параметр cReplacement опущен, то каждое вхождение cExpressionSought замещается строкой нулевой длины.
Если опущен параметр nStartOccurrence, то замены выполняются начиная с первого вхождения cExpressionSought.
Если опущен параметр nNumberOfOccurrence, то выполняются все замены начиная с вхождения под номером nStartOccurrencet
Параметр nFlags принимает следующие значения:

·              0 (по умолчанию) – чувствительный к регистру поиск;
·              1 – нечувствительный к регистру поиск;
·              2 – чувствительный к регистру поиск, найденное вхождение заменяется на строку cReplacement, регистр которой приведен в соответствие с регистром найденного вхождения. Правда, такое изменение будет выполнено, если найденная подстрока целиком состоит из прописных или строчных букв или является proper-строкой (см. функцию PROPER( ));
·              3 – то же, что и 2, но выполняется нечувствительный к регистру поиск.
Значение необязательных параметров, которые нужно пропустить, устанавливаются равными –1

STUFF(cExpression,
                nStartReplacement,

                nCharactersReplaced,
                cReplacement)

Возвращает строку, полученную в результате замены в строке cExpression начиная с позиции nStartReplacement заданного числа символов (nCharactersReplaced) на подстроку cReplacement.
Если nCharactersReplaced = 0, то строка cReplacement вставляется в cExpression.
Если cReplacement является строкой нулевой длины, то из строки cExpression удаляются nCharactersReplaced символов, если вдобавок nStartReplacement + nCharactersReplaced – 1 больше длины строки, то удаляются все символы начиная с символа nStartReplacement

SUBSTR(cExpression,
                nStartPosition

                [, nCharacterReturned])

Возвращает подстроку, состоящую из символов строки cExpression, взятых начиная с позиции nStartPosition. Число возвращаемых символов может быть ограничено параметром nCharacterReturned.
Если nStartPosition больше длины cExpression, то функция вернет строку нулевой длины.
При употреблении SUBSTR( ) с memo-полями в SELECT – SQL используйте вдобавок PADR( ), чтобы получать надлежащие результаты при обработке пустых или переменной длины memo-полей

SYS(10, nJulianDayNumber)

По известной дате юлианского календаря, представленной в виде числа nJulianDayNumber, возвращает символьное представление даты по новому стилю. Рассмотрена в разд. 3.9.5

SYS(2007, cExpression
               
[, nSeed [, nFlags]])

Возвращает контрольную сумму символьного параметра cExpression. Рассмотрена после настоящей табл. и примеров

TEXTMERGE(cExpression
                [, lRecursive
               
[, cLeftDelim
               
[, cRightDelim]]])

Выполняет оценку подстрок, входящих в строку cExpression и заключенных между левым и правым разделителями, и возвращает полученную строку в качестве результата.
Если параметр lRecursive задан и равен .T., то функция произведет оценку выражений на всех уровнях вложения разделителей текста.
Параметры cLeftDelim и cRightDelim задают соответственно левый и правый разделители текста. Параметры не должны содержать более 2-х символов.
Если параметры cLeftDelim и cRightDelim не указаны, то используются заданные по умолчанию или командой SET TEXTMERGE DELIMITERS разделители. Если параметры присутствуют, то они временно замещают разделители, заданные этой командой.
Функция TEXTMERGE( ) подвержена установкам, задаваемым командой SET TEXTMERGE SHOW | NOSHOW

RTRIM(Expression
                [, nFlags]
                [, cParseChar
               
[, cParseChar2 [, ...]]])

Возвращает, так же как и RTRIM( ),  параметр Expression без хвостовых пробелов, cParseChar-строк или 0-байтов. Параметры описаны при рассмотрении функции ALLTRIM( )

TTOC(dExpression
               
| tExpression [, 1 | 2])

Возвращает символьное представление даты dExpression или даты и времени tExpression. Описание и примеры см. в табл. 3.36

TRANSFORM(eExpression
                [, cFormatCodes])

Преобразовывает eExpression в строку символов в соответствии с форматной строкой, заданной параметром cFormatCodes, и возвращает ее в качестве результата. Рассмотрена после настоящей табл. и примеров

TXTWIDTH(cExpression
               
[, cFontName,
                nFontSize
               
[, cFontStyle]])

Возвращает длину символьного выражения cExpression с учетом средней ширины символа шрифта. Средняя ширина символа в пикселях для заданного шрифта возвращается функцией FONTMETRIC(6, …). В случае непропорционального шрифта функция возвращает число символов в cExpression. Необязательные параметры cFontName, nFontSize и cFontStyle задают соответственно имя, размер и стиль шрифта. Возможные значения параметра cFontStyle см. в табл. 4.3

TYPE(cExpression)

Оценивает выражение cExpression, заключенное в кавычки, и возвращает тип его результат

UPPER(cExpression)

Возвращает строку cExpression, в которой строчные буквы заменены на прописные

VAL(cExpression)

Возвращает числовое значение, содержащееся в начальной подстроке строки cExpression, состоящей из цифр и имеющую, возможно, одну точку. Так, в строке "+234.55АБВ" в число будет преобразована начальная подстрока "+234.55".
Строка cExpression может начинаться с символов '$', '+', '–' и '.'.
Если первый символ строки отличен о указанных и не является числом, то VAL( ) вернет 0.
Если первый символ строки – это '$', то VAL( ) вернет значение типа Currency

VARTYPE(eExpression
               
[, lNullDataType])

Возвращает символ, характеризующий тип выражения eExpression

Замечания:

1. На месте cExpression может быть как символьное выражение, так и memo-поле.

2. Некоторые приведенные функции, имеют аналоги, работающие 2-байтовыми символами. Имена функций-аналогов образуются путем добавления латинской буквы "C" в конец имени функции-прототипа, например: LEFT( ) – LEFTC( ). Если после добавления получается имеющееся в табл. 3.25 имя, то перед добавленной буквой проставляется символ подчеркивания, например: AT( ) – AT_C( ). Если 2-байтовой функции подать 1-байтовый параметр, то она сработает так же, как и функция-прототип. Имена функций, имеющих 2-байтовые аналоги: AT( ), ATC( ), CHRTRAN( ), LEFT( ), LEN( ), LIKE( ), RAT( ), RIGHT( ), STUFF( ) и SUBSTR( ).

3. Символьные функции могут оперировать полями типа Varchar и Varchar (Binary).

4. Символьные функции могут принимать двоичные параметры. Тип результата функции определяется типом ее параметров, например:

? Substr('abc', 2)                 && Напечатает: bc
? Substr(0h616263, 2)                 && Напечатает: 0h6263

Примеры:

&&

&& ALLTRIM( ), LTRIM( ), RTRIM( ) и TRIM( )

? 'ab' + '     cd     ' + 'ef'               && Напечатает: ab    cd    ef

? 'ab' + Alltrim('     cd     ') + 'ef' && Напечатает: abcdef

? 'ab' + Ltrim('     cd     ') + 'ef'    && Напечатает: abcd     ef

? 'ab' + Rtrim('     cd     ') + 'ef'   && Напечатает: ab     cdef

? 'ab' + Trim('     cd     ') + 'ef'     && Напечатает: ab     cdef

? Alltrim('  a1A155B2b2  ', 1, '  ', 'a1', 'b2')       && Напечатает: 55

? Alltrim('  a1A155B2b2  ', 0, '  ', 'a1', 'b2')       && Напечатает: A155B2

&&

&& ASC( ) и CHR( )

? Asc('Ю')                           && Напечатает: 222

? Chr(Asc('Ю'))                  && Напечатает: Ю

&&

&& AT( ), ATC( ) и RAT( )

? At('ab', 'abcdabcd', 2)       && Напечатает: 5

? At('aB', 'abcdabcd', 2)      && Напечатает: 0

? Atc('aB', 'abcdabcd', 2)    && Напечатает: 5

? Rat('ab', 'abcdabcd')         && Напечатает: 5

&&

&& ATCLINE( ), ATLINE( ) и RATLINE( )

&& Memo-поле MemoB текущей записи таблицы Test содержит следующий

&& расположенный на 2-х строчках текст:

&& Это memo-поле

&& и его вторая строка

? Atcline('Вторая', Test.MemoB)    && Напечатает: 2

? Atline('Вторая', Test.MemoB)      && Напечатает: 0

? Ratline('вторая', Test.MemoB)     && Напечатает: 2

&& Изменяем число символов в одной строчке символьного выражения

set memowidth to 10

? Atcline('Вторая', Test.MemoB)    && Напечатает: 4

&& CHR(13) – символ возврата каретки

someText = "Text Line 1" + Chr(13) + "Text Line 2" + Chr(13) + "Text Line 3"

? Atline("Text", someText) && Напечатает: 1

? Ratline("Text", someText)   && Напечатает: 3

&&

&& CHRTRAN( )

? Chrtran("1a2ab3bc", "abc", "def")         && Напечатает: 1d2de3ef

? Chrtran("ABCD", "ABC", "XY") && Напечатает: XYD

&&

&& CPCONVERT( )

&& Получаем текущую кодовую страницу

cp = CPCurrent( )

windowsString = 'Преобразованная строка'

&& 866 – номер кодовой страницы Russian MS DOS

&& Преобразование Windows – DOS

dosString = CPConvert(cp, 866, windowsString)

? dosString                          && Напечатает:

&& Преобразование DOS – Windows

windowsString = CPConvert(866, cp, dosString)

? windowsString                 && Напечатает: Преобразованная строка

&&

&& CTOD( ), CTOT( ), DTOC( ), DTOS( ), DMY( ) и TTOC( )

&& Примеры см. в табл. 3.36

&&

&& EVALUATE( )

&& Примеры см. в разд. 5.6.2

&&

&& GETWORDCOUNT( ) и GETWORDNUM( )

someString = "AAA aaa, BBB" + Chr(10) + "bbb, CCC ccc"

&& В строке 2 заданных по умолчанию вида разделителей: пробел

&& и CHR(10) – символ конца строки

? GetWordCount(someString)         && Напечатает: 6

&& В качестве разделителя берется запятая

? GetWordCount(someString, ",")   && Напечатает: 3

? GetWordNum(someString, 2)       && Напечатает: aaa,

? GetWordNum(someString, 2, ",")

&& Напечатает два слова на двух строках:

BBB

bbb

&&

&& INLIST( )

&& Параметры функции имеют тип Character

? Inlist('cd', 'cd1', 'cd')         && Напечатает: .T.

? Inlist('cd', 'cd1', 'cd2')       && Напечатает: .F.

set exact off

? Inlist('cd3', 'cd1', 'cd')       && Напечатает: .T.

set exact on

? Inlist('cd3', 'cd1', 'cd')       && Напечатает: .F.

&& Параметры функции – имеют тип Numeric

? Inlist(1, 2, 4, 1, 3)            && Напечатает: . T.

&&

&& ISLOWER( ), ISUPPER( )

? Islower('Ю')                     && Напечатает: .F.

? Isupper('Ю')                     && Напечатает: .T.

&&

&& LOWER( ) и UPPER( )

? Lower('aBCd')                  && Напечатает: abcd

? Upper('abCd')                  && Напечатает: ABCD

&&

&& MAX( )

? Max('cd1', 'cd3', 'cd2')      && Напечатает: cd3

&&

&& NORMALIZE( )

? Normalize('2  *  x  *  exp(  -  x)')  && Напечатает: 2*X*EXP(-X)

&&

&& PADL( ), PADR( ) и PADC( )

? Padl('abc', 9, '-')                && Напечатает: ------abc

? Padr('abc', 9, '-*')             && Напечатает: abc-*-*-*

? Padc('abc', 9, '*-')             && Напечатает: *-*-abc*-*

&&

&& PROPER( )

? Proper("ниКОлаЕВ н. а.")  && Напечатает: Николаев Н. А.

&&

&& REPLICATE( )

? Replicate('Ab', 3)             && Напечатает: AbAbAb

&&

&& SOUNDEX( )

? Soundex('Alpha')             && Напечатает: A410

&& Alpha, Alpa и Alp могут описывать в таблицах одну сущность

&& Возможно, что лучше вместо трех различных
&& описаний использовать одно – Alpha

? Soundex('Alpha') = Soundex('Alpa')      && Напечатает: .T.

? Soundex('Alpha') = Soundex('Alp')       && Напечатает: .T.

? Soundex('beta')                && Напечатает: B300

&&

&& SPACE( )

? 'ab' + Space(10) + 'cd'      && Напечатает: ab          cd

&&

&& STR( )

? Str(6.725)                         && Напечатает:          6

? Str(6.725, 4, 2)                 && Напечатает: 6.73

? Str(6.725, 5, 3)                 && Напечатает: 6.725

? Str(Exp(23))                     && Напечатает 9744803446

? Str(Exp(24))                     && Напечатает: 2.648E+10

? Str(12345, 4)                    && Напечатает: ****

&&

&& STRTRAN( )

someString = "aBCaBCaBCaBC"

? Strtran(someString, "BC")          && Напечатает: aaaa

? Strtran(someString, "BC", "D")  && Напечатает: aDaDaDaD

? Strtran(someString, "BC", "D", 3)         && Напечатает: aBCaBCaDaD

? Strtran(someString, "BC", "D", 2, 1)     && Напечатает: aBCaDaBCaBC

&& Нечувствительный к регистру поиск

? Strtran(someString, "bc", "d", -1, -1, 1) && Напечатает: adadadad

&& Нечувствительный к регистру поиск;

&& изменение регистра заменяющего символа "d"

? Strtran(someString, "bc", "d", -1, -1, 3) && Напечатает: aDaDaDaD

&& Нечувствительный к регистру поиск;

&& proper-изменение регистра заменяющей строки "петр"

? Strtran("Иванов", "иван", "петр", -1, -1, 3)    && Напечатает: Петров

&&

&& STUFF( )

? Stuff("Строка до", 8, 2, "после") && Напечатает: Строка после

&& Удаляются 2 последних символа (все начиная с 8-го и кончая последним)

? Stuff("Строка до", 8, 5, "")        && Напечатает: Строка

&&

&& SUBSTR( )

? Substr("Это подстрока", 5)        && Напечатает: подстрока

? Substr("Это подстрока", 5, 3)    && Напечатает: под

&&

&& TEXTMERGE( )

set textmerge off

fi = Pi( ) / 4

text to someText noshow

Синус угла <<fi>> равен <<Sin(fi)>>

endText

? Textmerge(someText)

&& Напечатает: Синус угла 0,7854 равен 0,71

&&

&& TXTWIDTH( )

? Txtwidth('abcd')                          && Напечатает: 4.667

? Txtwidth('abcd', 'Times New Roman', 24, 'BI')         && Напечатает: 4.769

&&

&& VAL( )

? 2 * Val('123')                               && Напечатает: 246.00

? 2 * Val('–123.45ABC')                && Напечатает: –246.90

? Val('abc')                                     && Напечатает: 0.00

&& Преобразование "строка-число" возможно и в том случае,

&& если в начале строки расположены символы '$', '+', '–' и '.'

? Val('$+.55')                                 && Напечатает: 0.5500

Функция

STRCONV(cExpression, nConversionSetting [, nRegionalIdentifier
[, nRegionalIDType]])

преобразовывает строку cExpression в строку указанного вида: 1-байтовую, 2-байтовую, UNICODE и др. или выполняет иное преобразование.

Возвращает преобразованную строку в качестве результата.

Параметры:

nConversionSetting – задает тип преобразования; описан в табл. 3.26.

Таблица 3.26

Описание параметра nConversionSetting

nConversionSetting

Выполняемые преобразования cExpression

1

1-байтовые символы в 2-байтовые

2

2-байтовые символы в 1-байтовые

3

2-байтовые Katakana-символы в 2-байтовые Hiragana-символы

4

2-байтовые Hiragana-символы в 2-байтовые Katakana-символы

5

2-байтовые символы в UNICODE-символы

6

UNICODE-символы в 2-байтовые символы

7

В нижний регистр (с учетом локального идентификатора)

8

В верхний регистр (с учетом локального идентификатора)

9

2-байтовые символы в UTF-8-символы

10

UNICODE-символы в UTF-8-символы

11

UTF-8-символы в 2-байтовые символы

12

UTF-8-символы в UNICODE-символы

13

1-байтовые символы в кодируемые 64-битовые

14

1-байтовые символы в некодируемые 64-битовые

15

1-байтовые символы в кодируемые 16-битовые

16

1-байтовые символы в некодируемые 16-битовые

nRegionalIdentifier – задает локальный идентификатор. Если значение ошибочно или не поддерживается системой, то возникнет ошибка "Invalid locale ID". Если параметр опущен, то используется системный локальный идентификатор. Возможные значения локального идентификатора приведены в табл. 3.27.

Таблица 3.27

Значения nLocaleID

nRegionalIdentifier

Язык

1029

Чешский

1031

Германия

1033

Английский (по умолчанию)

1034

Испанский

1036

Французский

1040

Итальянский

1045

Польский

1046

Португальский (Бразилия)

2070

Португальский (Португалия)

nRegionalIDType – задает, будет ли использован для преобразования локальный идентификатор, кодовая страница или набор символов шрифта; принимает следующие значения:

  • 0; nRegionalIdentifier – это локальный идентификатор (по умолчанию);

  • 1; nRegionalIdentifier – это номер кодовой страницы (см. разд. 3.7.6);

  • 2; nRegionalIdentifier – это номер набора символов шрифта (см. описание функции GETFONT( )).

Функция полезна при работе с 2-байтовыми символами.

Функция

STREXTRACT(cSearchExpression, cBeginDelim
[, cEndDelim [, nOccurrence [, nFlag]]]])

находит в выражении cSearchExpression строку, расположенную между двумя разделителями, и возвращает ее в качестве результата.

Параметры:

cBeginDelim – символ, используемый в качестве начального разделителя. В качестве cBeginDelim также может быть указана строка нулевой длины. В этом случае поиск ведется начиная с первой позиции строки cSearchExpression.

cEndDelim – символ, используемый в качестве конечного разделителя; если не задан, то используется cBeginDelim. В качестве cBeginDelim также может быть указана строка нулевой длины. В этом случае поиск завершается последней позицией строки cSearchExpression.

nOccurrence – задает номер вхождения cBeginDelim в cSearchExpression, с которого начинается поиск.

nFlag – 2-битовый флаг поиска; задается как сумма указанных в табл. 3.28 значений.

Таблица 3.28

Описание параметра nFlag

Бит

Значение

Действие

0

1

Выполняется поиск, не учитывающий регистр символов-разделителей

1

2

Завершающий разделитель необязателен. Если таковой не обнаружен, то будет возвращена конечная часть строки cSearchExpression, начинающаяся с позиции cBeginDelim + 1

2

4

Включает разделители в возвращаемый результат

По умолчанию поиск чувствителен к регистру разделителей и требует присутствия обоих разделителей.

Примеры:

someString = 'AA aa, BB bb, CC cc: DD dd'

? Strextract(someString, ',', ':', 2)     && Напечатает: CC cc

? Strextract(someString, ':', ':')         && Напечатает пустую строку

&& Параметр nFlag = 2

? Strextract(someString, ':', ':', 1, 2) && Напечатает: DD dd

&& Тот же результат даст задание одного разделителя

? Strextract(someString, ':') && Напечатает: DD dd

? Strextract(someString, 'b', 'c')       && Напечатает: b, CC

&& Параметр nFlag = 1

? Strextract(someString, 'b', 'c', 1, 1)        && Напечатает: B bb,

&& Параметр nFlag = 3 (первый и второй бит параметра содержат 1)

? Strextract(someString, 'd', 'e', 1, 3)        && Напечатает: D dd

Функция

STRTOFILE(cExpression, cFileName [, lAdditive | nFlag])

записывает строку cExpression в файл cFileName.

Параметры:

cFileName – имя файла, в который записывается строка. Может включать путь. Если файл с указанным именем не существует, то он будет автоматически создан VFP.

lAdditive – строка добавляется в конец файла, если параметр равен .T.; в противном случае файл перезаписывается. Если SET SAFETY установлен в ON и файл существует, то будет задан вопрос о необходимости перезаписи файла. Если SET SAFETY установлен в OFF, то файл перезаписывается без предупреждения. Параметр оставлен для совместимости с прежними версиями.

nFlag – 4-битовый флаг записи. Может быть, в частности, начиная с версии VFP 7 использован вместо lAdditive. Оказывает описанное в табл. 3.29 влияние.

Таблица 3.29

Описание параметра nFlag

nFlag

Бит

Действие

0

0000

Действует по умолчанию. Существующий файл перезаписывается (тот же эффект имеет задание lAdditive = .F.)

1

0001

Строка добавляется в конец файла (как и при lAdditive = .T.)

2

0010

В начало файла записывается FF FE – маска Unicode Byte Order Mark (BOM); cExpression воспринимается как UNICODE-строка и не подвергается преобразованиям (в файле сохраняется внутреннее представление строки). Файл перезаписывается

4

0100

В начало файла записывается EF BB BF – маска UTF-8 BOM; cExpression воспринимается как UTF-8-строка и не подвергается преобразованиям. Файл перезаписывается

Значения nFlag равные 3 и 5 недопустимы: нельзя добавлять в существующий файл UTF-8 или UNICODE-строки.

Функция STRTOFILE( ) открывает файл в режиме разделяемого доступа. В предыдущих версия эта функция открывала файл монопольно.

Пример:

someString = 'Строка, переносимая в файл d:\a.txt как UNICODE-строка'

Strtofile(someString, 'd:\a.txt', 2)

Файл d:\a.txt, открытый в Word как Кириллица Windows:

яюСтрока, переносимая в файл d:\a.txt как UNICODE-строка

Функция

SYS(2007, cExpression [, nSeed [, nFlags]])

возвращает контрольную сумму строки cExpression.

Тип возвращаемого результата – Character.

Позволяет генерировать для больших строк контрольные суммы, превышающие 16-битные. Контрольная сумма может быть использована для проверки достоверности данных, сравнения двух строк.

Замечание. Дополнительные возможности предоставляет функция SYS(2017), генерирующая контрольную сумму, основанную на текущей записи.

Параметры:

nSeed – затравка, используемая при вычислении контрольной суммы. Параметр оставлен для совместимости с прежними версиями. Если nSeed = –1, то берется заданное по умолчанию значение затравки. При употреблении алгоритма CRC32 значение nSeed игнорируется.

nFlags – принимает значение 0 или 1. Если опущен или равен 0, то при вычислении контрольной суммы используется алгоритм CRC16, в противном случае употребляется алгоритм CRC32.

Функция

TRANSFORM(eExpression [, cFormatCodes])

преобразовывает eExpression в строку символов в соответствии с форматной строкой, заданной параметром cFormatCodes.

Если параметр cFormatCodes опущен, то преобразование eExpression с символьную строку выполняется в соответствии с табл. 3.30.

Таблица 3.30

Преобразования TRANSFORM( ) при опущенном cFormatCodes

Тип eExpression

Преобразования

Blob

Возвращает строку, представляющую двоичную величину без префикса 0h, например:

? Transform(0hFE0AF2)                            && Напечатает: FE0AF2

Двоичные величины не воспринимают форматные коды, кроме ограничения по длине. Например, каждая из трех следующих функций вернет строку "FE0A":

Transform(0hFE0AF2, "XXXX")
Transform(0hFE0AF2, "9999")
Transform(0hFE0AF2, "####")

Максимальная длина результата с такими форматными кодами – 255 символов

Character

Не выполняется

Currency

Определяется настройками вкладки Regional диалогового окна Options

Date

DTOC( )

DateTime

TTOC( )

General

Возвращает "Gen", если general-поле содержит объект, или "gen" – в противном случае

Logical

Возвращает в зависимости от значения eExpression ".T." или ".F."

Memo

Не выполняется

Numeric (Double, Float, Integer)

Число в строку. Если десятичная часть числа eExpression состоит целиком из нулей, то они и десятичная точка удаляются из результата, например:

? Transform(123.000)                                 && Напечатает: 123

Если 0 < ABS(eExpression) < 1 и нуль отсутствует перед десятичной точкой, то он будет добавлен к результату, например:

? Transform(–.123)                                     && Напечатает: –0.123

? Transform(.123)                                        && Напечатает: 0.123

Object

Возвращает "(Object)"

Varbinary

То же, что и для типа Blob

Замечание. Использование TRANSFORM( ) с большими отрицательными числами, содержащими десятичную часть, может привести к переполнению. Взамен следует употреблять функцию STR( ).

Строка cFormatCodes может содержать приведенные в табл. 4.5 и 4.6 функциональные и картинные коды. Правила их употребления описаны в разд. 4.1.2.2 при рассмотрении опции PICTURE команды ?.

Если число, записываемое в поле таблицы типа Numeric, имеет больше десятичных знаков, чем это задано для поля, то VFP:

  • отбрасывает лишние десятичные знаки, округляя оставшееся число;

  • если значение вновь слишком велико, выполняет попытку записать его в научном формате;

  • если значение по-прежнему слишком велико, записывает в поле звездочки.

Примеры.

set currency to " руб."

set currency right

set separator to ","

? Transform(12345.98, "@$ 999,999.99")         && Напечатает: 12,345.98 руб.

? Transform("aaabbcc", "@R 999-99-99")         && Напечатает: aaa-bb-cc

? Transform(_SCREEN)            && Напечатает: (Object)