C ++ - à plusieurs reprises en utilisant istringstream
-
03-10-2019 - |
Question
J'ai un code pour la lecture des fichiers avec des numéros de flotteur en ligne stockées comme ceci: « 3,34 | 2,3409 | 1,0001 | ... | 1.1 | ». Je voudrais les lire à l'aide istringstream, mais il ne fonctionne pas comme j'attendre:
string row;
string strNum;
istringstream separate; // textovy stream pro konverzi
while ( getline(file,row) ) {
separate.str(row); // = HERE is PROBLEM =
while( getline(separate, strNum, '|') ) { // using delimiter
flNum = strToFl(strNum); // my conversion
insertIntoMatrix(i,j,flNum); // some function
j++;
}
i++;
}
Au point marqué, la ligne est copiée dans le flux séparé seulement la première fois. A l'itération suivante, il ne fonctionne pas et il ne fait rien. Je m'y attendais, il est possible d'utiliser plusieurs fois sans construire nouvel objet istringstream à chaque itération.
La solution
Après avoir défini la ligne dans la istringstream ...
separate.str(row);
... le réinitialiser en appelant
separate.clear();
efface tous les drapeaux iostate qui sont définies dans l'itération précédente ou en définissant la chaîne. http://www.cplusplus.com/reference/iostream/ios/clear/
Autres conseils
Vous devez ajouter une ligne de separate.clear();
après separate.str(row)
pour effacer les bits d'état, sinon le eofbit
se prépare et se lit comme suit après l'échec.