问题描述:
我是从一个文件中读取数据:如何使用任何流上的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();
}
OMG就是这样一个愚蠢的错误!谢谢! – ryf9059 2013-02-23 15:39:48