Private KeeperPrivate Keeper
in-Line Kit/Функции in-Line Kit

Текст и строки

Регистр, края строки, выбор знака, обработка списков, случайные значения и повтор запроса с точными примерами.

Эти функции преобразуют одну строку или список строк прямо в поле проекта. Сначала проверьте место функции в порядке обработки, затем выберите операцию по результату, который должен получиться.

Общая запись

Обычная функция начинается и заканчивается одинаковой меткой. Самостоятельное выражение дополнительно заключается в круглые скобки:

(|ИМЯ|входное значение|ИМЯ|)

Например:

(|UPPER|catalog|UPPER|)

Результат — CATALOG. Входным значением может быть обычный текст, переменная или результат вложенной функции. Закрывающая метка обязательна: (|UPPER|catalog) не является законченной функцией.

Самостоятельно

(|LOWER|MainTeam|LOWER|) вычисляется как отдельное выражение и возвращает mainteam.

В присваивании

|DV|[Team]=(|LOWER||PARS|[1]|LOWER|) сохраняет преобразованный результат первого разборщика.

Что выбрать

Изменить знаки

LOWER, UPPER, FUPPER меняют регистр, а REMOVENUM удаляет цифры от 0 до 9.

Проверить край или длину

FDSPACE и EDSPACE обрабатывают края, LENGTH считает длину, а GETCHAR возвращает знак по номеру.

Обработать список строк

DEMPTYSTR, DUPDEL, GETLINE, GETCOUNT, FILTERLINES и SORTLINES работают с многострочным значением.

Случайность или повтор

RANDOM создаёт строку, SHUFFLE меняет порядок строк, а REPEAT повторяет выполнение запроса.

Регистр и состав строки

|LOWER|

LOWER переводит все буквы входной строки в нижний регистр. Цифры, пробелы и знаки препинания не меняются.

(|LOWER|ProfileName=MainTeam|LOWER|)

Результат:

profilename=mainteam

|UPPER|

UPPER переводит все буквы входной строки в верхний регистр.

(|UPPER|Locale=ru-RU|UPPER|)

Результат:

LOCALE=RU-RU

Обе функции используют правила регистра Windows. Они не заменяют буквы транслитерацией и не меняют кодировку строки.

Края, длина и позиция

|FDSPACE|

FDSPACE последовательно удаляет пробельные знаки с начала обычной непустой строки.

(|FDSPACE|   Currency=EUR|FDSPACE|)

Результат:

Currency=EUR

|EDSPACE|

EDSPACE удаляет с конца пробелы, знаки табуляции и переводы строк.

(|EDSPACE|SessionId=8f3c1b2a   |EDSPACE|)

Результат:

SessionId=8f3c1b2a

Пробельная строка не становится гарантированно пустой

Текущее выполнение FDSPACE прекращает удаление, когда остаются два знака, а EDSPACE всегда оставляет хотя бы один знак. Поэтому строка только из пробелов не является надёжной проверкой пустого значения: сначала задайте явное правило, что такой вход недопустим.

Простые операции со списком

Многострочное значение рассматривается как последовательность строк. Переводы строк разделяют элементы, а запятые внутри строки остаются обычным текстом.

|DEMPTYSTR|

DEMPTYSTR удаляет пустые строки и строки, состоящие только из пробельных знаков.

#beginScript
(|DEMPTYSTR|apple


pear|DEMPTYSTR|)
#endScript

Результат:

apple
pear

Пробелы внутри непустой строки сохраняются. Например, строка red apple не разбивается и не изменяется.

|DUPDEL|

DUPDEL сортирует строки по возрастанию и удаляет точные повторы. Исходный порядок списка не сохраняется.

#beginScript
(|DUPDEL|pear
apple
pear
banana|DUPDEL|)
#endScript

Результат:

apple
banana
pear

Регистр учитывается: apple и Apple являются разными строками. Если порядок важен, не используйте DUPDEL как простое «оставить первое вхождение».

Удаление строк по списку исключений

FILTERLINES удаляет из SOURCE каждую строку, совпавшую хотя бы с одной строкой из списка STOP. Поля обязательны и располагаются только в указанном порядке.

(|FILTERLINES|
|SOURCE|исходные строки|SOURCE|
|STOP|строки для удаления|STOP|
|MATCH|exact или contains|MATCH|
|CASE|sensitive или insensitive|CASE|
|EMPTYLINES|keep или drop|EMPTYLINES|
|FILTERLINES|)
ПолеДопустимые значенияДействие
MATCHexact, containsПолное совпадение строки или наличие указанной части
CASEsensitive, insensitiveУчитывать или не учитывать регистр
EMPTYLINESkeep, dropСохранить или удалить строки нулевой длины до сравнения

Самостоятельный пример:

#beginScript
(|FILTERLINES|
|SOURCE|apple
spam
pear|SOURCE|
|STOP|spam|STOP|
|MATCH|exact|MATCH|
|CASE|insensitive|CASE|
|EMPTYLINES|drop|EMPTYLINES|
|FILTERLINES|)
#endScript

Результат:

apple
pear
exact

Строка spam из списка STOP удалит строку spam, но сохранит spam-score.

contains

Строка spam из списка STOP удалит и spam, и spam-score.

EMPTYLINES применяется и к исходным строкам, и к списку STOP. Значение drop удаляет только строки нулевой длины; строка из пробелов остаётся. При сочетании contains, keep и пустой строки в STOP будут удалены все исходные строки, потому что пустая часть содержится в любой строке.

Значения и порядок полей строгие

Имена полей, варианты exact, contains, sensitive, insensitive, keep, drop и их регистр должны совпадать с примером. Пропущенное, переставленное или неизвестное поле завершает обработку явной ошибкой.

Сортировка строк

SORTLINES сортирует SOURCE как текст или как числа. Режим определяет точный набор полей.

В режиме lexical поле CASE обязательно:

#beginScript
(|SORTLINES|
|SOURCE|pear
Apple
banana|SOURCE|
|MODE|lexical|MODE|
|DIRECTION|ascending|DIRECTION|
|CASE|insensitive|CASE|
|EMPTYLINES|drop|EMPTYLINES|
|SORTLINES|)
#endScript

Результат:

Apple
banana
pear

CASE принимает sensitive или insensitive. Сравнение выполняется по всей строке, а строки с одинаковым значением сохраняют взаимный исходный порядок.

DIRECTION принимает ascending или descending, а EMPTYLINESkeep или drop. При keep пустые строки идут первыми по возрастанию и последними по убыванию. Удаляются только строки нулевой длины; пробелы не считаются пустой строкой.

Набор полей зависит от режима

Для lexical после DIRECTION обязательно укажите CASE. Для numeric сразу укажите EMPTYLINES: добавление CASE является ошибкой. Все имена и допустимые значения чувствительны к регистру.

Случайная строка

RANDOM выбирает каждый знак из заданного набора и создаёт строку нужной длины. Между набором и диапазоном ставится дополнительная вертикальная черта:

(|RANDOM|набор знаков|минимум-максимум|RANDOM|)

Фиксированная длина задаётся одинаковыми границами:

(|RANDOM|ABC123|5-5|RANDOM|)

Возможный результат — 3BAC1; каждый вызов может вернуть другое сочетание, а один знак может встретиться несколько раз.

Верхняя граница не входит в переменный диапазон

1-9 даёт длину от 1 до 8. Чтобы получить ровно пять знаков, используйте 5-5; чтобы получить от пяти до девяти, используйте 5-10. Первая граница должна быть не больше второй, а набор знаков не должен быть пустым.

Функция подходит для случайного выбора и вспомогательных значений, но её договор не обещает криптографическую стойкость. Не используйте результат как пароль, ключ шифрования или иной секрет, если безопасность зависит от непредсказуемости.

Повтор запроса

REPEAT ничего не повторяет внутри текста. Функция возвращает пустую строку и изменяет ход выполнения проекта.

Тот же конкретный запрос

(|REPEAT|local|REPEAT|) возвращает выполнение к текущему запросу. Эта форма действует только в обработке до или после его отправки.

Запрос целиком

(|REPEAT||REPEAT|) возвращает выполнение к началу всего запроса; его циклическая часть также начинается сначала.

Пример повтора конкретного запроса после ответа retry:

|||PARS|[1]|=|retry
(|REPEAT|local|REPEAT|)

Пример полного повтора:

|||PARS|[1]|=|restart
(|REPEAT||REPEAT|)

Слово local пишется ровно так, строчными буквами. Любой другой непустой текст запускает полный повтор, поэтому опечатка не является безопасной ошибкой.

Условие должно когда-нибудь стать ложным

Если повтор не меняет ответ, счётчик попыток или другое проверяемое состояние, проект может выполнять один запрос без конца. Ограничьте число повторов явным счётчиком и предусмотрите отдельную ветвь завершения.