使用关键字解析 C++ 中的文件

parsing file in c++ with keyword

本文关键字:文件 C++ 关键字      更新时间:2023-10-16

我正在尝试想一种有效的方法来读取数千行的文件。每行都以一个关键字开头。我想阅读关键字,如果它满足某些条件(例如 atoi(关键字)>5),那么我阅读整行,否则转到下一行。

有没有有效的方法? 我不想阅读和拆分每一行,除非满足关键字条件(每一行都很大)。我只能访问标准库功能。

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

如果您具有脱机预处理的某些功能,则可以对文件进行预索引以查找每行的开头,以便可以读取一行的开头,如果不符合条件,请直接查找下一行的开头。这会增加整体带宽使用量,但在关键时刻可以提高速度。

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

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

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