处理巨大的文本文件

2024-03-17

Problem:我有一个巨大的原始文本文件(假设有 3gig),我需要遍历文件中的每个单词 并找出某个单词在文件中出现了多少次。

我建议的解决方案:将大文件拆分为多个文件,每个拆分文件都会按排序方式包含单词。例如, 所有以“开头的单词a“将被存储在”_a.dic“文件。所以,任何时候我们都不会超过26个文件。

这种方法的问题是,

我可以使用流来读取文件,但想使用线程来读取文件的某些部分。例如,使用单独的线程读取 0-1024 字节(根据框中存在的处理器数量,至少有 4-8 个线程)。这是可能的还是我在做梦?

还有更好的方法吗?

注意:它应该是纯 C++ 或基于 C 的解决方案。不允许使用数据库等。


你需要看看'编程实践 http://plan9.bell-labs.com/cm/cs/tpop/” 作者:Kernighan 和 Pike,特别是第 3 章。

在 C++ 中,使用基于字符串和计数的映射 (std::map<string,size_t>,IIRC)。读取文件(一次 - 它太大,无法多次读取),将其拆分为单词(对于“单词”的某些定义),并为您找到的每个单词增加映射条目中的计数。

在 C 语言中,您必须自己创建地图。 (或者找到大卫·汉森的“C 接口和实现 http://www.cs.princeton.edu/software/cii/".)

或者您可以使用 Perl、Python 或 Awk(它们都具有关联数组,相当于映射)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理巨大的文本文件 的相关文章

随机推荐