2个文本文件的比较:进行了哪些更改?

时间:2010-10-17 11:37:24

标签: algorithm string

想象你有2个texfiles(比方说500kB - 3 MB大):第一个是原始的,第二个是这个原始的更新。如何查找,更改(插入,删除)的内容以及更改发生的位置(在更新文件中与原始文件进行比较)?

  1. 某处有工具或图书馆吗?
  2. 在任何众所周知的文本编辑器中都有这个功能吗?
  3. 有人知道算法吗?或者大规模解决这个问题的常用方法是什么?
  4. 如果遇到这种问题,你会怎么做?
  5. Thanx为你的想法...

6 个答案:

答案 0 :(得分:2)

您所描述的内容听起来就像一个diff风格的工具。许多更高级的文本编辑器都提供了这种功能。

答案 1 :(得分:1)

您可以尝试Notepad++它是一个开源文本编辑器,插入了比较文件。

答案 2 :(得分:1)

维基百科上有extensive list of file comparison tools

如果你想以编程方式进行,我之前在Unix系统上使用过SEDAWK - 并且有windows版本。基本上,这些类型的文件处理语言允许您逐行读取和比较文本文件,然后允许您对差异执行某些操作(例如将它们保存到第三个文件)。

答案 3 :(得分:0)

  

某处有工具或图书馆吗?

有很多。尝试使用diff,这是一个基于命令行的文件比较实用程序,适用于小差异。但是如果这两个文件差别很大,那么很难理解diff的输出。在这种情况下,您可以使用视觉文件差异工具,如diffmerge,Kompare或vimdiff。

  

在任何众所周知的文本编辑器中都有这个功能吗?

许多现代编辑如vim,Eclipse都有这种视觉差异功能..

  

有人知道算法吗?或者大规模解决这个问题的常用方法是什么?

它基于Longest common subsequence algorithm,俗称LCS。

旧文本和新文本的LCS给出了保持不变的部分。因此,不属于LCS的旧文本部分是变更的部分。

  

如果遇到这种问题,你会怎么做?

我会使用其中一个视觉差异工具来查看更改的内容和位置。

答案 4 :(得分:0)

unix diff工具可以实现逐行差异;有一个名为wdiff的GNU工具,它将逐字区分,并且应该作为大多数Linux发行版或Cygwin的包提供。

关于算法的经典论文是:

答案 5 :(得分:0)