我有一个文本文件,用来保存文件和出现在其中的单词(及其频率)的索引。我需要将文件读入内存并存储单词以便搜索。文件格式如下:
<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 ...
问题是,这个索引文件可能会变得非常大,不能一次全部放入内存。我的解决方案是一次只将其中的一小部分存储在哈希表中,然后当我需要获取另一个单词的数据时,我会将一个旧单词踢出,然后从文件中解析新单词的数据。
我怎样才能用C语言高效地完成这个任务?我在想,一旦我到了某个点,我就必须对fseek和倒带做些什么。
谢谢,
迈克
最佳答案
尽管C的字符串支持很差——从我看示例可以看出,它有一个不同的模式,从磁盘重新解析它是可行的。
不过,我会考虑将文件转换为数据库并从中工作。除非有理由不这样做,否则拉入第三方数据库引擎。
如果决定重新解析文本文件,看起来并不太困难。First pass将每个列表的起始位置存储为一对。然后你所做的就是寻找索引来读取特定单词的数据。
如果你关心的效率问题是计算机要花多长时间来进行解析,忘掉它,找出对你来说最容易的。在你知道你需要优化之前不要优化。电脑又快又便宜,而程序员却不是。
关于c - 文件内的有效随机访问? [C],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5892078/