GroupStringValues

From SunFlurry wiki
Jump to: navigation, search
  GroupStringValues (Функции работы со строками)
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в строку
Визуальность:Нет

Функция возвращает строку-массив значений, которая содержит только уникальные значения исходной строки-массива значений.

Строки-массивы используются для хранения большого количества одинаковых по натуре строк, для которых не имеет большого смысла использовать более дорогие методы хранения, типа списков или таблиц. Функции, работающие с такими кодированными массивами, в достаточной мере оптимизированы и практически не уступают по скорости сортированным таблицам или спискам, при этом занимая меньше памяти и гораздо проще с точки зрения программирования. Некоторые возможности функций для работы с такими строками (к примеру AssertStringValues, JoinStringValues) не имеют прямых аналогов в таблицах, что делает их более удобными источниками данных, когда есть необходимость в таких специфических действиях. Иными словами: данный набор функций может выиграть в просторе программирования и уменьшении потребности в памяти, тогда как работа с таблицами обычно выигрывает в скорости. Каждая строка-массив имеет формат:

  • Для строк с префиксами: <Префикс 1><Отделитель префикса><Значение 1><Разделитель значений><Префикс 2><Отделитель префикса><Значение 2><Разделитель значений>.... Пример: "1@Иванов#2@Петров#5@Сидоров" использует отделитель префикса "@" и разделитель значений "#".
  • Для строк без префиксов: <Значение 1><Разделитель значений><Значение 2><Разделитель значений>.... Пример: "Иванов"+_NEWLINE+"Петров"+_NEWLINE+"Сидоров" использует разделитель значений _NEWLINE.

Прежде чем решить, выгодно ли использование в конкретной ситуации строк-массивов, необходимо принять во внимание несколько факторов. Строки-массивы обычно используются, если данные содержат более или менее одинаковые элементы, часто, имеют одну и ту же длину, и нет необходимости в адресации конкретных элементов, выборке из массива по каждому элементу (иначе операции над массивами теряют смысл), элементы не имеют фиксированной позиции и индекса. К примеру, если имеются массивы с большим количеством серийных номеров изделий, когда необходимо проверить все ли серийные номера из массива в документе содержались в оригинальном массиве, либо исключить из оригинального массива, все серийные номера, которые были списаны во втором массиве, данный набор функций может быть успешно применен.

Каждый элемент массива также может содержать префикс любой длины. Префикс может использоваться, как для хранения дополнительной информации об элементах массива, так и для идентификации их в каком-либо другом источнике данных (к примеру, содержать коды элементов). Префиксы не используются при сравнениях, конкатенациях и прочих действиях с массивами, они также не отделяются от конкретных элементов и не удаляются при изменении массива, объединении с другим массивом и пр.

Нужно также понимать, что, если префиксы элементов используются для адресации из какого-то другого источника (т.е., данные не хранятся в строках, а, к примеру, в элементах справочников), то не имеет особого смысла применение этих функций, так как перенос между источниками будет усложнять программу, и не будет давать выигрыша в скорости и простоте кода по сравнению с работой с таблицами или списками.

Пример сравнения скорости выполнения и сложности построения между функциями JoinStringValues (команда "AND") и таблицами см. в статье Пример сравнения функций строк-массивов и таблиц

Синтаксис

GroupStringValues(<Аргумент>,<Строка-разделитель>,<Разделитель префикса>=""):<Результат (STRING)>

Аргументы

  • <Аргумент> - Cтрока-массив.
  • <Строка-разделитель (STRING)> - Строка-разделитель элементов массива.
  • <Разделитель префикса (STRING)> - (необязательный аргумент) Строка разделитель префиксов значений. По умолчанию отсутствует (т.е., префиксы не используются).

Возвращаемое значение

Функция возвращает строку в формате ANSI, если исходный массив был в формате ANSI, иначе будет возвращена строка в формате UTF-16.

Примеры

//Массив имен будет разделен знаками "#" и иметь цифровые префиксы, отделенные знаками "@"
аСтр:="1@Bella#2@Jennifer#3@Paul#4@Philip#5@George#6@Max#7@Michael#8@Gregory#9@Danny#1@George#2@Michael#3@Paul#4@Philip#5@Justin#6@Lynn#7@Peter";

Message(GroupStringValues(аСтр,"#","@"));
//Будет выведено: "1@Bella#9@Danny#5@George#8@Gregory#2@Jennifer#5@Justin#6@Lynn#6@Max#7@Michael#3@Paul#7@Peter#4@Philip"
//Заметьте: сохраняются префиксы элементов, следовавших первыми.