2010-12-06 14 views
0

Ich möchte die ersten Zeilen von 2 separaten Dateien lesen und dann vergleichen ... das folgende ist der Code, den ich benutze, aber es gibt mir "istream zu String Fehler". Muss ich eine Weile verwenden, um die Dateien zuerst zu lesen?getline und file handling

ifstream data_real(filename.c_str()); /*input streams to check if the flight info 
            are the same*/ 
ifstream data_test("output_check.txt"); 
string read1, read2; 
string first_line_input = getline(is,read1); 
string first_line_output_test = getline(data_test,read2); 

string test_string1, test_string2; 
int num_lines_output_test, num_lines_input; 
if((first_line_input.substr(0,3)==first_line_output_test.substr(0,3))) 
{ 
    while(!data_test.eof()) // count the number of lines for the output test file with the first flight info 
    { 
     getline(data_test,test_string1); 
     num_lines_output_test++; 
    } 
    while(getline(is,test_string2)) // count the number of lines for the output test file with the first flight info 
    { 
     if(test_string2.substr(0,3)!="ACM") 
      num_lines_input++; 
     else 
      break; 
    } 
} 
+1

Kopieren Sie die tatsächliche Fehlermeldung und fügen Sie sie ein. –

Antwort

1

getline(istream, string) gibt eine Referenz auf den istream zurück, keine Zeichenfolge.

So könnte die erste Zeile jeder Datei zu vergleichen so etwas wie:

string read1, read2; 
if !(getline(is,read1) && getline(data_test,read2)){ 
    // Reading failed 
    // TODO: Handle and/or report error 
} 
else{ 
    if(read1.substr(0,3) == read2.substr(0,3)){ 
     //... 

auch: Verwenden Sie niemals eof() als Abbruchbedingung für eine Strom-Leseschleife. Der idiomatische Weg, es zu schreiben ist:

while(getline(data_test,test_string1)) // count the number of lines for the output test file with the first flight info 
{ 
    num_lines_output_test++; 
} 
+0

also wie vergleiche ich die ersten Zeilen der beiden Dateien? – dawnoflife

+0

@dawnoflife: Ich habe ein Beispiel in der Antwort hinzugefügt –

0

Versuchen Sie, diese Hilfsfunktion hinzugefügt:

std::string next_line(std::istream& is) { 
    std::string result; 
    if (!std::getline(is, result)) { 
    throw std::ios::failure("Failed to read a required line"); 
    } 
    return result; 
} 

Jetzt können Sie Zeilen aus der Datei verwenden, um die Art und Weise Sie (dh wollen Strings zu initialisieren, anstatt sie zu ändern):

string first_line_input = next_line(is); 
string first_line_output_test = next_line(data_test);