БИБЛИОТЕКА РАБОТЫ СО СТРОКАМИ И СПИСКАМИ
ФУНКЦИИ
FStrPadC(asStr, anLen, abRight, asFill) - осуществляет дополнение строки asStr справа (abRight = TRUE) или слева (abRight = FALSE) символами asFill до длинны anLen. Возвращаемым значением функции является дополненная строка.
- asStr - исходная строка, тип CHAR;
- anLen - длина выходной строки, тип INT64;
- abRight - дополнение пробелами слева/справа, тип LOGICAL;
- asFill - дополняемый символ, тип CHAR.
FStrPad(asStr, anLen, abRight) - осуществляет дополнение строки asStr справа (abRight = TRUE) или слева (abRight = FALSE) пробелами до длинны anLen. Возвращаемым значением функции является дополненная строка.
- asStr - исходная строка, тип CHAR;
- anLen - длина выходной строки, тип INT64;
- abRight - дополнение пробелами слева/справа, тип LOGICAL.
PADR(asStr, anLen) - осуществляет дополнение строки asStr справа пробелами до длинны anLen. Возвращаемым значением функции является дополненная строка.
- asStr - исходная строка, тип CHAR;
- anLen - длина выходной строки, тип INT64.
PADL(asStr, anLen) - осуществляет дополнение строки asStr слева пробелами до длинны anLen. Возвращаемым значением функции является дополненная строка.
- asStr - исходная строка, тип CHAR;
- anLen - длина выходной строки, тип INT64.
FStrCenter(asStr, anLen) - осуществляет центрирование строки asStr по ширине anLen.
- asStr - исходная строка, тип CHAR;
- anLen - длина выходной строки, тип INT64.
PADC(asStr, anLen) - осуществляет центрирование строки asStr по ширине anLen.
- asStr - исходная строка, тип CHAR;
- anLen - длина выходной строки, тип INT64.
{intrface.get strng}
DEF VAR iText AS CHAR NO-UNDO.
DEF VAR iLen AS INT NO-UNDO.
iText = " Конституция".
iLen = 30.
{setdest.i}
PUT UNFORMATTED " Текст|" + iText + "|" SKIP(1).
PUT UNFORMATTED " PADR|" + PADR(iText,iLen) + "|" SKIP.
PUT UNFORMATTED " FStrPad|" + FStrPad(iText,iLen,YES) + "|" SKIP(1).
PUT UNFORMATTED " PADL|" + PADL(iText,iLen) + "|" SKIP.
PUT UNFORMATTED " FStrPad|" + FStrPad(iText,iLen,NO) + "|" SKIP(1).
PUT UNFORMATTED " PADC|" + PADC(iText,iLen) + "|" SKIP.
PUT UNFORMATTED "FStrCenter|" + FStrCenter(iText,iLen) + "|" SKIP(1).
PUT UNFORMATTED " Эталон|" + FILL(" ", iLen) + "|" SKIP.
{preview.i}
{intrface.del}
Результат:
Текст| Конституция|
PADR|Конституция |
FStrPad| Конституция |
PADL| Конституция|
FStrPad| Конституция|
PADC| Конституция |
FStrCenter| Конституция |
Эталон| |
В случае, если дополняемая строка содержит пробелы в начале или в конце, функции PADR, PADL и PADC работают некорректно.
RemoveDoubleChars(iStr, iChr) - убирает задвоенные символы iChr в строке iStr.
- iStr - исходная строка, тип CHAR;
- iChr - проверяемый на задвоенность символ, тип CHAR.
DelDoubleChars(iStr, iChr) - убирает задвоенные символы iChr в строке iStr.
- iStr - исходная строка, тип CHAR;
- iChr - проверяемый на задвоенность символ, тип CHAR.
PairTrim(iStr, iChr) - удаляет попарно лидирующие и хвостовые символы iChr из строки iStr.
- iStr - исходная строка, тип CHAR;
- iChr - удаляемые символы, тип CHAR.
IsAlpha(iChr) - проверяет является ли символ - буквой. Результатом функции является логическое значение, тип LOGICAL.
- iChr - проверяемый символ, тип CHAR.
IsDigit(iChr) - проверяет является ли символ - цифрой. Результатом функции является логическое значение, тип LOGICAL.
- iChr - проверяемый символ, тип CHAR.
IsAlphaNum(iChr) - проверяет является ли символ либо буквой, либо цифрой. Результатом функции является логическое значение, тип LOGICAL.
- iChr - проверяемый символ, тип CHAR.
GetEntries(ipItem, ipText, ipSplit, ipDefault) - функция аналогичная функции ENTRY. Отличием данной функции от ENTRY является то, что при несуществующем элементе списка функция ENTRY завершается с ошибкой, а данная функция возвращает значение ipDefault.
- ipItem - номер элемента строки списка, тип INT64;
- ipText - строка списка, тип CHAR;
- ipSplit - разделитель списка, тип CHAR;
- ipDefault - возвращаемое значение по умолчанию, тип CHAR.
SetEntries(ipItem, ipText, ipSplit, ipValue) - функция присвоения элемента списка, аналогичная оператору ENTRIES. Отличием от оператора ENTRIES является то, что если элемента с указанным номером нет в списке, список будет расширен до необходимого размера.
- ipItem - номер элемента строки списка, тип INT64;
- ipText - строка списка, тип CHAR;
- ipSplit - разделитель списка, тип CHAR;
- ipValue - присваиваемое значение, тип CHAR.
ListsCrossing(iList1, iList2, iDelim) - функция определяет пересечение двух списков iList1 и iList2 и возвращает список значений данного пересечения.
- iList1 - список 1, тип CHAR;
- iList2 - список 2, тип CHAR;
- iDelim - разделитель списка, тип CHAR.
SortDelimList(iList, iDlm, iDsc) - сортирует значения в списке.
- iList - список, тип CHAR;
- iDlm - разделитель списка, тип CHAR;
- iDsc - сортировать по возрастанию (YES) или убыванию (NO), тип LOGICAL.
GetMangledName(iStr) - осуществляет транслитерацию строки содержащую кириллицу в латиницу. В конец транслитерируемой строки добавляется символ $. Также функция распознает ключевые слова и добавляет к строке два символа $.
Если кириллица и латиница идут вперемежку, символ $ добавляется в конце каждой группы символов кириллицы, или латиницы. При этом, если строка заканчивается латиницей символ $ не добавляется.
Транслитерация осуществляется по следующему правилу:
a - a | к - k | х - h |
б - b | л - l | ц - c |
в - v | м - m | ч - wc |
г - g | н - n | ш - ws |
д - d | о - o | ш - wt |
е - e | п - p | ъ - w% |
ё - wo | р - r | ь - w# |
ж - wz | с - s | ы - y |
з - z | т - t | э - we |
и - i | у - u | ю - wu |
й - wi | ф - f | я - wa |
Результатом функции является строка, тип CHAR.
- iStr - транслитерируемая строка, тип CHAR.
Примеры:
Транслитерируемое значение | Результат функции |
RUS | RUS |
РУС | rus$ |
РУСRUS | rus$RUS |
РУСRUSРУС | rus$RUS$rus$ |
TABLE | TABLE$$ |
Если значение глобальной переменной gInstanceXml = YES, то осуществляются дополнительные преобразования транслитерируемой строки в части замены спец. символов согласно представленной ниже таблицы:
# | _reschetka_ |
$ | _rusmangl_ |
% | _perc_ |
Таким образом, в случае gInstanceXml = YES преобразование строки АБВRUS будет осуществлено следующем образом:
АБВRUS → ABV$RUS → ABV_rusmangl_RUS
Такая замена необходима, например, для вывода Instance в XML по причине того, что данные спец символы недопустимы в наименовании тегов XML.
Здесь нужно отметить один неприятный момент. В функции используется своеобразный внутренний кэш в виде временной таблицы, в которую заносятся транслитерируемые строки и результат их транслитерации. При очередном вызове функции первым делом проверяется данная таблица и если подобная транслитерация уже осуществлялась и результат хранится в таблице, то он возвращается из нее, а не осуществляется повторное преобразование согласно таблице соответствия символов. Чем же это плохо? Суть проблемы заключается в том, что если при первой транслитерации заданной строки значение gInstanceXml <> YES, то при повторной транслитерации той же строки, но уже с установленной gInstanceXml = YES результат окажется тем же, что может привести к ошибке при выгрузке в XML. Ситуацию могло бы спасти наличие некого механизма принудительной очистки данной таблицы, но к сожалению такого механизма я не нашел.
GetOriginalName(iStr) - осуществляет обратную транслитерацию произведенную функцией GetMangledName(), т.е. восстанавливает исходную строку.
- iStr - транслитерируемая строка, тип CHAR.
ПРОЦЕДУРЫ
Check-Ascii-Set(iStr, iParam, iOthersSymbol, OUTPUT oResult) - осуществляет проверку строки на наличие в ней недопустимых символов.
- iStr - проверяемая строка, тип CHAR;
- iParam - параметр проверки, тип CHAR:
- 1 - символы кириллицы;
- 2 - символы латиницы;
- 3 - цифры;
- 4 - символы латиницы (верхний регистр), может содержать перечень параметров проверки;
- iOthersSymbo - иные допустимые символа, тип CHAR;
- oResult - Результат проверки, NO - в строке только допустимые символа; YES - в строке имеются недопустимые символа, тип LOGICAL.
Read-Str-FromFile (iFile, iSize, OUTPUT oStr) - осуществляет чтение заданного количества символов строки из файла с удалением недопустимых и повторяющихся символов.
- iFile - имя файла, тип CHAR;
- iSize - кол-во читаемых символов, тип INT64;
- oStr - обработанная строка, тип CHAR.
Перечень удаляемых недопустимых символов: