2016-05-04 10 views
0

私はcsvファイルの2つの文字列を比較しています。 csvファイルを解析した結果、データの行がカンマで区切られています。なぜ2つの文字列を比較した結果が最後に一致した文字列を見つけられなかったのですか?

コーディングは正常に機能しますが、最後に一致した行は表示されません。

CSVファイルの内容:

Title,sn,sn,sn 
test,123,344,222 
test,123,344,222 
test,123,344,222 
test,123,344,222 
test,456,677,223 
test,5,4545,32 
apple,23,44,22 
apple,323,23,22 

例えば、私のコードは、ちょうど

Title,sn,sn,sn 
test,123,344,222 
test,123,344,222 
test,123,344,222 
test,123,344,222 
test,456,677,223 

代わりに、

Title,sn,sn,sn 
test,123,344,222 
test,123,344,222 
test,123,344,222 
test,123,344,222 
test,456,677,223 
test,5,4545,32 

コードとして、最後にマッチした行が不足しているの下にコンテンツを表示しました以下:

int main() 
{ 
    string line; 
    ifstream file("sample.csv"); 

    if(!file) 
    { 
     cout << "Error, could not open file." << endl; 
     return -1; 
    } 
    while(getline(file, line)) 
    { 
     stringstream ss(line); 
     string line2; 

     getline(file, line2, ','); 

     string str = "test"; 
     if(line2 == str) 
     { 
      cout << line << endl; 
     } 
    } 
} 

答えて

0

すべてのループでは、行とその後の行が得られます。ループが最後の行に来ると、その行の後に行がないので、最後の行を見ているので "test"との比較は決して真です。 2番目のgetlineをgetline(ss, line2, ',');に変更した場合、ファイルの代わりにssから各行の最初の部分を引っ張っているので、各ループの1行だけが表示されます(しかし、最初の行はTitle,sn,sn,snにスキップされます)。最初の行をスキップする場合(その行がタイトルの場合)、ループの前に追加のgetline(file, line);を置くことができます。

+0

ありがとう、@ 10101 =) – John5012

関連する問題