Сравнение двух текстовых файлов: что и где были внесены изменения? - PullRequest
5 голосов
/ 17 октября 2010

представьте, что у вас 2 текстовых файла (скажем, 500 КБ - 3 МБ): первый - оригинальный, второй - обновление этого оригинала.Как узнать, что было изменено (вставлено, удалено) и где произошли изменения (в файле обновления по сравнению с оригиналом)?

  1. Есть ли где-нибудь инструмент или библиотека?
  2. Находит эту функцию в любых известных текстовых редакторах?
  3. Кто-нибудь знает алгоритм?Или каковы общие методы решения этой проблемы в больших масштабах?
  4. Что бы вы сделали, если бы столкнулись с такой проблемой?

Спасибо за ваши идеи ...

Ответы [ 6 ]

2 голосов
/ 17 октября 2010

То, что вы описываете, звучит как инструмент стиля diff . Такая функциональность доступна во многих более продвинутых текстовых редакторах.

1 голос
/ 17 октября 2010

В википедии имеется обширный список инструментов сравнения файлов .

Если вы хотите сделать это программно, я использовал SED и AWK в системах Unix до сих пор - и есть версии для Windows. По сути, эти типы языков обработки файлов позволяют вам читать и сравнивать текстовые файлы построчно, а затем позволяют что-то делать с различиями (например, сохранять их в третьем файле).

1 голос
/ 17 октября 2010

Вы можете попробовать Notepad ++ - это текстовый редактор с открытым исходным кодом, в котором есть плагин для сравнения файлов.

0 голосов
/ 17 октября 2010
0 голосов
/ 17 октября 2010

Инструмент unix diff выполняет построчную разницу; есть инструмент GNU, называемый wdiff , который будет делать пословные различия и должен быть доступен как пакет для большинства дистрибутивов Linux или Cygwin.

Классическими статьями по алгоритму являются:

0 голосов
/ 17 октября 2010

Есть ли где-нибудь инструмент или библиотека?

Их много.Попробуйте использовать diff, это утилита сравнения файлов на основе командной строки, которая отлично работает для небольших различий.Но если два файла сильно различаются, будет сложно понять вывод diff.В этом случае вы можете использовать визуальные инструменты сравнения файлов, такие как diffmerge, Kompare или vimdiff.

Находится ли эта функция в любых известных текстовых редакторах?

Многие современные редакторы, такие как vim, Eclipse, имеют эту функцию визуального сравнения ..

Кто-нибудь знает алгоритм?Или каковы общие методы решения этой проблемы в больших масштабах?

Он основан на Longest common subsequence algorithm, широко известном как LCS.

LCSстарого текста и нового текста дает часть, которая осталась неизменной.Таким образом, части старого текста, которые не являются частью LCS, изменились.

Что бы вы сделали, если бы столкнулись с такой проблемой?

Iиспользовал один из упомянутых инструментов визуального сравнения, чтобы увидеть, что и где были внесены изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...