Строка с разделителями. Как преобразовать в массив значений?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Функция Разложить(Знач Стр, Разделитель = ",") Экспорт
Список = Новый Массив();
Длина = СтрДлина(Разделитель);
Стр = СокрЛП(Стр);
Поз = Найти(Стр, Разделитель);
Пока 0 < Поз Цикл
Список.Добавить(СокрП(Лев(Стр, Поз-1)));
Стр = СокрЛ(Сред(Стр, Поз+Длина));
Поз = Найти(Стр, Разделитель);
КонецЦикла;
Список.Добавить(Стр);
Возврат Список;
КонецФункции //Разложить()
Список = Новый Массив();
Длина = СтрДлина(Разделитель);
Стр = СокрЛП(Стр);
Поз = Найти(Стр, Разделитель);
Пока 0 < Поз Цикл
Список.Добавить(СокрП(Лев(Стр, Поз-1)));
Стр = СокрЛ(Сред(Стр, Поз+Длина));
Поз = Найти(Стр, Разделитель);
КонецЦикла;
Список.Добавить(Стр);
Возврат Список;
КонецФункции //Разложить()
(3)
В ВДГБ 8.3 и 1С Университет проф не нашел такого.
Зато есть - СтрРазделить (StrSplit)
Возвращаемое значение:
Тип: Массив.
Массив со строками, которые получились в результате разделения исходной строки.
Описание:
Разделяет строку на части по указанным символам-разделителям.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
РазложитьСтрокуВМассивПодстрок
В ВДГБ 8.3 и 1С Университет проф не нашел такого.
Зато есть - СтрРазделить (StrSplit)
Возвращаемое значение:
Тип: Массив.
Массив со строками, которые получились в результате разделения исходной строки.
Описание:
Разделяет строку на части по указанным символам-разделителям.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Функция ИзСтрокиВМассив(НачальнаяСтрока,Разделитель) экспорт
СтрокаПреобразованнаяВМногострочныйТекст = СтрЗаменить(НачальнаяСтрока,Разделитель,Символы.ПС);
ТекстовыйДокументИзСтроки = Новый ТекстовыйДокумент;
Результат = Новый Массив;
ТекстовыйДокументИзСтроки.УстановитьТекст(СтрокаПреобразованнаяВМногострочныйТекст);
Для СчетчикСтрок = 1 по ТекстовыйДокументИзСтроки.КоличествоСтрок() цикл
Результат.Добавить(СокрЛП(ТекстовыйДокументИзСтроки.ПолучитьСтроку(СчетчикСтрок));
КонецЦикла;
Возврат Результат;
КонецФункции
Показать
(5)
Да, в УТ10.3 в их стандартной ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(сВСписке, ",")) нет возможности игнорировать пустышки. Поэтому ВСПИСКЕ это может быть критичным, как у меня именно сейчас. Поэтому чуть изменил.
Функция ИзСтрокиВМассив(НачальнаяСтрока,Разделитель) экспорт
СтрокаПреобразованнаяВМногострочныйТекст = СтрЗаменить(НачальнаяСтрока,Разделитель,Символы.ПС);
ТекстовыйДокументИзСтроки = Новый ТекстовыйДокумент;
Результат = Новый Массив;
ТекстовыйДокументИзСтроки.УстановитьТекст(СтрокаПреобразованнаяВМногострочныйТекст);
Для СчетчикСтрок = 1 по ТекстовыйДокументИзСтроки.КоличествоСтрок() цикл
Результат.Добавить(СокрЛП(ТекстовыйДокументИзСтроки.ПолучитьСтроку(СчетчикСтрок));
КонецЦикла;
Возврат Результат;
КонецФункции
СтрокаПреобразованнаяВМногострочныйТекст = СтрЗаменить(НачальнаяСтрока,Разделитель,Символы.ПС);
ТекстовыйДокументИзСтроки = Новый ТекстовыйДокумент;
Результат = Новый Массив;
ТекстовыйДокументИзСтроки.УстановитьТекст(СтрокаПреобразованнаяВМногострочныйТекст);
Для СчетчикСтрок = 1 по ТекстовыйДокументИзСтроки.КоличествоСтрок() цикл
Результат.Добавить(СокрЛП(ТекстовыйДокументИзСтроки.ПолучитьСтроку(СчетчикСтрок));
КонецЦикла;
Возврат Результат;
КонецФункции
Да, в УТ10.3 в их стандартной ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(сВСписке, ",")) нет возможности игнорировать пустышки. Поэтому ВСПИСКЕ это может быть критичным, как у меня именно сейчас. Поэтому чуть изменил.
Функция ИзСтрокиВМассив(НачальнаяСтрока,Разделитель)
СтрокаПреобразованнаяВМногострочныйТекст = СтрЗаменить(НачальнаяСтрока,Разделитель,Символы.ПС);
ТекстовыйДокументИзСтроки = Новый ТекстовыйДокумент;
Результат = Новый Массив;
ТекстовыйДокументИзСтроки.УстановитьТекст(СтрокаПреобразованнаяВМногострочныйТекст);
Для СчетчикСтрок = 1 по ТекстовыйДокументИзСтроки.КоличествоСтрок() цикл
а = СокрЛП(ТекстовыйДокументИзСтроки.ПолучитьСтроку(СчетчикСтрок));
Если а<> "" Тогда // игнорим пустые
Результат.Добавить(а);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Показать
// Функция "расщепляет" строку на подстроки, используя заданный
// разделитель. Разделитель может иметь любую длину.
// Если в качестве разделителя задан пробел, рядом стоящие пробелы
// считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
// игнорируются.
// Например,
// РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов,
// три из которых - пустые строки, а
// РазложитьСтрокуВМассивПодстрок(" ку му", " ") возвратит массив значений из двух элементов
//
// Параметры:
// Стр - строка, которую необходимо разложить на подстроки.
// Параметр передается по значению.
// Разделитель - строка-разделитель, по умолчанию - запятая.
//
//
// Возвращаемое значение:
// массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
МассивСтрок = Новый Массив();
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции // глРазложить
// разделитель. Разделитель может иметь любую длину.
// Если в качестве разделителя задан пробел, рядом стоящие пробелы
// считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
// игнорируются.
// Например,
// РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов,
// три из которых - пустые строки, а
// РазложитьСтрокуВМассивПодстрок(" ку му", " ") возвратит массив значений из двух элементов
//
// Параметры:
// Стр - строка, которую необходимо разложить на подстроки.
// Параметр передается по значению.
// Разделитель - строка-разделитель, по умолчанию - запятая.
//
//
// Возвращаемое значение:
// массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
МассивСтрок = Новый Массив();
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции // глРазложить
Или вот так,рекурсивненько. Последнего разделителя нет. Массив предварительно инициализировать
Процедура СтрокаВМассив (Строка,МассивИзСтроки)
Позиция=Найти (Строка,Символы.Таб);
Если Позиция=0 Тогда
МассивИзСтроки.Добавить(Строка);
Возврат;
Иначе
МассивИзСтроки.Добавить(Сред(Строка,1,Позиция-1));
Строка=Сред(Строка,Позиция+1);
СтрокаВМассив(Строка,МассивИзСтроки);
КонецЕсли;
КонецПроцедуры
Показать
из 1с :
//Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину.
//
//Параметры:
// Строка - Строка - текст с разделителями;
// Разделитель - Строка - разделитель строк текста, минимум 1 символ;
// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.
// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:
// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки
// включаются в результат.
// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в
// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а
// при других разделителях результатом функции будет пустой массив.
//
// Возвращаемое значение:
// Массив - массив строк.
//
//Примеры:
// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые строки;
// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов;
// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов;
// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив;
// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой);
// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой);
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт
Результат = Новый Массив;
// для обеспечения обратной совместимости
Если ПропускатьПустыеСтроки = Неопределено Тогда
ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
Если ПустаяСтрока(Строка) Тогда
Если Разделитель = " " Тогда
Результат.Добавить("");
КонецЕсли;
Возврат Результат;
КонецЕсли;
КонецЕсли;
//
Позиция = Найти(Строка, Разделитель);
Пока Позиция > 0 Цикл
Подстрока = Лев(Строка, Позиция - 1);
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
Результат.Добавить(Подстрока);
КонецЕсли;
Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
Позиция = Найти(Строка, Разделитель);
КонецЦикла;
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
Результат.Добавить(Строка);
КонецЕсли;
Возврат Результат;
КонецФункции
//Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину.
//
//Параметры:
// Строка - Строка - текст с разделителями;
// Разделитель - Строка - разделитель строк текста, минимум 1 символ;
// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.
// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:
// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки
// включаются в результат.
// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в
// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а
// при других разделителях результатом функции будет пустой массив.
//
// Возвращаемое значение:
// Массив - массив строк.
//
//Примеры:
// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые строки;
// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов;
// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов;
// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив;
// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой);
// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой);
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт
Результат = Новый Массив;
// для обеспечения обратной совместимости
Если ПропускатьПустыеСтроки = Неопределено Тогда
ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
Если ПустаяСтрока(Строка) Тогда
Если Разделитель = " " Тогда
Результат.Добавить("");
КонецЕсли;
Возврат Результат;
КонецЕсли;
КонецЕсли;
//
Позиция = Найти(Строка, Разделитель);
Пока Позиция > 0 Цикл
Подстрока = Лев(Строка, Позиция - 1);
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
Результат.Добавить(Подстрока);
КонецЕсли;
Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
Позиция = Найти(Строка, Разделитель);
КонецЦикла;
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
Результат.Добавить(Строка);
КонецЕсли;
Возврат Результат;
КонецФункции
Проще все-же так и быстрее.
Функция СтрокаВМассивСтрок(Знач Стр, Разделитель)
Результат = Новый Массив;
Строки = СтрЗаменить(Стр, Разделитель, Символы.ПС);
Для Индекс = 1 По СтрЧислоСтрок(Строки) Цикл
Результат.Добавить(СтрПолучитьСтроку(Строки, Индекс));
КонецЦикла;
Возврат Результат;
КонецФункции
Показать
Если режим совместимости конфигурации не ниже 8.3.6, то можно:
Глобальный контекст (Global context)
СтрРазделить (StrSplit)
Синтаксис:
СтрРазделить(<Строка>, <Разделитель>, <ВключатьПустые>)
Параметры:
<Строка> (обязательный)
Тип: Строка.
Разделяемая строка.
<Разделитель> (обязательный)
Тип: Строка.
Строка символов, каждый из которых является индивидуальным разделителем.
<ВключатьПустые> (необязательный)
Тип: Булево.
Указывает необходимость включать в результат пустые строки, которые могут образоваться в результате разделения исходной строки.
Значение по умолчанию: Истина.
Возвращаемое значение:
Тип: Массив.
Массив со строками, которые получились в результате разделения исходной строки.
Описание:
Разделяет строку на части по указанным символам-разделителям.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
массив = СтрРазделить("Товар#ЦенаПокупки#ЦенаПродажи","#");
Глобальный контекст (Global context)
СтрРазделить (StrSplit)
Синтаксис:
СтрРазделить(<Строка>, <Разделитель>, <ВключатьПустые>)
Параметры:
<Строка> (обязательный)
Тип: Строка.
Разделяемая строка.
<Разделитель> (обязательный)
Тип: Строка.
Строка символов, каждый из которых является индивидуальным разделителем.
<ВключатьПустые> (необязательный)
Тип: Булево.
Указывает необходимость включать в результат пустые строки, которые могут образоваться в результате разделения исходной строки.
Значение по умолчанию: Истина.
Возвращаемое значение:
Тип: Массив.
Массив со строками, которые получились в результате разделения исходной строки.
Описание:
Разделяет строку на части по указанным символам-разделителям.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот