0

を使用してファイルからデータを読み取っていました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();
}

このコードは完全に正常に機能します。一度に1行を読み取る読み取りスキームを変更するまでは、ストリームのバッファーがデータを1回ポップしている間に行からデータを読み取ることができるように、その行で同様のことを実行したいと考えていました。上記のように読まれています。しかし、私はそれを機能させることができません。これが私のコードです

    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ましたが、どちらも使いません。

これをどうやって回避するのですか?

4

1 に答える 1

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();
}
于 2013-02-23T15:37:21.400 に答える