解析时忽略txt文件中的某些行

Posted

技术标签:

【中文标题】解析时忽略txt文件中的某些行【英文标题】:Ignoring certain lines in a txt file when parsing 【发布时间】:2019-03-26 21:53:02 【问题描述】:

我想从一个 txt 文件中读取文件并将一些行与正则表达式进行比较。 txt 文件的第一行应以字符串#FIRST 开头。 如果字符串应以“#”开头,则应忽略该行并继续。所以计数器应该有它所做的值 1,它应该转到第二个 if 语句 if(counter==1)。但是它不会转到第二个 if 语句。

txt 文件:

#FIRST
#
#haha

我希望代码运行一次后输出会很好。

输出是:

   good.

应该是

          good.
          good.

…………

#include <iostream> 
#include <string> 
#include <vector> 
#include <regex> 
#include <fstream> 
#include <sstream>

  int main() 

    std::ifstream input("test.txt");
    std::regex e("#FIRST");
    std::regex b("haha");
    int counter;
    for (counter = 0; !input.eof(); counter++) 
      std::cout << counter << "\n";

      std::string line;
      if (counter == 0) 
        getline(input, line);
        if (std::regex_match(line, e)) 
          std::cout << "good." << std::endl;
          counter++;

         else
          std::cout << "bad." << std::endl;
        break;
      

      getline(input, line);
      if (line[0] == '#')
        continue;

      if (counter == 1) 
        getline(input, line);
        if (std::regex_match(line, b)) 
          std::cout << "good." << std::endl;
         else
          std::cout << "bad." << std::endl;
        break;

      
    

    return 0;
  

【问题讨论】:

嗨@senpai - 你能发布当前的输出吗? @sanchitarora 我已将其添加到顶部的帖子中 计算getline 电话的发生情况。 counter = 0 => 2, counter = 1 => 2 但你只有 3 行...简单的调试(即打印出行)会帮助你找到这个。 考虑到***.com/questions/4533063/how-does-ifstreams-eof-work,建议对代码进行一些重组 扩展 @J.R.的评论,Why is iostream::eof inside a loop condition considered wrong? 【参考方案1】:

问题在于第一个 if 子句中的 break 语句。在获得输入的第一行后,程序遇到break 语句并立即跳出循环。在 for 循环中没有执行进一步的语句,我相信这是您所看到的行为。您必须将程序重组为:

for loop 
  getline()
  if (counter == <>) 
    // no break
   else if (line[0] == '#') 
    continue;
   else 
    // whatever else you want to get done
  

【讨论】:

我使用了你的方法,但我仍然面临同样的问题

以上是关于解析时忽略txt文件中的某些行的主要内容,如果未能解决你的问题,请参考以下文章

用 Python 解析 CSV / 制表符分隔的 txt 文件

如何使用Argument将路径文件作为输入数据获取到PowerShell中的其他脚本?

Python从txt文件中逐行读取数据

终端:查找*.txt文件,但忽略隐藏的.txt文件

在 *.txt 文件中搜索和更新 1 行 - C 语言

将 txt 文件中的日期解析为整数