如何在wstring上使用任何流来提取数据

时间:2013-02-23 15:26:56

标签: c++ string stream stringstream

我正在使用wifstream

从文件中读取数据

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,也没用。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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();
}