c++ - 在 C/C++ 中搜索大文件中的数据

标签 c++ c file indexing search

我有一个具有这种格式的日志文件:

DATE-TIME ### attribute1  ### attribute2 ###attribute3 

我必须在这个日志文件中搜索输入属性(从命令行输入)并输出与输入属性匹配的行。
一个天真的方法可能是这样的:

scan the entire file line by line
search for the attribute
print if found, else ignore.

这种方法很慢,因为它需要 O(n) 次比较,其中 n 是可能非常大的行数。
另一种方法可能是使用哈希表,但可能无法为大文件保留这样的内存中哈希表。
那么,最好的可行方案是什么?我怎样才能根据各种属性为整个文件编制索引?

编辑:
日志文件可能有 100K 行左右,几乎像 linux 上的系统日志文件。 在一次调用中,用户可以搜索多个属性,直到第一个属性的搜索像交互式控制台一样完成后才知道。

谢谢,

最佳答案

如果你只搜索一次,你不能比 O(n) 做得更好。

如果哈希索引太大而无法放入内存,请使用磁盘上的哈希,如 dbmgdbm .

编辑:我想指出,KeithB 建议的 Berkeley DB 工具在磁盘哈希上属于此类。 Berkeley DB 不是使用 SQL 的关系数据库。

关于c++ - 在 C/C++ 中搜索大文件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2210234/

相关文章:

file - Haskell 文件读取

c++ - 我的 makefile 有什么问题?

c++ - 信号量上的 WaitForSingleObject 不等待,立即返回

c - 自问自答,利用系统信号制作Linux单调定时器

c - 加速计算

python - 仅当字符串与其他字符间隔开时,如何检查行中的确切字符串?

c - fclose() 然后是 free()?

c++ - 为什么 mac os sdl2 程序窗口没有响应?

c++ - 代码库未找到标准 C++ 库 header

c - C Pipe 中的 Unix Shell 问题