Предисловие:
При описании будут использоваться следующие скобки:
- круглые - означают, что элемент, описанный в круглых скобках может встречаться 0 или 1 раз, т.е. это не обязательный элемент.
- квадратные - означают, что элемент, описанный в квадратных скобках может встречаться любое количество раз, включая 0, т.е. квадратные скобки описывают возможное повторение элементов.
- угловые - в угловых скобках будет заключено название элемента (и возможно, тип), структура которого будет описана отдельно, если она не очевидна.
- фигурные - означают начало и закрытие списка.
Список с вложенными списками:
Многие файлы 1С, как внутренние (например, некоторые файлы, содержащиеся в файлах *.epf, *.erf, *.cf и т.д. и извлекаемые из них инструментом v8unpack), так и внешние (например, файлы консоли запросов *.sel, файлы консоли отчетов *.rcf, *.dcf, файлы параметров *.pfl, файлы замеров производительности *.pff, файлы серверов *.lst, файлы табличного документа *.mxl, файлы журнала регистрации (*.elf, *.log, *.lgf, *.lgp)) и т.д., имеют структуру «списка с вложенными списками». Эти файлы представляют собой текстовые файлы определенной структуры.
Определим несколько типов, которые могут содержаться в таких файлах.
- Число. Представляет из себя последовательность цифр, с необязательной десятичной точкой: <Цифра>[<Цифра>] (.<Цифра>[<Цифра>]), где <Цифра> - это символ 0…9.
- Строка. Представляет из себя произвольную последовательность символов, ограниченную спереди и сзади двойными кавычками ("). Для обозначения символа двойной кавычки внутри строки используется последовательность двух двойных кавычек ("").
- GUID (уникальный идентификатор). Представляет из себя последовательность символов следующего формата: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, где x – шестнадцатеричная цифра (0…9, a…f, A…F).
- Binary (двоичные данные). Представляет из себя строку, начинающуюся с символов "#base64:" или "#data:" или без символов, за которыми следует набор символов, представляющий из себя зашифрованный алгоритмом base64 двоичные данные.
- Ссылка. Представляет из себя последовательность символов следующего формата: <Цифра>[<Цифра>]:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, где <Цифра> - это символ 0…9 и x – шестнадцатеричная цифра (0…9, a…f, A…F).
- Число с показателем степени. Представляет из себя последовательность цифр, с необязательной десятичной точкой с показателем степени: <Цифра>[<Цифра>] (.<Цифра>[<Цифра>])e<Цифра>[<Цифра>], где <Цифра> - это символ 0…9 и е - показатель степени.
- Список. Список представляет собой последовательность значений, разделенных запятыми и ограниченный спереди и сзади фигурными скобками: {<Значение>[,<Значение>]}, где <Значение> - это значение любого из типов "Число", "Строка", "GUID", "Binary", "Список" и т.д.
В случае, если <Значение> является значением типа "Список", то оно отделяется спереди и сзади символами перевода строки (0x0D, 0x0A).
Собственно весь файл является одним значением типа "Список", только он не выделен символами перевода строки, как вложенные списки.
Обработка читает файл в массив или в дерево:
- чтение выполняется с использованием современного метода "ЧтениеДанных".
- анализирует текст и преобразует в массив вложенных массивов и выводит в дерево на форме или преобразует в дерево на форме.
- обрабатываются фигурные скобки открытия/закрытия, запятые и значения с кавычками и без кавычек, а так же двойные кавычки внутри текста, пустые значения вида {,,} и списки вида {},{}.
- определяет тип значения "Строка", "Число", "GUID" и т.д. с использованием регулярок на платформе 8.3.23.
Может быть интересна с точки зрения изучения метаданных файлов.
06.07.2023 - Версия 1.0.1.0:
- Заменены реквизиты обработки на формальные параметры.
06.07.2023 - Версия 1.0.0.0:
- Реализовано чтение файла с диска методом "ЧтениеДанных".
- Добавлены варианты парсинга: "массив", "дерево".
- Добавлена проверка строки на соответствие заданному регулярному выражению методом СтрПодобнаПоРегулярномуВыражению.
- Добавлена возможность сворачивать / разворачивать узлы определенного уровня у дерева. Всего уровней 5.
- Добавлена возможность определять текущий индекс при активизации строки дерева.