Обработка данных о рабочих местах студентов
Техническое задание
Текущая система сбора информации выглядит следующим образом: каждый студент создаёт два файла, в которых описывает свои личные данные, данные про свою тему магистерской, а также данные про рабочее место как в университете, так и дома. Это привело к тому, что появилось довольно ветвистое дерево папок, в конечных их которых находятся попарно 2 файла описания магистра.
Сбор информации предпалагает её обработку и, в конечном итоге, выдача отчётов. Так как обрабатывать нужно большое дерево, такой способ хранения не очень удобен из-за сложности алгоритмов данных. Вторым неприятным файтором при обработке является то, что информация в этих файлах содержится очень разноплановая даже в рамках одного параметра (например, параметр ОС может быть просто "Windows XP", а может быть "Windows XP Professional", или вообще "Windows XP Professional x32 Edition Service Pack ", хотя все эти варианты обозначают одно и то же).
Таким образом, обработка "на лету" сопряжена с большими затратами ресурсов. Значительно эффективнее хранить такие данные в БД в классифицированном виде (в виде кодов возможных значений и их описания в другом месте, базовые принципы реляционной БД). Но так как большое количество магистров уже внесло свои данные в текстовые файлы, необходимо проветси классификацию и обобщение информации для дальнейшей "заливки" в базу данных.
Итого, нужно заполнить базу данных про рабочие места студентов для дальнейшего формирования отчётов.
Исходные данные
Пары файлов следующего содержания:
Выходные данные
Отдельный файл на каждую пару: ivanenko.xml, содержащий скомбинированную и классифицированную информацию про студента.
Алгоритм расчёта
Большая часть критериев отбора и классификации вносится в конфигурационные файлы (config.xml, category.xml).
При этом процесс очень подробно логируется. Результаты в html формате складываются в папку Logs.
- Загрузка конфигурационных файлов.
- Создание списка директорий для обработки, исходя из настроек.
- В каждой следующей директории для обработки производится поиск подходящего файла с описанием тем магистерской работы студента.
- При успешном нахождении такого файла из него считываются ФИО, данные про факультет и специальность магистра, названия тем на разных языках. Все эти данные помещаются в выходной файл.
- При успешном считывании первого файла производится поиск второго файла (при этом не только по имени файла, но и по совпадению ФИО внутри него).
- После нахождения такого файла из него построчно начинают считываться данные про рабочие места магистра. При этом двоеточие является разделителем между именем параметра и его значением.
- Сначала ищется в списке известных параметров такой, что в список названий этого параметры входит указанный. Если неудачно, что создаётся запись в логе и данная строка пропускается. При этом отдельно обрабатываются начала блоков параметров (их признаки описаны в конфигурационных файлах).
- Затем производится поиск в возможных значениях данного параметра с применением регулярных выражений, описанных в конфигурационных файлах. Если соответствующий эквивалент не найден, то строчка пропускается с созданием соответствующей записи в логе.
- Полученная пара значений имя:значение заносятся в выходной файл.
- При удачном завершении создания выходного файла он сохраняется на диске.
- Программа завершается, когда обработаны все входные файлы.