Как идентифицировать файлы с идентичным содержимым, но другим расположением данных - PullRequest
0 голосов
/ 25 октября 2018

Я тестирую обновление, которое мы запустили в приложении, которое обрабатывает данные.Я взял заархивированные данные, которые уже проходили через систему раньше, и сравнил их с выходными данными недавно обновленного приложения.Я замечаю, что данные одинаковы, но расположение данных в новом выводе отличается.Например, в новой строке файла 57 данные раньше находились в строке 43 в старом выводе.Есть ли способ обнаружить, что файлы содержат идентичный контент?Когда я запускаю сравнение файлов в TextPad или сравнение хешей MD5, он не обнаруживает, что файлы имеют одинаковое содержимое.Он видит их как разные файлы.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Как упоминали Энак и Доминик, сортировка текстовых файлов строка за строкой и последующее сравнение этих двух файлов с полной уверенностью покажет, отсутствует ли что-либо или нет.

Вы можете вычислить некоторые совокупные значения обоих файлов и сравнить их для достаточного доказательства, что будет намного быстрее.Количество слов и символов одинаковы?Как насчет количества различных алфавитов?Подсчитайте все 26 алфавитов в обоих файлах (вы также можете сделать то же самое для любого набора символов по вашему выбору), если их номера точно совпадают, существует очень высокая вероятность того, что оба файла содержат одинаковую информацию.Это совпадает с вашим подходом к хешированию, но, очевидно, не так надежно.

Если вам нужно знать наверняка, вам придется как-то сравнивать каждую строку файла A с каждой строкой файла B.Если строки полностью перемешаны, сортировка строк в файлах A и B и последующее сравнение файлов будут наилучшим вариантом.Однако, если есть местность (номер строки x файла A имеет тенденцию оставаться около местоположения x в файле B), вы можете также просто сравнить два файла без сортировки, а вместо этого начать поиск строки x файла A вокруг местоположения xв файле Б.

0 голосов
/ 25 октября 2018

Сравнение хешей не имеет смысла.Так как, например, два файла с

foo
bar

и

bar
foo

сгенерируют совершенно другой хэш.В противном случае хеш-функции были бы действительно сломаны.

Я думаю, что ваш единственный шанс здесь - посмотреть, есть ли каждая строка в файле A в файле B (строка за строкой).Может быть, вы могли бы реализовать алгоритм сортировки.Это можно сделать одновременно для обоих файлов, а затем вы можете сравнить хэш этих двух файлов, поскольку алгоритм сортировки является детерминированным в своем выводе.

...