如何从文件中读取特定行?

时间:2014-09-11 21:52:37

标签: c++

我正在编写一个程序,以下面的格式从文本文件中读取数据。如何跳过阅读以星号开头的任何行?

* Data set 34.6
* Author: M. S.
1   3     
6   7     
4   5     
... so on

我的代码的相关部分目前看起来像这样..它可以一次读取并插入2个数字到我的集合但是如果在星号上面有注释行,则会出现错误。所以我不确定在读取文件时如何忽略这些行。

string lin;
while (getline(if1, lin)) {
        istringstream is1(lin);
        int a, b;
        if (is >> a >> b) {
            set3.insert({a, b});                                    
        } 
    }   

2 个答案:

答案 0 :(得分:1)

您可以在进行更多阅读之前检查星号,如果找到,请continue(跳转到while的下一次迭代):

string lin;
while (getline(if1, lin)) {
    if(lin[0] == '*') continue; //Skip this line if it's bad
    istringstream is1(lin);
    int a, b;
    if (is >> a >> b) {
        set3.insert({a, b});                                    
    } 
}  

答案 1 :(得分:0)

除非您的文件具有特定格式(例如,以星号开头的每一行都有固定数量的符号),否则您不能跳过该行,因为您不知道要跳过多少个符号。您应该做什么 - 逐行读取文件,如果您读取的行以星号开头跳过处理它。

string lin;
while (getline(if1, lin)) {
    if( lin.length() == 0 || lin[0] == '*' ) continue;
    istringstream is1(lin);
    int a, b;
    if (is1 >> a >> b) {
        set3.insert({a, b});                                    
    } 
}