Главная страница » Как распарсить строку 1с

Как распарсить строку 1с

В 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С.

Выбор подходящего способа парсинга зависит от конкретной задачи и формата строки, которую нужно распарсить. Начните с простого и переходите к более сложным способам, если это необходимо.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх