2010-10-17 2 views
5

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

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

Thanx для ваших идей ...

+0

souferear's DiffMerge является бесплатным ... –

+0

@Mitch Wheat - Thanx, выглядит красиво ... – lyborko

ответ

1

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

2

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

+0

A while after ваш ответ, я узнал, что по крайней мере Open Office имеет эту функцию ... Спасибо ... – lyborko

1

В википедии есть extensive list of file comparison tools.

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

+0

Большое спасибо за ссылки выше. Я попытался развить этот маленький инструмент сам, но мне показалось довольно сложным заново изобрести то, что было изобретено давным-давно ... Я не уверен сейчас, если я сам его реализую в приложении или каждый раз использую инструмент сравнения , – lyborko

0

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

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

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

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

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

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

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

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

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

0

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

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

Смежные вопросы