18. 10. 2016

Сортровка файлов


Как разложить файлы по разным каталогам в зависимости от того "что в них написано"

Иногда возникает необходимость сортировки текстовых файлов в зависимости от их содержимого. Например разбор квитанций о принятии/непринятии или разбор форм по разным отделам
Будем разбирать квитанции следующего вида
Тип ИЭС: ИЭС1
Код ТУ: 45
Номер ОЭС: 101108723/1
Дата регистрации: 20150810110018
Код формы по ОКУД: UP101B
Тип отчета: K - сводный
Код ОКАТО: 45
Рег. номер КО: 9999
Отчетная дата: 20150805
Дата формирования: 20150807162856
Результат: Подлинность и целостность ОЭС подтверждена. ОЭС принят в обработку.

За разбор файлов отвечает модуль fileparser
Для того чтобы решить вышеописаные задачи, нам потребуется:
1. Прописать правила сортировки в fileparser.ini
2. Добавить вызов сортировки в сценарий обработки

Добавим секцию с правилом сортировки fileparser.ini
[ies_or_err]
Comment=разбор квитанций принят/не принят
Condition=Результат: Подлинность и целостность ОЭС подтверждена. ОЭС принят в обработку.
TrueDestination=Z:\KVT\OK
FalseDestination=Z:\KVT\ERR

Теперь в сценарии обработки необходимо добавить вызов соответствующей сортировки

[Section10]
Comment=Сортировка квитанций OK/ERR
Source=Z:\IN_KVT
Mask=*.*
NoResult=1
run0_fileparser=ies_or_err

Если надо рассортировать квитанции по отделам:
Квитанци на форму 101 поместить в каталог для отдела 1
Квитанци на форму 115 поместить в каталог для отдела 2

необходимо прописать в fileparser.ini секцию мультисортировки в которой будут проверяться условия по 2 условиям и если ни по одному из условий файл не пройдет - поместить в общий каталог квитанций
[sort_by_dep]
Comment=разбор квитанций по формам
multisort=1
kvt101=
kvt115=
FalseDestination=Z:\KVT\all

В секции стоит признак сортировки по нескольким секциям multisort=1,
указаны секции по которым будут производиться проверки (kvt101,kvt115) и указан каталог, куда помещать файлы не подошедшие под условия проверки (FalseDestination)

Кроме того пропишем в fileparser.ini секции проверки кода формы
[kvt101]
Condition=":.0409101\r\n"
TrueDestination=Z:\KVT\Отдел_1

[kvt115]
Condition=":.0409115\r\n"
TrueDestination=Z:\KVT\Отдел_2

Теперь в сценарии обработки необходимо добавить вызов сортировки

[Section10]
Comment=Сортировка квитанций по отделам
Source=Z:\IN_KVT
Mask=*.*
NoResult=1
run0_fileparser=sort_by_dep