1с разбить строку по разделителю
Функции для работы со строками в 1С 8.2 и 8.3
Строка
Функция Строка(x) возвращает текстовое представление переданного ей значения “x”.
СтрДлина
Функция СтрДлина(x) вычисляет количество символов в строке “x”, учитывая пробелы и ничего не значащие символы.
СокрЛП, СокрЛ, СокрП
Функции СокрЛП(x), СокрЛ(x) и СокрП(x) убирают пробелы и ничего не значащие символы у переданной строки “x” с обеих сторон, слева и справа соответственно.
Лев, Прав, Сред
Функции Лев(x, y) и Прав(x, y) возвращают количество символов “y” с левого или правого края переданной им строки “x”. А функция Сред(x, y, z) возвращает количество символов “z” из указанного места “y” переданной строки “x”.
ВРег, НРег, ТРег
Сообщить(ТРег("Каждое слово с заглавной буквы")); //Каждое Слово С Заглавное БуквыНайти
Функция Найти(x, y) возвращает номер первого символа первого вхождения подстроки “y” в строку “x”, если, конечно, такое вхождение найдено (при этом нумерация начинается с 1). Если же вхождений не найдено, то функция возвращает 0.
СтрЧислоВхождений
Функция СтрЧислоВхождений(x, y) возвращает количество вхождений подстроки “y” в строку “x”.
СтрЗаменить
Функция СтрЗаменить(x, y, z) позволяет в указанной строке “x” заменить все вхождения одной подстроки “y” на другую “z”, результатом выполнения функции будет строка с проведенными заменами.
Сообщить(СтрЗаменить("тест1,тест2,тест3,тест4", ",", " ")); //тест1 тест2 тест3 тест4ПустаяСтрока
СтрЧислоСтрок
Функция СтрЧислоСтрок(x) возвращает количество строк в многострочном тексте “x”.
МногострочныйТекст = СтрЗаменить("тест1,тест2,тест3,тест4", ",", Символы.ПС); //тест1 тест2 тест3 тест4СтрПолучитьСтроку
Функция СтрПолучитьСтроку(x, y) возвращает строку с номером “y” из многострочного текста “x”.
МногострочныйТекст = СтрЗаменить("тест1,тест2,тест3,тест4", ",", Символы.ПС); //тест1 тест2 тест3 тест4 Сообщить(СтрПолучитьСтроку(МногострочныйТекст, 2)); //тест2Символ, КодСимвола
Символы
Это не функция, а набор наиболее часто используемых специальных символов, состоит из:
ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр
Функция ЗначениеВСтрокуВнутр(x) возвращает системное строковое представление значения “x”. Функция ЗначениеИзСтрокиВнутр(x) проделывает обратную операцию и возвращает значение, полученное из строкового системного представления “x”. Обе эти функции используются для сохранения функциональной совместимости с версией 7.7. Использование для каких-либо других целей не рекомендуется. В новых версиях платформы данные функции не работают (хотя их описание присутствует в справке).
ВвестиСтроку
Стандартная функция разложения строки на подстроки по разделителю в платформе 1С версии 8.2 отсутствует. Если посмотреть на реализацию такой функции в БСП(Библиотека стандартных подсистем), то алгоритм весьма впечатляющий для такой операции: высчитывается позиция символа, применяется куча функций для работы со строками и т.д и т.п.
Недавно открыл для себя элементарный, просто до ужаса простой способ разложения/разделения строки на подстроки по разделителю. В качестве разделителя может выступать произвольный набор символов, но чаще всего это "," либо "|".
Способ заключается в том, что разделитель заменяем на символ перевода строки, тем самым из строки создаем многострочную строку (см. рисунок 1).
Рисунок 1. Преобразование строки в многострочную строку |
Описание способа на языке платформы 1С:
Функция РазложитьСтроку(Знач ИсходнаяСтрока, Разделитель = ",")
// Создаем массив.
Подстроки = Новый Массив;
// Преобразовываем строку в многострочную строку.
МногострочнаяСтрока = СтрЗаменить(ИсходнаяСтрока, Разделитель, Символы.ПС);
// обходим построчно многострочную строку.
Для Индекс = 1 По СтрЧислоСтрок(МногострочнаяСтрока) Цикл
Подстроки.Добавить(СтрПолучитьСтроку(МногострочнаяСтрока, Индекс));
КонецЦикла;
// Возвращаем массив подстрок.
Возврат Подстроки;
КонецФункции
Если говорить о платформе 1С версии 8.3, то разработчики позаботились о наличии стандартной функции по разложению/разделению строки на подстроки по разделителю. Это функция глобального контекста по работе со строками СтрРазделить().
Синтаксис:
СтрРазделить(<Строка>, <Разделитель>, <ВключатьПустые>)
- Строка (обязательный) - Тип: Строка. Разделяемая строка.
- Разделитель (обязательный) - Тип: Строка. Строка символов, каждый из которых является индивидуальным разделителем.
- ВключатьПустые (необязательный) - Тип: Булево. Указывает необходимость включать в результат пустые строки, которые могут образоваться в результате разделения исходной строки. Значение по умолчанию: Истина.
UPD 22/08/2016
Существует еще один способ разложения строки вида "раз, два, три", т.е. где разделителем является запятая, на подстроки. Строка передается в первый параметр конструктора структуры по ключам и значениям. На выходе получаем структуру, ключами которой являются подстроки.
Пример:
Структура = Новый Структура("раз,два,три");
Для Каждого ЭлементСтруктуры Из Структура Цикл
Сообщить(ЭлементСтруктуры.Ключ);
КонецЦикла;
Читайте также: