我對你對我的「技術」的看法有一個普遍的疑問。如何比較大型文本文件?
有兩個文本文件(file_1
和file_2
)需要相互比較。兩者都非常巨大(3-4千兆字節,每個3000萬到4500萬行)。 我的想法是將file_1
的幾行(儘可能多)讀到內存中,然後將這些行與全部行的file_2
進行比較。如果匹配,則匹配的兩個文件中的行應寫入新文件。然後繼續下一行1000行file_1
,也比較那些全部行file_2
,直到我完全通過file_1
。
但這聽起來確實非常耗時且對我來說很複雜。 你能想出其他方法來比較這兩個文件嗎?
您認爲比較可能需要多長時間? 對於我的課程,時間並不重要。我沒有處理這些龐大文件的經驗,因此我不知道這可能需要多長時間。但不應該超過一天。 ;-)但我恐怕我的技術可能會永遠...
剛纔出現在我腦海中的Antoher問題:你會在內存中讀多少行?越多越好?有沒有辦法在實際嘗試之前確定可能的行數? 我想盡可能多的閱讀(因爲我認爲這樣會更快),但我經常用完內存。
在此先感謝。
編輯 我想我必須多解釋一下我的問題。
目的不是看兩個文件一般是否相同(它們不是)。 每個文件中有一些共享相同「特徵」的行。 下面是一個例子: file_1
看起來有點像這樣:
mat1 1000 2000 TEXT //this means the range is from 1000 - 2000
mat1 2040 2050 TEXT
mat3 10000 10010 TEXT
mat2 20 500 TEXT
file_2
看起來是這樣的:
mat3 10009 TEXT
mat3 200 TEXT
mat1 999 TEXT
TEXT
指的是不感興趣的,我字符和數字,mat
可以從mat1 - mat50
去並沒有順序;也可能有1000x mat2
(但下一列中的數字不同)。我需要找到適合的線條:matX在兩條比較線中都相同,file_2
中提到的數字符合file_1
中提及的範圍。 所以在我的例子中,我會找到一個匹配:file_1
的第3行和file_2
的第1行(因爲mat3和10009都在10000和10010之間)。 我希望這對你很清楚!
所以我的問題是:你將如何搜索匹配的行?
是的,我使用Java作爲我的編程語言。
編輯 我現在先分了巨大的文件,使我有被淘汰的內存沒有問題。我也認爲將比較(很多)較小的文件比兩個大文件比較快。之後,我可以按照上面提到的方式比較它們。這可能不是完美的方式,但我仍然在學習;-) 但是,所有的方法都對我非常有幫助,謝謝你的回覆!
您標記'java'的問題,這是否意味着你只是想這樣做在Java中? –
我不知道這是否可以幫助你 http://stackoverflow.com/questions/964332/java-large-files-disk-io-performance –
聽起來像是不錯的使用情況內存映射(和首先對文件進行碎片整理),但我不知道Java是否提供了這種功能。 –