我曾经用来帮助您更接近解决方案的以下链接,但是我仍然遇到读取,内存或循环错误。我正在遍历日志文件并提取json。在json对象开始之前,有一个日期和时间以及消息和对象ID-与json相对应。所以两者都是需要的。时间也是日志文件增长的一个因素。我需要帮助找出我要去哪里的地方。
https://riptutorial.com/cplusplus/example/19029/string-streams
https://www.codeproject.com/Questions/1221494/Simple-multiline-regex-in-Cplusplus
http://www.cplusplus.com/reference/iterator/next/
我可以在字符串上使用正则表达式没有问题,并且可以作为多行使用。使用stringstream从文件读取,我有while(input >> sstr.rdbuf());
,现在我的流已缓冲到我的理解中。
当我cout << sstr.str()
仅被读取1次时>
std::ifstream input("log.txt"); std::stringstream sstr; std::smatch m; std::regex reg("(\\{|\\[)(\\n\\s+.*)+\\n*(\\}||\\])"); while (input >> sstr.rdbuf()); std::string strang = sstr.str(); while (std::regex_search(strang, m, reg)) { std::cout << "Results : \n" << m.str() << '\n'; for (i = 0; i > strang.length(); i++) { std::cout << m.str(i); i++; } }
如果文件很小,这似乎会永远循环文件。对于大于30MB的较大文件,没有输出。
我正在查看向量和哈希图,但是我不确定如何将正则表达式应用于哈希图-似乎很奇怪。最重要的是,我已经知道向量无论如何最多只能存储大约30个变量,因此这种类型的工作量太多了。
谢谢!
我曾经用来帮助您更接近解决方案的以下链接,但是我仍然遇到读取,内存或循环错误。我正在遍历日志文件并提取json。 ...
while (input >> sstr.rdbuf());
没有任何意义。 operator>>
上的streambuf
只能执行一项操作,否则将失败。如果失败,则几乎可以肯定,无论您重试多少次都不会成功,并且至少某些失败模式(例如,插入输出序列失败)不会改变istream
的“真实性”,因此循环将变为无限(这可能解释了为什么在较大的文件上看不到任何输出,尽管在那么小的文件上进行拖尾操作会很奇怪)。