2016-05-04 8 views
0

Ich vergleiche zwei Zeichenfolgen in einer CSV-Datei. Da das Ergebnis der syntaktischen Analyse CSV-Datei ist, erhalten Zeilen von Daten durch Kommas getrennt.Warum haben die Ergebnisse beim Vergleich von zwei Strings den letzten übereinstimmenden String verpasst?

Die Codierung funktioniert gut, aber die letzte übereinstimmende Zeile kann nicht angezeigt werden.

CSV-Datei Inhalt:

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 

zB nur meine Codes, um den Inhalt unter dem fehlt die letzte gefundene Zeile angezeigt,

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

statt,

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 

Codes unten:

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; 
     } 
    } 
} 

Antwort

0

Jede Schleife, Sie erhalten eine Zeile und die Zeile danach. Wenn die Schleife in die letzte Zeile kommt, hat sie keine Zeile nach ihr, daher ist der Vergleich mit "test" nie wahr, da Sie bereits die letzte Zeile betrachten. Wenn Sie die zweite getline auf getline(ss, line2, ','); ändern, sehen Sie jetzt nur eine einzelne Zeile durch jede Schleife, da Sie den ersten Teil jeder Zeile von ss anstelle der Datei ziehen (aber die erste Zeile mit Title,sn,sn,sn wird übersprungen.) Um die Überprüfung der ersten Zeile zu überspringen (wenn diese Zeile ein Titel ist), können Sie eine zusätzliche getline(file, line); vor der Schleife setzen.

+0

Vielen Dank, @ 10101 =) – John5012