如果条件c ++

时间:2017-08-08 19:24:41

标签: c++ getline

我看过其他例子,但我不能让这个工作。 我有一个文件,在某些时候有奇怪的字符,例如:“Äèîpg” 我不想保存这一行,因为似乎带有getline的循环将停在那里(它存储到带有垃圾的行)。我怎么能这样做?我知道当发生这种情况时:“key = 0”,下一行会有这些字符“Äèîpg”。

这是我的代码:

    file = "example.log";
    ifstream f(file);
    f.open(file);
    if (f.good()){
        while (getline(f, line)) {
            lineNumber++;
            if ((lineNumber>= line1 - 20) && (lineNumber<= line2)){
                pos = line.find("key = 0");
                if (pos != string::npos){
                    std::cout << "skip the line" << endl;

                }
                else{
                    Type v;
                    v.line= line;
                    v.index = lineNumber;
                    linesVector.push_back(v);
                }
            }
        }
    } 
    f.close(); 

然后我用我需要的信息创建一个剪切文件:

    ofstream myfile;    
    string merge =  file + "_Cut.log";  
    myfile.open(merge);     
    for (unsigned int i = 0; i < linesVector.size(); i++){      
        myfile << linesVector[i].line << "\n";      
        //std::cout << linesVector[i].line << endl;     
    }   
    myfile.close();

提前感谢您的帮助!

要明确我的文件是什么样的,这里是原始的“example.log” (我不能把它附在某处)。

2017-08-03 09:38:46 Expeum im6
2017-08-03 09:38:46 nubla4
2017-08-03 09:38:46 blaze
2017-08-03 09:38:46 ue
2017-08-03 09:38:46 er
2017-08-03 09:38:46 key = 0
2017-08-03 09:38:46 Q2žl2pE&ö³„Ôï¬ÈL+g…^cÎ1áø/7E›¸¥ü‰úLÎ’Æ
2017-08-03 09:38:46 81B9CEandrew499OEE4MUI5Q0VhbmRyZXc0OTk=
2017-08-03 09:38:47 B9CEandrew499OEE4MUI5Q0VhbmRyZXc0OTk=
2017-08-03 09:38:48 bla
2017-08-03 09:38:49 OK
2017-08-03 09:50:12  key = 0
2017-08-03 09:50:12 E&ö³„Ôï¬ÈL+g…^cÎ1áø/7E›¸¥ü‰úLÎ’Æ

这是我在剪切文件中得到的内容:

2017-08-03 09:38:46 Expeum im6
2017-08-03 09:38:46 nubla4
2017-08-03 09:38:46 blaze
2017-08-03 09:38:46 ue
2017-08-03 09:38:46 er
2017-08-03 09:38:46 key = 0
2017-08-03 09:38:46 Q2žl2p

问题是它被困在最后的giberrish中,无法继续前进!  可能是一些遗失的回车?我的想法已经不多了。

1 个答案:

答案 0 :(得分:1)

所以看起来你正试图抛弃“key = 0”和下一行?

如果是这样,您可以在嵌套if语句中使用ignore,如下所示:f.ignore(numeric_limits<std::streamsize>::max(), '\n')

如果lineNumber应该将此视为一行,您还需要添加++lineNumber

如果这可能是文件的最后一行,您应该总共添加此代码:

if(!f.ignore(numeric_limits<std::streamsize>::max(), '\n')) {
    break;
}
++lineNumber;

Live Example