ifstream を使用してファイルから行を読み取った後、条件付きで、読み取ったばかりの行の先頭にストリームを戻す方法はありますか?
using namespace std;
//Some code here
ifstream ifs(filename);
string line;
while(ifs >> line)
{
//Some code here related to the line I just read
if(someCondition == true)
{
//Go back to the beginning of the line just read
}
//More code here
}
したがって、someCondition が true の場合、次の while ループの反復中に読み取られる次の行は、今読んだばかりの行と同じになります。それ以外の場合、次の while ループの反復では、ファイル内の次の行が使用されます。さらに説明が必要な場合は、お気軽にお問い合わせください。前もって感謝します!
更新 #1
だから私は次のことを試しました:
while(ifs >> line)
{
//Some code here related to the line I just read
int place = ifs.tellg();
if(someCondition == true)
{
//Go back to the beginning of the line just read
ifs.seekg(place);
}
//More code here
}
ただし、条件が真の場合、同じ行を再度読み取ることはありません。ここで整数は許容可能なタイプですか?
更新 #2: 解決策
私のロジックに誤りがありました。好奇心旺盛な人のために、私が望むように機能する修正版を次に示します。
int place = 0;
while(ifs >> line)
{
//Some code here related to the line I just read
if(someCondition == true)
{
//Go back to the beginning of the line just read
ifs.seekg(place);
}
place = ifs.tellg();
//More code here
}
前に読み取った行の先頭にシークする必要があるため、tellg() の呼び出しは末尾に移動されました。初めて tellg() を呼び出してから、ストリームが変更される前に seekg() を呼び出しました。皆様の貢献に感謝いたします。