我正在从第三方应用程序解析一个合理大小的日志文件(最大 50Mb,此时它会包装),以检测在指定时间范围内发生的 KEY_STRING。此日志文件中的典型条目可能如下所示
DEBUG 2013-10-11@14:23:49 [PID] - Product.Version.Module
(Param 1=blahblah Param2=blahblah Param3 =blahblah
Method=funtionname)
String that we usually don't care about but may be KEY_STRING
条目以空行分隔(\r\n 在条目末尾,然后在下一个条目开始之前 \r\n)
这是针对特定于 Windows 的实现,因此不需要是可移植的,并且可以是 C/C++/Win32
逐行读取此内容将非常耗时,但其好处是能够解析时间戳并检查条目是否在给定时间范围内,然后再检查条目中是否存在任何 KEY_STRING。如果我按块读取文件,我可能会找到一个 KEY_STRING,但该块没有较早的时间戳,或者块边界甚至可能位于 KEY_STRING 的中间。将整个文件读入内存并解析它不是一个选项,因为它要成为其中一部分的应用程序当前占用的空间相对较小,因此不能证明仅为了解析文件(即使是暂时的)将其增加约 10 倍是合理的. 有没有办法可以通过分隔块(特别是“\r\n\r\n”)读取文件?还是有我没有想到的另一种/更好的方法?
对此的任何帮助将不胜感激!