Diff инструмент, который я могу заставить определенные линии соответствовать
У меня есть файлы, которые я хочу сравнить, и мне нужно было бы иметь способ заставить линии совпадать, чтобы алгоритм выбрал блок для правильного сравнения.
Например: ФАЙЛ1
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 тоже не сработали.
Спасибо
2 ответа
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. Блочные разности, которые вам нужны, не основаны ни на строках, ни на другой формальной структуре.
В конечном счете, я думаю, что для того, чтобы алгоритм работы работал на вас, ваши данные должны быть линейными или в другом формальном формате.