Элементарный способ разложения строки на подстроки

Стандартная функция разложения строки на подстроки по разделителю в платформе 1С версии 8.2 отсутствует. Если посмотреть на реализацию такой функции в БСП(Библиотека стандартных подсистем), то алгоритм весьма впечатляющий для такой операции: высчитывается позиция символа, применяется куча функций для работы со строками и т.д и т.п.

Недавно открыл для себя элементарный, просто до ужаса простой способ разложения/разделения строки на подстроки по разделителю. В качестве разделителя может выступать произвольный набор символов, но чаще всего это "," либо "|".

Способ заключается в том, что разделитель заменяем на символ перевода строки, тем самым из строки создаем многострочную строку (см. рисунок 1).
Рисунок 1. Преобразование строки в многострочную строку
Далее с помощью стандартных функций по работе со строками СтрЧислоСтрок() и СтрПолучитьСтроку() обходим построчно многострочную строку, читаем строку и записываем в массив.

Описание способа на языке платформы 1С:
Функция РазложитьСтроку(Знач ИсходнаяСтрока, Разделитель = ",")
// Создаем массив.
Подстроки = Новый Массив;
// Преобразовываем строку в многострочную строку.
МногострочнаяСтрока = СтрЗаменить(ИсходнаяСтрока, Разделитель, Символы.ПС);
// обходим построчно многострочную строку.
Для Индекс = 1 По СтрЧислоСтрок(МногострочнаяСтрока) Цикл
Подстроки.Добавить(СтрПолучитьСтроку(МногострочнаяСтрока, Индекс));
КонецЦикла;
// Возвращаем массив подстрок.
Возврат Подстроки;
КонецФункции


Если говорить о платформе 1С версии 8.3, то разработчики позаботились о наличии стандартной функции по разложению/разделению строки на подстроки по разделителю. Это функция глобального контекста по работе со строками СтрРазделить().

Синтаксис:
СтрРазделить(<Строка>, <Разделитель>, <ВключатьПустые>)

Параметры:
  • Строка (обязательный) - Тип: Строка. Разделяемая строка. 
  • Разделитель (обязательный) - Тип: Строка. Строка символов, каждый из которых является индивидуальным разделителем. 
  • ВключатьПустые (необязательный) - Тип: Булево. Указывает необходимость включать в результат пустые строки, которые могут образоваться в результате разделения исходной строки. Значение по умолчанию: Истина. 
Возвращаемое значение: Массив со строками, которые получились в результате разделения исходной строки.

UPD 22/08/2016
Существует еще один способ разложения строки вида "раз, два, три", т.е. где разделителем является запятая, на подстроки. Строка передается в первый параметр конструктора структуры по ключам и значениям. На выходе получаем структуру, ключами которой являются подстроки.

Пример:
Структура = Новый Структура("раз,два,три");
Для Каждого ЭлементСтруктуры Из Структура Цикл
Сообщить(ЭлементСтруктуры.Ключ);
КонецЦикла;


Комментарии

  1. Проблемма возникает когда последняя строка пустая. "раз,два," СтрЧислоСтрок() потом вернет 2 а не 3

    ОтветитьУдалить
  2. Владимир.

    Со структурой мой самый любимый способ, я бы еще здесь отметил, что элементы строки должны соответствовать правилам именования переменных.
    Т.е. если строка = "1, 100, #Вова", то, увы не сработает.

    Но и тут можно схитрить, надо только повнимательней присмотреться к след. записи: Список = Новый Структура("П1, П2, П3", 1, 100, "#Вова").

    ОтветитьУдалить

Отправить комментарий