Разделяем строку на подстроки заданным разделителем в 1С
Разделитель может иметь любую длину.
Если в качестве разделителя задан пробел, рядом стоящие пробелы считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр, игнорируются.
Функция РазложениеСтроки(«,як,,,ум», «,») возвратит список значений из пяти элементов, три из которых — пустые строки, а
Функция РазложениеСтроки(» як ум», » «) возвратит список значений из двух элементов.
Для 1С 7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Функция РазложениеСтроки(Знач Стр, НашРазделитель = ",") Экспорт СписЗнач = СоздатьОбъект("СписокЗначений"); Если НашРазделитель = " " Тогда Стр = СокрЛП(Стр); Пока 1=1 Цикл Поз = Найти(Стр,НашРазделитель); Если Поз=0 Тогда СписЗнач.ДобавитьЗначение(Стр); Возврат СписЗнач; КонецЕсли; СписЗнач.ДобавитьЗначение(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаНашегоРазделителя = СтрДлина(НашРазделитель); Пока 1=1 Цикл Поз = Найти(Стр,НашРазделитель); Если Поз=0 Тогда СписЗнач.ДобавитьЗначение(Стр); Возврат СписЗнач; КонецЕсли; СписЗнач.ДобавитьЗначение(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаНашегоРазделителя); КонецЦикла; КонецЕсли; КонецФункции |
Для 1С 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Функция РазложениеСтроки(Знач Стр, НашРазделитель = ",") Экспорт СписЗнач = Новый СписокЗначений; Если НашРазделитель = " " Тогда Стр = СокрЛП(Стр); Пока 1=1 Цикл Поз = Найти(Стр,НашРазделитель); Если Поз=0 Тогда СписЗнач.Добавить(Стр); Возврат СписЗнач; КонецЕсли; СписЗнач.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаНашегоРазделителя = СтрДлина(НашРазделитель); Пока 1=1 Цикл Поз = Найти(Стр,НашРазделитель); Если Поз=0 Тогда СписЗнач.Добавить(Стр); Возврат СписЗнач; КонецЕсли; СписЗнач.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаНашегоРазделителя); КонецЦикла; КонецЕсли; КонецФункции |