DSL для автоматизации обработки .docx-файлов
$ и имеют типовой префикс:
$b_ — булево$n_ — число$s_ — строка$a_ — массив$t_ — таблица (список)$b_res (успех/ошибка).return завершает выполнение и возвращает переменные.# это комментарийreturn $var1, $var2, ...Завершает выполнение и возвращает переменные.
return $s_route_number, $s_route_rasp_forward
$s_route_number — номер маршрута ("104", "1A", "Туда - Сюда")$s_route_name — буквенное наименование: как правило, список конечных пунктов$s_contract_start — дата начала, поддерживаются различные числово-буквенные форматы даты$s_contract_finish — дата окончания контракта$s_route_rasp_forward — расписание от A до Б$s_route_rasp_backward — расписание в обратном направленииПеременные, отмеченные жирным - обязательны к возврату
Возможен возврат массивов - смотрите дополнительный раздел о возврате в конце этой справки
Под расписанием подразумевается любой спаршенный текст из документа
Устанавливает: $b_finish = True
set $var = значениеПрисваивает значение переменной. Поддерживает типы, выражения и конкатенацию.
set $n_count = 5 set $s_name = "Иван" set $s_greeting = "Привет, " + $s_name + "!"
find("текст", $n_start)Ищет параграф, содержащий текст. Возвращает индекс или -1.
$n_index = find("Раздел 1")
$n_next = find("Далее", $n_index)
find_r("текст", $n_start)Версия для тех, кто знаком с регулярными выражениями. Может захватывать и возвращать одну группу. В отличие от команды find, find_r возвращает текст.
Номер строки возвращается неявно в переменной $n_last_found.
$n_index = find("Раздел 1")
$s_route_name = find("Маршрут.*«([^«])»[^»]*$", $n_index)
find_between("start", "end", $n_start)Извлекает текст между подстроками в одном параграфе.
$s_name = find_between("Имя: ", ", возраст", $n_pos)
("start" и/или "end" могут быть пустыми, тогда это означает поиск с начала или до конца заданной строки)
find_all_tables($n_from, $n_to)Находит все таблицы между параграфами.
$t_tables = find_all_tables($n_start, $n_end)
next_table($n_start)Возвращает первую таблицу после указанного параграфа.
$t_table = next_table($n_header)
enter_table $t_tableАктивирует таблицу для навигации и чтения.
enter_table $t_data
seek_cell("текст")Ищет ячейку с текстом в активной таблице.
seek_cell("Сумма")
move_rightПеремещает курсор вправо на одну ячейку.
move_downПеремещает курсор вниз на одну ячейку.
move_to_column $n_colПеремещает курсор в указанный столбец текущей строки.
move_to_column 2
move_to_cell($n_row, $n_col)Перемещает курсор в конкретную ячейку.
move_to_cell(1, 0)
$s_var = read_cellСчитывает текст из текущей ячейки.
$s_value = read_cell
add_to_array $a_array, значениеДобавляет элемент или массив в существующий массив.
add_to_array $a_list, "новый" add_to_array $a_list, $a_other
$s_result = join $a_array with "разделитель"Объединяет элементы массива в строку.
$s_names = join $a_names with ", "
print "текст"Выводит текст в консоль (для отладки).
print "Обработка завершена"
if $b_found then print "Найдено!" set $n_status = 1 end
set $n_i = 0 while $n_i < 3 do print "Итерация: " + $n_i set $n_i = $n_i + 1 endво избежание зацикливания введено ограничение по числу итераций. Бесконечный цикл завершается ошибкой.
foreach_table $t_tbl in $t_all do
enter_table $t_tbl
seek_cell("Итого")
move_down
set $s_total = read_cell
end
$b_res — результат последней команды$b_finish — True, если выполнение завершено через return$n_last_found — индекс последнего найденного параграфаunpack — если документы контракта поставляются в ZIPconvert — если требуется конвертация DOC в DOCXread — имя файла, к которому нужно применить скрипт (можно перечислить несколько документов через запятую)read_r — версия read c регулярным выражением. Обрабатываются все файлы из архива, которые соответствуют регулярному выражениюЕсли ваш скрипт завершился НЕ командой возрата - это трактуется как ошибка.
Бывает, что в документе содержатся сведения о нескольких маршрутах. Тогда предусмотрены альтернативные формы переменных возврата:
$a_route_number, $a_route_rasp_forward$s_route_number_0, $s_route_number_1, $s_route_number_2Команд возврата в скрипте может быть несколько.
После команды возрата последующие команды не выполняются.
# Извлекаем данные из строки вида
# Маршрут № 56 «ул. Пригородная (кольцевой)»
$n_route_marker = find("Маршрут № ")
$s_route_name = find_between("«", "»", $n_route_marker)
$s_route_number = find_between("Маршрут № ", " «", $n_route_marker)
$s_contract_start = find_between("Начало выполнения работ – ", "")
$s_contract_finish = find_between("Окончание выполнения работ – ", " года.")
$n_sched_marker_start = find("7. Сводное расписание отправления транспортных средств из остановочных пунктов ")
$n_sched_marker_finish = find("8. Количество рейсов и пробег транспортных средств.")
$t_tables = find_all_tables($n_sched_marker_start, $n_sched_marker_finish)
add_to_array $a_forward, "Рабочие дни"
foreach_table $t_current in $t_tables do
enter_table $t_current
move_to_cell(3,1)
$s_val = read_cell
add_to_array $a_forward, $s_val
end
add_to_array $a_forward, "\nВыходные дни"
foreach_table $t_current in $t_tables do
enter_table $t_current
move_to_cell(3,2)
$s_val = read_cell
add_to_array $a_forward, $s_val
end
$s_route_rasp_forward = join $a_forward
return $s_route_name, $s_route_number, $s_contract_start, $s_contract_finish, $s_route_rasp_forward
Если вы хотите добавить новую полезную команду или считаете, что некоторые команды ведут себя нелогично - обращайтесь к автору.