2012-08-06 73 views
7

我有兩個大文本文件,每個文件都有超過10百萬行。我如何比較這些文件並在使用C++的文件中獲得不同的行。使用C++比較大文件

我曾嘗試將一個文件加載到內存中,並對內存進行排序並使用二進制樹邏輯來比較這些文件。它在20秒比較並給了我結果。但它消耗更多的內存。 (文本文件大約500 MB)。

我想比較兩個文件,而不消耗更多的內存,良好的性能和對硬盤的影響最小。

+7

第一步是選擇一種語言。 C和C++的解決方案會有所不同。 – juanchopanza 2012-08-06 17:16:54

+6

差異工具是否不符合您的要求?比重新發明輪子更容易。 – user7116 2012-08-06 17:17:56

+2

讓語言成爲CPP – 2012-08-06 17:18:10

回答

4

您可以使用雙通法。

第一遍,你讀取文件,但只存儲散列值和行開始pos行,然後你可以比較基於散列值的文件,你只在第二遍時讀取行再次完成比較,當兩行相同哈希值。這將節省內存消耗和CPU時間,有點罰款讀一些線兩次。

+0

我的建議是一樣的,但後來我認爲,當散列**相等時**(幾乎任何時候)提取文本可能是必要的,以確保比較。因此,這種天真的策略可能不是很有效。 OTH差異應該使用類似的東西。 – CapelliC 2012-08-06 18:03:20

+0

如果你不關心在宇宙結束之前你犯了一兩次錯誤,只需在源代碼行上使用128位散列碼。獲得一千萬行較差比較的概率是(1-2 ^( - 128))* 10^7 ~~ 1-2 ^( - 103)。似乎足夠安全。 – 2012-08-14 08:36:42

+0

@IraBaxter呃,其實我很在乎),我想很多人也在乎。 – FrostNovaZzz 2012-08-16 00:38:38