1С 8.3 БСП РазложитьСтрокуВМассивПодстрок - Программист 1С Минск. Автоматизация бизнеса.

Популярные страницы:
Перейти к контенту

1С 8.3 БСП РазложитьСтрокуВМассивПодстрок

Данные > Примеры кода 1С > 1С 8.3 БСП > Строковые функции
Перейти в раздел примеры кода 1С 8.3:
1С 8.3 БСП РазложитьСтрокуВМассивПодстрок: разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину. Если разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы, рекомендуется использовать функцию платформы СтрРазделить.
Примера кода от rayastar
// возвратит массив из двух элементов: "один", "два";
СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("один,два");

// возвратит массив из двух элементов: "один", "два";
СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("один, два",,,Истина);

// возвратит массив из двух элементов: "один", "два";
СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("один два", " ");

// возвратит массив из 5 элементов, три из которых  // пустые: "", "один", "", "два", "";
СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(";один;;два;", ";")
// Автор библиотеки: ООО "1С-Софт". Все права защищены © 2021
// Типовая конфигурация Библиотека стандартных подсистем (далее - БСП)
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
Функция БСП
Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено,
   СокращатьНепечатаемыеСимволы = Ложь) Экспорт

   Если Разделитель = ","
       И ПропускатьПустыеСтроки = Неопределено
       И СокращатьНепечатаемыеСимволы Тогда

       Результат = СтрРазделить(Значение, ",", Ложь);
       Для Индекс = 0 По Результат.ВГраница() Цикл
           Результат[Индекс] = СокрЛП(Результат[Индекс])
       КонецЦикла;
       Возврат Результат;

   КонецЕсли;

   Результат = Новый Массив;

   // Для обеспечения обратной совместимости.
   Если ПропускатьПустыеСтроки = Неопределено Тогда
       ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
       Если ПустаяСтрока(Значение) Тогда
           Если Разделитель = " " Тогда
               Результат.Добавить("");
           КонецЕсли;
           Возврат Результат;
       КонецЕсли;
   КонецЕсли;
   //

   Позиция = СтрНайти(Значение, Разделитель);
   Пока Позиция > 0 Цикл
       Подстрока = Лев(Значение, Позиция - 1);
       Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
           Если СокращатьНепечатаемыеСимволы Тогда
               Результат.Добавить(СокрЛП(Подстрока));
           Иначе
               Результат.Добавить(Подстрока);
           КонецЕсли;
       КонецЕсли;
       Значение = Сред(Значение, Позиция + СтрДлина(Разделитель));
       Позиция = СтрНайти(Значение, Разделитель);
   КонецЦикла;

   Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда
       Если СокращатьНепечатаемыеСимволы Тогда
           Результат.Добавить(СокрЛП(Значение));
       Иначе
           Результат.Добавить(Значение);
       КонецЕсли;
   КонецЕсли;

   Возврат Результат;

КонецФункции
// Автор библиотеки: ООО "1С-Софт". Все права защищены © 2021
// Типовая конфигурация Библиотека стандартных подсистем (далее - БСП)
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
Пример дежурной функции
Функция СтрРазделитьРасширенная(Строка, Разделитель = ",", ВключатьПустые = Истина,
   СокращатьНепечатаемыеСимволы = Ложь, РазделительЕдинойСтрокой = Истина) Экспорт

   // Часто при помощи СтрРазделить() можно сделать тоже самое, что и РазложитьСтрокуВМассивПодстрок().
   // Тогда нужно применять платформенный метод. Но:
   // Если нужно использовать разделитель, состоящий из строки, а не одного символа, берёмся за РазложитьСтрокуВМассивПодстрок()
   // Если нужно, чтобы элементы результата были обработаны СокрЛП(), делаем это сами постобработкой (будет быстрее)

   Если РазделительЕдинойСтрокой И СтрДлина(Разделитель) > 1 Тогда
       Результат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(
       Строка, Разделитель, НЕ ВключатьПустые, СокращатьНепечатаемыеСимволы);
   Иначе
       Результат = СтрРазделить(Строка, Разделитель, ВключатьПустые);
       Если СокращатьНепечатаемыеСимволы Тогда
           Для Индекс = 0 По Результат.Количество()-1 Цикл
               Результат[Индекс] = СокрЛП(Результат[Индекс]);
           КонецЦикла;
       КонецЕсли;
   КонецЕсли;

   Возврат Результат;

КонецФункции
Поиск кода
0
Комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 25.05.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому