【发布时间】:2011-05-05 02:44:20
【问题描述】:
我有一个文本文件,用于保存其中出现的文件和单词(及其频率)的索引。我需要将文件读入内存并存储单词以便可以搜索它们。文件格式如下:
<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 和 rewinding 做一些事情。
谢谢,
迈克
【问题讨论】:
-
因为这个文本文件看起来不是很有条理,我无法想象这会是有趣。你能做一些激烈的事情,比如切换到SQLite3 来存储所有数据吗?您可以将输入文件读入 SQLite 数据库,完成您的工作,然后再次以您自己的格式编写输出文件。 (如果它必须互操作。)让其他人处理高速访问。 :) (或者:用固定长度的记录编写你自己的 binary 格式。请参阅
fread(3)。糟糕的损坏处理,但出色的随机访问。) -
不幸的是,这不是为了好玩。是上课用的现在还有谁为了好玩而用 C 语言编程?
-
我愿意。您是否尝试过查看
mmap(或 Windows 等效项)?