БИБЛИОТЕКА РАБОТЫ СО СТРОКАМИ И СПИСКАМИ


ФУНКЦИИ


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(asStranLen) - осуществляет дополнение строки asStr справа пробелами до длинны anLen. Возвращаемым значением функции является дополненная строка.

  • asStr - исходная строка, тип CHAR;
  • anLen - длина выходной строки, тип INT64.

PADL(asStranLen) - осуществляет дополнение строки asStr слева пробелами до длинны anLen. Возвращаемым значением функции является дополненная строка.

  • asStr - исходная строка, тип CHAR;
  • anLen - длина выходной строки, тип INT64.

FStrCenter(asStr, anLen) - осуществляет центрирование строки asStr по ширине anLen.

  • asStr - исходная строка, тип CHAR;
  • anLen - длина выходной строки, тип INT64.

PADC(asStranLen) - осуществляет центрирование строки asStr по ширине anLen.

  • asStr - исходная строка, тип CHAR;
  • anLen - длина выходной строки, тип INT64.

Как Вы можете видеть, функции PADR, PADL и FStrPad, а так же функции PADC и FStrCenter, являются идентичными.

{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.

Перечень удаляемых недопустимых символов:

 

Вы здесь: Главная ИБС Бисквит БАЗОВЫЙ БИБЛИОТЕКИ ИНТЕРФЕЙСОВ БИБЛИОТЕКА РАБОТЫ СО СТРОКАМИ И СПИСКАМИ