我如何在C ++中使用stringstream while循环逻辑处理整个文本文件

问题描述 投票:0回答:1

我曾经用来帮助您更接近解决方案的以下链接,但是我仍然遇到读取,内存或循环错误。我正在遍历日志文件并提取json。在json对象开始之前,有一个日期和时间以及消息和对象ID-与json相对应。所以两者都是需要的。时间也是日志文件增长的一个因素。我需要帮助找出我要去哪里的地方。

https://riptutorial.com/cplusplus/example/19029/string-streams

Multilines regex in C++

https://www.codeproject.com/Questions/1221494/Simple-multiline-regex-in-Cplusplus

http://www.cplusplus.com/reference/iterator/next/

Stringstream c++ while loop

我可以在字符串上使用正则表达式没有问题,并且可以作为多行使用。使用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。 ...

c++ regex while-loop do-while
1个回答
0
投票

while (input >> sstr.rdbuf());没有任何意义。 operator>>上的streambuf只能执行一项操作,否则将失败。如果失败,则几乎可以肯定,无论您重试多少次都不会成功,并且至少某些失败模式(例如,插入输出序列失败)不会改变istream的“真实性”,因此循环将变为无限(这可能解释了为什么在较大的文件上看不到任何输出,尽管在那么小的文件上进行拖尾操作会很奇怪)。

© www.soinside.com 2019 - 2024. All rights reserved.