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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top