В 1С “распарсить строку” означает разбить строку на отдельные части (токены) на основе определенных разделителей или правил. Это часто необходимо для извлечения нужной информации из строки, представленной в определенном формате. В 1С существует несколько способов распарсить строку, в зависимости от формата строки и сложности задачи.
Основные способы парсинга строк в 1С:
Функция СтрРазделить():
Это самый простой и распространенный способ разбиения строки на подстроки с использованием одного разделителя.
ИсходнаяСтрока = "Иванов;Иван;Иванович;1980";
Разделитель = ";";
МассивПодстрок = СтрРазделить(ИсходнаяСтрока, Разделитель, Ложь); // Ложь — не включать пустые строки
ФИО = МассивПодстрок[0] + " " + МассивПодстрок[1] + " " + МассивПодстрок[2];
ГодРождения = МассивПодстрок[3];
Сообщить("ФИО: " + ФИО);
Сообщить("Год рождения: " + ГодРождения);
- СтрРазделить(Строка, Разделитель, ВключатьПустые):
- Строка: Строка, которую нужно разделить. Разделитель: Символ или строка, используемая в качестве разделителя. ВключатьПустые: Булево значение. Если Истина, то в результат включаются пустые строки, если Ложь — не включаются.
Функция возвращает массив строк.
Функция Найти() и Лев()/Прав()/Сред():
Этот способ позволяет извлекать подстроки, используя позицию разделителя в строке. Подходит, когда нужно извлечь только часть строки или когда разделители имеют сложную структуру.
ИсходнаяСтрока = "Товар:Монитор, Цена:15000";
ПозицияРазделителяТовар = Найти(ИсходнаяСтрока, "Товар:");
ПозицияРазделителяЦена = Найти(ИсходнаяСтрока, ",Цена:");
НаименованиеТовара = Сред(ИсходнаяСтрока, ПозицияРазделителяТовар + СтрДлина("Товар:"), ПозицияРазделителяЦена — ПозицияРазделителяТовар — СтрДлина("Товар:"));
Цена = Сред(ИсходнаяСтрока, ПозицияРазделителяЦена + СтрДлина(",Цена:"));
Сообщить("Наименование товара: " + НаименованиеТовара);
Сообщить("Цена: " + Цена);
- Найти(Строка, Подстрока): Возвращает позицию первого вхождения подстроки в строке. Если подстрока не найдена, возвращает 0. Лев(Строка, ЧислоСимволов): Возвращает левую часть строки указанной длины. Прав(Строка, ЧислоСимволов): Возвращает правую часть строки указанной длины. Сред(Строка, НачПозиция, ЧислоСимволов): Возвращает часть строки, начиная с указанной позиции, указанной длины. СтрДлина(Строка): Возвращает длину строки.
Регулярные выражения (объект VBScript. RegExp):
Регулярные выражения предоставляют мощный инструмент для поиска и извлечения подстрок, соответствующих определенному шаблону. Этот способ подходит для сложных случаев, когда нужно распарсить строку с нефиксированным форматом или с использованием сложных правил.
// Внимание! Работает только под Windows.
Перем ОбъектRegExp;
Попытка
ОбъектRegExp = Новый COMОбъект("VBScript. RegExp");
Исключение
Сообщить("Не удалось создать объект VBScript. RegExp. Возможно, отключена поддержка COM-объектов.");
Возврат;
КонецПопытки;
ИсходнаяСтрока = "Дата: 01.01.2023, Сумма: 12345.67";
ОбъектRegExp. Pattern = "Дата: (\d{2}.\d{2}.\d{4}), Сумма: ([\d.]+)"; // Шаблон регулярного выражения
ОбъектRegExp. IgnoreCase = Истина; // Игнорировать регистр
ОбъектRegExp. Global = Ложь; // Найти только первое соответствие
Соответствия = ОбъектRegExp. Execute(ИсходнаяСтрока);
Если Соответствия. Количество() > 0 Тогда
Дата = Соответствия. Item(0).SubMatches. Item(0);
Сумма = Соответствия. Item(0).SubMatches. Item(1);
Сообщить("Дата: " + Дата);
Сообщить("Сумма: " + Сумма);
Иначе
Сообщить("Соответствия не найдены");
КонецЕсли;
- VBScript. RegExp: COM-объект для работы с регулярными выражениями. Важно! Работает только под Windows. Pattern: Шаблон регулярного выражения. IgnoreCase: Игнорировать регистр при поиске. Global: Искать все соответствия (Истина) или только первое (Ложь). Execute(Строка): Выполнить поиск соответствий в строке. SubMatches: Коллекция найденных подстрок, соответствующих группам в шаблоне.
Чтение данных из XML или JSON:
Если строка содержит данные в формате XML или JSON, можно использовать встроенные средства 1С для чтения данных из этих форматов.
- Чтение XML:
O ЧтениеXML = Новый ЧтениеXML;
O ЧтениеXML. УстановитьСтроку(СтрокаXML);
O
O Пока ЧтениеXML. Прочитать() Цикл
O // … обработка элементов XML…
O КонецЦикла;
- Чтение JSON:
O ЧтениеJSON = Новый ЧтениеJSON;
O ЧтениеJSON. УстановитьСтроку(СтрокаJSON);
O
O Значение = ПрочитатьJSON(ЧтениеJSON, Истина); // Истина — прочитать как структуру или массив
O
O // … обработка структуры или массива JSON…
Рекомендации:
- Начните с простого: Если задача простая, используйте СтрРазделить() или Найти()/Лев()/Прав()/Сред(). Для сложных случаев используйте регулярные выражения. Регулярные выражения предоставляют мощные возможности, но требуют знания синтаксиса. Используйте XML/JSON, если данные представлены в этих форматах. Проверяйте данные после парсинга: Убедитесь, что полученные данные имеют правильный формат и тип. Обрабатывайте ошибки: Предусматривайте обработку ошибок, которые могут возникнуть при парсинге строки. Внимательно относитесь к кодировке: Убедитесь, что кодировка строки соответствует кодировке, используемой в 1С.
Выбор подходящего способа парсинга зависит от конкретной задачи и формата строки, которую нужно распарсить. Начните с простого и переходите к более сложным способам, если это необходимо.