2010-12-06 3 views
0

Je veux lire les premières lignes de 2 fichiers séparés, puis les comparer ... ce qui suit est le code que j'utilise mais il me donne "istream to string error". dois-je utiliser une condition while pour commencer à lire les fichiers en premier?getline et le traitement des fichiers

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

Copiez et collez le message d'erreur réel. –

Répondre

1

getline(istream, string) renvoie une référence à l'istream, pas une chaîne.

Ainsi, en comparant la première ligne de chaque fichier pourrait être quelque chose comme:

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)){ 
     //... 

aussi: Ne jamais utiliser eof() comme condition de terminaison pour une boucle de lecture de flux. La façon de l'écrire est idiomatiques:

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

alors comment comparer les premières lignes des deux fichiers? – dawnoflife

+0

@dawnoflife: J'ai ajouté un exemple dans la réponse –

0

Essayez d'ajouter cette fonction d'assistance:

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

vous pouvez maintenant utiliser les lignes du fichier comme vous le souhaitez (par exemple pour initialiser des chaînes, plutôt que de les modifier):

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