2015-09-06 80 views
2

我想知道的內容時,文件更改golang -Comparing 2個txt文件

有一個simeple txt文件

textOne 1,2,3,4,5,6,7,8,9,10 

,我將其更改爲

textTwo 1,2,3,4,7,7,7,8,9,10 

所以「一'和'5,6'改爲'2','7,7'

我可以找到循環改變的東西。但我不知道是否有一些更好的方法來檢查

+5

也許是差異庫? https://github.com/sergi/go-diff –

回答

5

而不是循環使用標準的第三方庫,以小優化。

我過去使用過的圖書館之一是Go port of google-diff-match-patch(與@Not_a_golfer在評論中建議的圖書館相同)。

您可以通過首先計算sha2這兩個文件的散列值來優化它,如果它們不相同,則可以假定它們已更改,否則(可能)它們相同,並跳過diff操作。

這種優化的一個缺點是,由於鴿子洞原理,理論上可能對於不同的內容具有相同的散列值。但是,發生的可能性很小。

EDIT(基於@ elithrar的評論): 由於散列計算非常大的文件,可能會非常耗時。您可以分塊計算sha2(大小取決於sha2家族的特定哈希算法)。這使您能夠儘早獲得救助,並提高速度。

+3

你也可以使用緩衝讀取器來讀取文件塊(比如說4K塊),對它們進行散列並進行比較。這樣可以避免散列大文件,提高速度(提前退出)並避免衝突。 SHA-2應該是合適的。 – elithrar

+0

@elithrar編輯,以體現這一點。 – desaiparth