1с разбить строку по разделителю

Обновлено: 03.07.2024

Функции для работы со строками в 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
Существует еще один способ разложения строки вида "раз, два, три", т.е. где разделителем является запятая, на подстроки. Строка передается в первый параметр конструктора структуры по ключам и значениям. На выходе получаем структуру, ключами которой являются подстроки.

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

Читайте также: