我有一個文本文件,用於保存文件和單詞(及其頻率)出現在其中的索引。我需要將文件讀入內存並存儲單詞,以便可以搜索它們。文件內的高效隨機訪問? [C]
<files> 169
0:file0.txt
1:file1.txt
2:file2.txt
3:file3.txt
... etc ...
</files>
<list> word 2
9: 10
1: 2
</list>
<list> word2 4
3: 19
5: 12
0: 2
8: 2
</list>
... etc ...
的問題是,這個索引文件會變得非常大,並不會全部裝入內存在一次:文件格式如下。我的解決方案是隻將其中一小部分存儲在HashTable中,然後當我需要爲另一個單詞獲取數據時,我會踢出一箇舊單詞,然後解析文件中新單詞的數據。
如何在C中有效地完成此操作?我一直在想,一旦我達到某些要點,我將不得不和fseek做一些事情並重新開始。
謝謝,
邁克
因爲這個文本文件看起來不夠結構化,所以我無法想象這會是_fun_。你可以做一些類似於切換到[SQLite3](http://en.wikipedia.org/wiki/SQLite)的所有數據存儲?您可以將輸入文件讀入SQLite數據庫,完成您的工作,然後再以自己的格式編寫輸出文件。 (如果它必須交互)。讓其他人處理高速訪問。 :)(或者:寫下你自己的_binary_格式,其中包含固定長度的記錄,參見'fread(3)'。糟糕的腐敗處理,但是優秀的隨機訪問) – sarnold 2011-05-05 02:53:20
不幸的是,這是上課。誰在C程序中獲得樂趣了? – Swift 2011-05-05 03:15:12
我這樣做。你有沒有嘗試過看'mmap'(或Windows的等價物)呢? – 2011-05-05 03:19:26