#1.8 Макроподстановка в Loginom. Загрузка списка файлов

Проходите актуальную обновляемую версию этого курса на учебном портале

В финальном занятии курса «Знакомство с Loginom» вы разберем еще одну интересную функциональность, и сразу применим ее на очень прикладной задаче — загрузки данных из множества однотипных файлов.

Как вы уже догадываетесь, в этом процессе нам будет нужно использовать цикл. Получаем список имен файлов, грузим каждый по очереди. Только вот как этот список имен получить? На текущий момент, в Loginom не представлено функций, которые могут работать с файловой системой компьютера. Как быть? Использовать утилиты операционной системы, которые это умеют делать!

В Loginom есть узел «Выполнение программы». Он позволяет запускать программы на компьютере с использованием синтаксиса командной строки.

Исходим из того, что мы работаем в Windows (пока :)). Помните ли вы что делает команда dir? Или какие параметры можно прописывать в командной строке для настроек выполнения программы? Возможно, эти знания придется освежить. Но конкретно сейчас у нас есть готовый пример, и гуглить ничего не надо.

Создайте в новом сценарии пустую подмодель, с входным портом для переменных.

Задайте во входном порте следующий список переменных. Все переменные кроме vInclude_Subfolders — текстовые. vInclude_Subfolders — логическая.

За что они будут отвечать:

  • vFile_Path — адрес папки, в котором осуществляется поиск файлов;
  • vFile_Name — имя или маска имени файла, по которой идет поиск;
  • vStore_Path — путь, по которому сохранится список найденных файлов в виде текстового документа;
  • vInclude_Subfolders — учитывать ли при поиске вложенные папки или нет;
  • vFileList_Filename — имя файла, в который сохранится список найденных файлов.

Данные для тренировки можно скачать тут. Это уже знакомая нам таблица продаж, нарезанная по клиентам (спонсор нарезки — циклы в Loginom).

У меня получились такие переменные после настройки:

ВАЖНЫЙ АПДЕЙТ: при наличии пробелов в имени папки поиска Set of files поиск не срабатывал. При том, что во вложенных папках с пробелами в именах поиск успешно проводился. Скорректируйте путь хранения файла соответственно.

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

Зайдем в подмодель. Очевидно, что все эти параметры должны неким образом передаться в командную строку. И сейчас мы это проработаем. Кстати, вместо попсового dir, мы будем использовать команду where. Она делает примерно то же что и dir, но лучше — а именно, позволяет получить список файлов в папке и вложенных подпапках с полным описанием пути к ним и даты изменения.

Не будем ходить вокруг, да около. Нам нужно выполнить в командной строке следующую команду:

where /R D:\Loginom\Examples\Set of files\ *.txt /T >D:\Loginom\Examples\filelist.txt

Параметр /R говорит что поиск нужно вести в т.ч. в подпапках. Параметр /T говорит что нужно сохранять не только путь к файлу, но и размер с датой изменения. Если убрать пробелы из имен файлов проблематично, после /T надо добавлять параметр /f, чтобы возвращаемые данные помещались в кавычки.

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

Полное выражение для копирования:

if(vInclude_Subfolders=TRUE,"/R","")+" "+
vFile_Path+" "+vFile_Name +" /T >"+
vStore_Path+vFileList_Filename

Обратите внимание, что соединение текстовых строк делается через «+», а не «&», как в некоторых других системах.

Добавляем узел «Выполнение программы», и заводим в нее выходной порт калькулятора.

Настройки этого блока весьма минималистичны. Так как нам заставить выполниться наш поиск? Для этого напишем вызов командной строки с командой cmd.exe /C where (/C означает что программа должна быть закрыта после выполнения). А дальше пишем %vCommand%. Когда наберете первый знак %, то увидите список доступных для подстановки переменных. Такая подстановка называется макроподстановка. Она позволяет поставить содержимое переменной как строку внутрь некоей команды. Такая подстановка работает не везде. А работает она в частности в запуске программ и SQL-запросах.

Выполните сценарий. Проверьте папку, в которую вы сохраняли список файлов. Он должен там появиться. Не обращайте внимание на кодировку — ее можно поднастроить во время импорта файла.

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

Добавьте узел импорта текстового файла, и подключитесь к файлу списка. Подайте ему на вход переменные из выхода узла «Выполнение программы» Не забудьте снять галочку «Заголовок в первой строке», ведь его там нет. А также поправить кодировку. Настройте подстановку переменной vList_Path в имя файла.

Настройте распознавание данных. Можно воспользоваться кнопкой «Определить автоматически». Установите понятные названия полей.

Создайте в настройках подмодели выходной табличный порт, и выведите туда получившуюся таблацу.

Теперь в вашем распоряжении таблица с полными путями к файлам. А также датами и временем изменения, что можно использовать для фильтрации. Как их загрузить, вы уже знаете — нужно воспользоваться циклом в режиме for each. В предыдущем занятии это подробно описано.

Кстати, если загружаете файлы подобным образом, то рекомендую пересохранять их в lgd-формат (узел «Экспорт в lgd»). Это позволит в дальнейших сценариях не только работать с единым файлом, но и быстрее загружать данные.

На этом вводный курс «Знакомство с Loginom» закончен. Вы укомплектованы джентельменским набором, чтобы попробовать реализовать ваши аналитически сценарии. Советую вам начать со справки по визуализаторам (да, данные можно не только гонять между узлами, но еще и визуализировать). Хотя Loginom не предназначен для создания дашбордов, довольно много задач с анализом данных можно решить внутри него.

Не забывайте вступать в нашу группу по BI-импортозамещению, а также в чат разработчиков Loginom. Успехов вам в дальнейшем освоении платформы 🙂

3 комментария

  1. Спасибо. А как написать код для vCommand, если есть пробелы в названии пути (папке)

    1. Скорее всего надо пробел заменить на какие-то служебные символы. Погуглите про пробелы в командной строке. Кстати, со списком файлов рекомендую работать через библиотеку https://marketplace.loginom.ru/libraries/loginom-fileapi-kit, не надо будет заморачиваться с командной строкой.

Добавить комментарий для StudyDocx Отменить ответ

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

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.