c++ - 如何使用 wstring 上的任何流来提取数据

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

我该如何解决这个问题?

最佳答案

每次使用时,您都在重新创建 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();
}

关于c++ - 如何使用 wstring 上的任何流来提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15042142/

相关文章:

c - strstr 函数不返回 NULL

java - 如何在java中的正则表达式模式末尾分割字符串

c - 如何检查我的字符字符串是否有空格?

c++ - 使用运算符 << 将 std::strings 插入 vector 中

单个对象上的 c++ unordered_map 迭代器

c++ - Boost ASIO套接字消耗从未清除的文件描述符

c++ - 基于输入文件的未知大小数组

c++ - 如何将源代码中的长字符串拆分为多行以提高 C++ 的可读性?

android - 中断 HttpURLConnection 请求 Android

java - 来自一个 Kafka 主题源的并发 Spark 流作业