想象你有2個texfiles(比方說500kB - 3 MB大):第一個是原創的,第二個是這個原創的更新。我如何知道,更改(插入,刪除)以及更改發生的位置(在更新文件中與原始文件相比較)?2個文本文件的比較:進行了哪些更改和哪些更改?
- 有沒有工具或庫的地方?
- 在任何公知的文本編輯器中駐留這個函數嗎?
- 有人知道算法嗎?或者大規模解決它的常用方法是什麼?
- 如果您遇到這種問題,您會怎麼做?
thanx您的想法...
想象你有2個texfiles(比方說500kB - 3 MB大):第一個是原創的,第二個是這個原創的更新。我如何知道,更改(插入,刪除)以及更改發生的位置(在更新文件中與原始文件相比較)?2個文本文件的比較:進行了哪些更改和哪些更改?
thanx您的想法...
你可以嘗試Notepad++它是有一個比較文件插入一個開源的文本編輯器。
維基百科上有一個extensive list of file comparison tools。
如果您想以編程方式執行此操作,我以前在Unix系統上使用過SED和AWK - 並且有Windows版本。基本上,這些類型的文件處理語言允許您逐行讀取和比較文本文件,然後允許您對差異進行一些操作(例如將它們保存到第三個文件中)。
非常感謝上面的鏈接。我試圖自己開發這個小工具,但在我看來很難重新發明很久以前發明的東西......現在我不確定,如果我自己在應用程序中實現它,或者我每次都使用一些比較工具。 – lyborko 2010-10-17 12:07:49
是否有任何工具或庫的某處?
還有很多。嘗試使用diff
,這是一個基於命令行的文件比較實用程序,適用於小差異。但是,如果這兩個文件差別很大,就很難理解diff的輸出。在這種情況下,您可以使用diffmerge,Kompare或vimdiff等可視化文件差異工具。
在任何衆所周知的文本編輯器中駐留此函數嗎?
許多現代的編輯器如vim,Eclipse中有這個可視版本比較功能..
有誰知道的算法?或者大規模解決它的常用方法是什麼?
它基於Longest common subsequence algorithm
,俗稱LCS。
舊文本和新文本的LCS給出保持不變的部分。因此,不屬於LCS的舊文本的部分是被改變的部分。
如果您遇到這種問題,您會怎麼做?
我會使用提到的視覺比較工具之一來查看做出了哪些更改以及在哪裏進行了更改。
unix diff工具可以逐行區別;有一個名爲wdiff的GNU工具,它將逐字逐句地區分開來,並應作爲大多數Linux發行版或Cygwin的軟件包提供。
對算法經典論文有:
GNU Diffutils http://www.gnu.org/software/diffutils/
souregear的DiffMerge是免費的... – 2010-10-17 11:40:07
@Mitch小麥 - 謝謝,看起來不錯... – lyborko 2010-10-17 12:09:46