У меня есть файлы, которые я хочу сравнить, и мне нужен способ заставить линии совпадать, чтобы алгоритм выбирал блок для правильного сравнения.
Например: FILE1
test1
subline1
subline2
subline3
test2
subline1
subline2
subline3
subline4
test3
subline1
subline2
subline3
test4
subline1
test5
subline2
subline3
subline4
FILE2
test1
subline1
subline2
subline3
test3
subline1
subline2
subline3
subline4
test4
subline1
subline2
subline3
subline4
С любыми инструментами, которые я использую, я не могу добиться идеального совпадения в строке с «test», а поскольку содержимое блоков похоже, оно всегда совпадает неправильно.
См. Изображения ниже: Блокнот ++ Сравнить Winmerge
Meld и diff тоже не работали.
Спасибо
diff
- это линейный алгоритм, но похоже, что вы хотите сопоставить не строки, а блоки строк.
Одна из возможностей - использовать промежуточный шаг, чтобы поместить каждый блок в одну строку, соединив блоки в строке вместе, тогда вы можете использовать diff
по результату.
git diff
который поддерживает 4 разных алгоритма сравнения, и вы можете сравнивать два файла, даже если они не находятся в репозитории git:
--diff-algorithm={patience|minimal|histogram|myers}
Choose a diff algorithm. The variants are as follows:
default, myers
The basic greedy diff algorithm. Currently, this is the default.
minimal
Spend extra time to make sure the smallest possible diff is produced.
patience
Use "patience diff" algorithm when generating patches.
histogram
This algorithm extends the patience algorithm to "support low-occurrence common elements".
For instance, if you configured diff.algorithm variable to a non-default value and want to use the
default one, then you have to use --diff-algorithm=default option.
Однако при тестировании файлов все алгоритмы дали тот же результат, что и diff
бы.
Существуют и другие инструменты для различения структурированных форматов, таких как XML или JSON, блочные различия, которые вам нужны, не являются ни строчными, ни какой-либо другой формальной структурой.
В конечном счете, я думаю, что для того, чтобы алгоритм сравнения работал на вас, ваши данные должны быть в строчном или другом формальном формате.
Total Commander вам поможет (сравните по содержанию)