如何使用任何流上的wstring使用wifstream

txt文件看起来像这样来提取数据

问题描述:

我是从一个文件中读取数据:如何使用任何流上的wstring使用<code>wifstream</code></p> <p>txt文件看起来像这样来提取数据

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

,每个数字都是我需要为我的节目的ID和逗号分隔 这里是我的代码

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(); 
    } 

我认为它不工作的原因是,我不使用流得当,它保持了最初的索引读取ID和永远不会进步,无论多少次我用>>(反正可能不是正确的方法),我也试过wifstream,也没用。

我该如何解决这个问题?

您每次使用时都重新创建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 2013-02-23 15:39:48