tmplter
TMPLTER
Генерация текстовых документов из файлов CSV на основе шаблонов (шаблонизатор).
https://gitverse.ru/panarinv/tmplter
ВОЗМОЖНОСТИ
Программа формирует тексты на основе переданных файлов данных и шаблона, содержащего правила размещения данных в тексте. Шаблон определяет общий вид текста и содержит метки вывода массивов данных. Польза программы - отделение данных от их представления.
Особенности работы:
- шаблон может работать с несколькими массивами данных;
- поддерживается вложенность массивов данных (строки данных объединяются по одинаковым значениям одноимённых полей);
- программа получает шаблон из стандартного потока ввода, каталог с файлами данных указывается в параметрах.
Программа НЕ предназначена:
- для фильтрации данных или объединения массивов данных по сложной логике (в шаблон попадают все данные из файлов);
- для выполнения каких-либо расчётов или форматирования выводимых данных (программа просто записывает значения из файлов данных по указанным меткам).
ТРЕБОВАНИЯ
Установка не требуется, достаточно скопировать исполняемый файл для нужной ОС. От пользователей требуется знания и навыки работы с файлами формата CSV и правил обработки шаблонов (см. далее).
ИСПОЛЬЗОВАНИЕ
Программа использует текстовый (консольный) интерфейс. Для запуска введите команду:
tmplter [параметры] csv-файл(ы)... <шаблон >результат
Параметры:
-d <символ> - разделитель полей в файлах данных (по умолчанию TAB).
Результаты выводятся в стандартный поток вывода данных.
ПРИМЕР
Файлы данных:
book.txt:
book
Книга 1
dics.txt:
DicName DicCaption
Dic1 Словарь 1
Dic2 Словарь 2
Dic3 Словарь 3
dicitems.txt:
DicName ItemName ItemCaption
Dic1 Item1 Элемент 1
Dic1 Item2 Элемент 2
Dic1 Item3 Элемент 3
Dic2 Item4 Элемент 4
Dic3 Item5 Элемент 5
Dic3 Item6 Элемент 6
Шаблон вывода данных:
Заголовок {{book.txt/}}{{book}}{{/book.txt}}{{dics.txt/}}
Словарь: "{{DicCaption}}"{{dicitems.txt/}}
Элемент: "{{ItemCaption}}";{{/dicitems.txt}}{{/dics.txt}}
Все элементы:{{dicitems.txt/}}
{{ItemCaption}}{{/dicitems.txt}}
Подвал
Получаемый текст:
Заголовок Книга 1
Словарь: "Словарь 1"
Элемент: "Элемент 1";
Элемент: "Элемент 2";
Элемент: "Элемент 3";
Словарь: "Словарь 2"
Элемент: "Элемент 4";
Словарь: "Словарь 3"
Элемент: "Элемент 5";
Элемент: "Элемент 6";
Все элементы:
Элемент 1
Элемент 2
Элемент 3
Элемент 4
Элемент 5
Элемент 6
Подвал
Пояснения к примеру
Текст в начале шаблона выводится без изменений - "
"
(включая завершающий пробел).
Далее, обнаружив метку "
",
программа находит массив (файл) данных "
"
с одни полем "
" и одной строкой данных "
".
В результате метка просто заменяется на значение "
".
Если бы в файле "
" было бы несколько записей,
то все значения записались бы в текст шаблона друг за другом без разделителей.
Далее программа обнаруживает открывающую метку массива "
".
Это шаблон для вывода записей из "
".
Текст внутри метки "
"
(содержимое метки) выглядит так:
<перевод-строки>
Словарь: "{{DicCaption}}"{{dicitems.txt/}}
Элемент: "{{ItemCaption}}";{{/dicitems.txt}}
Файл "
" содержит три записи и вышеуказанный фрагмент шаблона
будет записан в результирующий текст три раза (для каждой записи).
Перед выводом текст внутри метки анализируется так же как и исходный шаблон:
- Фрагмент "
" выводится без изменений для каждой строки в файле "<перевод-строки>Словарь:·"
". Из-за наличия в начале содержимого перевода строки каждый фрагмент для записи из массива "dics.txt
" будет выводится с новой строки.dics.txt - Метка "
" заменяется на значение из поля "DicCaption" (для каждой строки своё).{{DicCaption}} - Двойная кавычка выводится "как есть".
- Далее идёт открывающая метка массива "
" и описываемые процессы повторяются для массива данных "{{dicitems.txt/}}
" за одним важным исключением...dicitems.txt
Поскольку перебор элементов массива "
"
выполняется внутри другого перебора - массива "
",
программа предполагает, что элементы массивов связаны.
Связь элементов устанавливается по одинаковым значениям одноимённых полей.
В данном случае таким полем является "
".
Т.е. при выводе во внешнем массиве строки "
"
во вложенном массиве программа оставит только строки,
где одноименное поле "
" имеет значение "
".
И, соответственно, после строки "
"
выведет три записи "
",
последовательно заменив "
"
значениями "
", "
" и "
".
Текст, оставшийся после последней метки в шаблоне,
выводится в итоговый документ без изменений - "
".
ОПИСАНИЕ
Правила работы с массивами данных
Массив данных - файл формата CSV содержащий строки данных для подстановки в шаблон. Первая строка массива данных должна содержать заголовки полей по которым программа находит нужное поле (значение) для подстановки в шаблон.
Если по условиям шаблона один массив данных вложен в другой,
то программа объединяет массивы данных по одинаковым значениям одноимённых полей
(массивы "
" и "
" в примере выше).
Т.е. на каждой итерации внешнего массива во вложенном массиве выводятся только
строки в которых совпадают значения одноимённых полей.
Правила обработки шаблонов
Шаблон - текст (файл) содержащий метки вывода массивов данных и значений.
Программа ищет в шаблоне метки вида "
".
Программе должен быть передан массив данных "
"
строки из которого и будут подставляться в текст шаблона вместо найденной метки.
Текст
копируется для каждой строки из массива данных "
".
В тексте "
" программа вновь ищет метки вывода других массивов данных
или метки вывода значений - "
".
При обнаружении метки вывода значений ("
") она будет заменена
на значения из указанного поля текущий строки массива.
Если в
обнаруживается метка вывода другого массива данных,
то этот массив выводится как вложенный.
Если во вложенном и внешнем массивах есть поля с одинаковыми именами,
то программа берёт из вложенного массива только те строки,
значения по одноимённым полям в которых совпадают со внешним массивом
(или все строки - если одноимённых полей не нашлось).
Сжатие файлов CSV
Получаемые файлы данных могут быть сжаты по технологии GZIP.
Расход оперативной памяти
В процессе работы все данные из всех переданных файлов CSV содержатся в оперативной памяти, что может замедлить обработку больших файлов на компьютерах с недостаточным количеством свободной оперативной памяти.
ЛИЦЕНЗИЯ
Это свободное программное обеспечение. Вы можете повторно распространять или изменять его в соответствии с условиями лицензии BSD. Полный текст лицензии в файле LICENSE.
Описание
Генерация текстовых документов из файлов CSV на основе шаблонов (шаблонизатор).
Языки
Go
- Smarty
- Shell