2010-05-04 26 views
18

Tengo un código para leer archivos con números flotantes en línea almacenados así: "3.34 | 2.3409 | 1.0001 | ... | 1.1 |". Me gustaría leerlos usando istringstream, pero no funciona como yo esperaría:C++ - varias veces usando istringstream

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

En el punto marcado, la fila se copia en corriente separada sólo la primera vez. En la siguiente iteración, no funciona y no hace nada. Esperé que se pueda usar más veces sin construir un nuevo objeto istringstream en cada iteración.

Respuesta

24

Después de fijar la fila en la istringstream ...

separate.str(row); 

... restablecerla llamando

separate.clear(); 

Esto borra cualquier banderas iostate que se establecen en la iteración anterior o mediante el establecimiento de la cuerda. http://www.cplusplus.com/reference/iostream/ios/clear/

+1

Muchas gracias. Esa es información muy importante que me faltaba en muchos códigos;) – Naomak

+0

¿De verdad necesita ser posterior? Creo que también puedes limpiarlo antes. – CashCow

5

es necesario agregar una línea separate.clear(); después separate.str(row) para borrar los bits de estado, de lo contrario el eofbit consigue el sistema y las lecturas siguientes fallar.