« Назад
Приведены в табл. 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)
|