2013-02-23 2 views
0

Я чтение данных из файла с помощью wifstreamКак использовать любой поток на wstring для извлечения данных

файл TXT выглядит следующим образом:

1,2,3,4,5,6,7 
2,3,4,5,6,7,8 
... 
... 

каждый номер представляет собой идентификатор мне нужно для программы и запятая является разделителем Вот мой код

wifstream inputFile(FILE_PATH); 
if(inputFile) 
{ 
    wchar_t regex; 
    int id; 
    while(inputFile) 
    { 
     inputFile>>id; 
     inputFile.get(regex); 

     cout << id << ", ";       
    } 
    inputFile.close(); 
} 

Этот код работает прекрасно, пока я не изменить схему считывания, в которой одна строка считывается в то время, Я хотел сделать что-то подобное на линии, чтобы я мог читать данные из строки, в то время как буфер потока выталкивает данные, как только они были прочитаны, как описано выше. Но я не могу заставить его работать. Вот мой код

wifstream inputFile(FILE_PATH); 
    wstring line; 
    if(inputFile) 
    { 
     while(!inputFile.eof()) 
     { 

      std::getline(inputFile, line); 

      for(int i=0; i<line.length(); i+=2) 
      { 
       int id; 
       wchar_t regex; 
       wstringstream(line)>>id; // doesn't work as it keep getting the same number 
       wstringstream(line).get(regex); 

       cout << id << ", "; 
      } 
      cout << endl; 

     } 
     inputFile.close(); 
    } 

Я думаю, что причина не работает в том, что я не использую поток должным образом, и он продолжает чтение идентификатора при первом индексе и не прогрессировать независимо от того, сколько раз Я использую >> (возможно, это не правильный способ использовать его в любом случае), я также попытался использовать wifstream.

Как я могу обойти это?

ответ

1

Каждый раз, когда вы его используете, вы воссоздаете wstringstream. Переместите создание вне цикла:

wifstream inputFile(FILE_PATH); 
wstring line; 
if(inputFile) 
{ 
    while(!inputFile.eof()) 
    { 

     std::getline(inputFile, line); 

     wstringstream istring(line); 
     for(int i=0; i<line.length(); i+=2) 
     { 
      int id; 
      wchar_t regex; 
      istring>>id; 
      istring.get(regex); 

      cout << id << ", "; 
     } 
     cout << endl; 

    } 
    inputFile.close(); 
} 
+0

OMG, это такая глупая ошибка! Спасибо! – ryf9059

Смежные вопросы