2016-02-17 58 views
0

我试图想到一种有效的方式来读取具有数千行的文件。每行以关键字开头。我想阅读关键字,如果它满足一些条件(如atoi(关键字)> 5),然后我读整行,否则去下一行。用关键字解析C++文件

有没有这样做的有效方式?除非满足关键字标准(每行很大),否则我不想阅读和分割每一行。我只能访问标准库功能。

+0

不要在问题中加上敬意或问题,对于问题 –

回答

1

你基本上别无选择,只能阅读整行 - 一行延伸到下一个换行符,所以如果不读取字符,就无法识别一行和下一行开始的位置。

如果您有一些离线预处理功能,您可以对文件进行预先索引以查找每行的开头,以便您可以读取行的开头,并且如果不符合您的要求标准,直接寻找下一行的开头。这增加了整体带宽的使用,但它可以提高速度。

根据你的意思是一条巨大的线条,它可能没有太多(如果有的话)真正的好处。如果“巨大”意味着几兆字节,它可能会帮助很多。如果“巨大”意味着数百甚至几千字节,那么它可能比读取所有数据要慢。

+0

以简短的方式(比如说1KB)加以说明并加以澄清,你仍然可以更好地阅读它。这里最大的成本是系统调用,所以你应该尽量减少这些 - 阅读大块。 – BitWhistler

0

最快的方法是阅读每个字符,寻找一行的结尾,当你找到一个字符时,然后开始你的关键字逻辑。没有一种方法可以在不读取每个字符的情况下简单地跳到文件中的下一行。

通过使用mmap打开文件,然后使用memchr搜索行结束符,您可以最大化搜索新行的速度。