Требования:
Факт 1: у нас есть несколько файлов данных, созданных устаревшей системой
Факт 2: У нас есть несколько файлов данных, созданных новой системой, которые в конечном итоге должны заменить устаревшую
Факт 3:
- Оба файла являются текстовыми / ASCII файлами,
с записями, состоящими из
несколько строк.
- Каждая строка в записи состоит
имени поля и значения поля.
- Формат, в котором строки
представлены разные между 1
и 2, но имя поля и значение поля
можно извлечь из каждой строки
с помощью регулярных выражений
- Имена полей могут изменяться от 1 до
2, но у нас есть отображение, которое
связывает их
- Каждая запись имеет уникальный идентификатор
это помогает нам связать наследие
запись с новой записью в качестве заказа
записей в выходной файл нужно
не должно быть одинаковым в обеих системах.
- Каждый файл для сравнения является минимумом
10 МБ в среднем случае 30 - 35
MB
Факт 4: Как и когда мы выполняем итерацию при создании новой системы, нам необходимо сравнить файлы, созданные обеими системами в одинаковых условиях, и согласовать различия.
Факт 5: Это сравнение выполняется вручную с использованием дорогого инструмента визуального сравнения. Чтобы помочь в этом, я написал инструмент, который объединяет два разных имени поля в общее имя, а затем сортирует имена полей в каждой записи, в каждом файле, чтобы они синхронизировались по порядку (новые файлы могут иметь дополнительные поля, которые игнорируются в визуальная разница)
Факт 6: из-за того, что люди проводят сравнение вручную и из-за ошибок, допущенных человеком, мы получаем ложные позитивные и отрицательные стороны, которые существенно влияют на наши временные рамки.
Очевидно, вопрос в том, какими должны быть 'ALG' и 'DS'?
Сценарий, к которому я должен обратиться:
Я хочу создать программу PERL, которая будет
- читать соответствующую информацию из обоих файлов
в структуру данных "DS"
- обработайте и найдите различия
используя алгоритм «ALG», между
записи из DS
- Показать / сообщить статистику
конечный пользователь, например, сколько строк
(значения) различались между
записи, где они отличаются или являются
значения совершенно разные, являются
пропущенные строки (файлы из новой системы
могут иметь дополнительные поля, но они ДОЛЖНЫ
содержат все строки, которые есть в
файлы, созданные наследием
система)
Мои предложения для:
DS: несколько вложенных хэшей, привязанных к диску.
Похоже:
$namedHash { unique field value across both records } = {
legacy_system => {
'goodField' => 'I am good!',
'firstField' => 1,
'secondField' => 3
},
new_system => {
'firstField' => 11,
'secondField' => 33,
'goodField' => 'I am good!'
}
};
ALG: пользовательский ключ - путем сравнения ключей между анонимными хешами, на которые указывают ключи legacy_system и new_system. Любые различия будут отмечены путем добавления нового ключевого слова «различия», которое будет представлять собой массив имен полей, которые различаются между устаревшей и новой системой.
Следовательно, для этого примера вывод моего ALG будет:
$namedHash { unique field value across both records } = {
legacy_system => {
'goodField' => 'I am good!',
'firstField' => 1,
'secondField' => 3
},
new_system => {
'firstField' => 11,
'secondField' => 33,
'goodField' => 'I am good!'
},
differences => [firstField, secondField];
};
Что бы вы сделали / предложили в данном сценарии?