Репозиторий с решением тестового задания. В решении два проекта. Основной функционал в библиотеке AlinaLib.dll (Проект AlinaLib). UI написан на WPF в проекте AlinaWpfUI. В папке _InputData исходные входные данные (файлы .csv и .xml).
Цель: Разработать программу, которая обрабатывает данные из двух различных файлов форматов .xml и .csv, и генерирует итоговый файл в формате .json.
- Программа получает на вход файлы. Из двух файлов она сопоставляет единный набор данных для дальнейшей работы с ним. Файлы в формате .xml, второй в формате .csv.
- Файлы могут поступать не одновременно. Программа должна уметь обрабатывать поступающие файлы по мере их появления и работать только с тем набором данных, который удалось сформировать из двух сопоставленных csv и xml.
- Могут сначала приходить только CSV файлы, например 5 штук, затем XML файлы, которые не обязаны быть свзяаны с предыдущеми CSV. Если среди этих CSV и XML программа обноруживает связанные файлы, она готова работать с этим набором данных, остальные файлы, которые еще не получили связанный файл, продолжают ожидать.
- После получения каждого файла программа сопоставляет его с существующими файлами, чтобы найти свою пару.
- Если найдены 2 файла, которые можно сопоставить, программа перед генерацией итогового файла, выводит уведомление(в любом виде, можно просто Label на форме) о количестве записей, которые будут сформированы.
- Если удалось найти 2 связанных файла, программа по нажатию на кнопку на форме формирует итоговый файл/отчет.
- Для начала процесса генерации ответного файла, должна быть предусмотрена кнопка "Сформировать отчет".
- Результатом работы программы является файл в формате .json, содержащий совмещенные данные из обоих входных файлов.
- Возможность задавать директории для входных файлов и для сохранения итогового файла. Это можно реализовать через графический интерфейс или настройками в файле (например, Settings.xml или Settings.json). Пример входных данных:
<?xml version="1.0" encoding="UTF-8" ?>
<Cards>
<Card UserId="1">
<Pan>1234123412341231</Pan>
<ExpDate>10/11/2017</ExpDate>
</Card>
<Card UserId="2">
<Pan>1234123412341232</Pan>
<ExpDate>20/11/2017</ExpDate>
</Card>
<Card UserId="3">
<Pan>1234123412341233</Pan>
<ExpDate>30/11/2017</ExpDate>
</Card>
<Card UserId="4">
<Pan>1234123412341234</Pan>
<ExpDate>24/11/2017</ExpDate>
</Card>
</Cards>UserId;Name;SecondName;Number
1;Андрей;Андреев;1_9056938119
2;Андрей;Андреев;2_9056938119
3;Андрей;Андреев;3_9056938119
4;Андрей;Андреев;4_9056938119{
"Records": [
{
"UserId": "1",
"Pan": "1234123412341231",
"ExpDate": "10/11/2017",
"FirstName": "Андрей",
"LastName": "Андреев",
"Phone": "1_9056938119"
},
{
"UserId": "2",
"Pan": "1234123412341232",
"ExpDate": "20/11/2017",
"FirstName": "Андрей",
"LastName": "Андреев",
"Phone": "2_9056938119"
},
{
"UserId": "3",
"Pan": "1234123412341233",
"ExpDate": "30/11/2017",
"FirstName": "Андрей",
"LastName": "Андреев",
"Phone": "3_9056938119"
},
{
"UserId": "4",
"Pan": "1234123412341234",
"ExpDate": "24/11/2017",
"FirstName": "Андрей",
"LastName": "Андреев",
"Phone": "4_9056938119"
}
]
}