2010-05-04 10 views
18

Mam kod do odczytu plików z liczbami zmiennoprzecinkowymi zapisanymi w ten sposób: "3.34 | 2.3409 | 1.0001 | ... | 1.1 |". Chciałbym, aby je odczytać za pomocą istringstream, ale to nie działa jak bym się spodziewał:C++ - wielokrotnie przy użyciu 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++; 
    } 

W zaznaczonym punktem, wiersz jest kopiowane do oddzielnego strumienia tylko za pierwszym razem. W następnej iteracji to nie działa i nic nie robi. Spodziewałem się, że możliwe będzie użycie więcej razy bez budowania nowego obiektu istringstream w każdej iteracji.

Odpowiedz

24

Po ustawieniu wiersz do istringstream ...

separate.str(row); 

... zresetować go poprzez wywołanie

separate.clear(); 

to czyści wszystkie flagi iostate, które są ustawione w poprzedniej iteracji lub poprzez ustawienie ciąg znaków. http://www.cplusplus.com/reference/iostream/ios/clear/

+1

Wielkie dzięki. To jest bardzo ważna informacja, której mi brakowało w wielu kodach;) – Naomak

+0

Czy rzeczywiście musi to być po? Myślę, że możesz to wcześniej wyczyścić. – CashCow

5

Trzeba dodać separate.clear(); wiersz po separate.str(row) wyczyść bitów stanu, w przeciwnym razie eofbit pobiera ustawiony, a następnie odczytuje niepowodzeniem.

Powiązane problemy