文字列と数値の両方を含むファイルを解析しています。ファイルをフィールドごとに処理し、それぞれをスペースまたは行末文字で区切って処理したいと考えています。ifstream::getline() 操作では、区切り文字を 1 つだけ使用できます。したがって、私が現在行っているのは、文字「 」を区切り文字として使用した getline であり、「\ n」が検出された場合は、ストリーム内の前の位置に手動で戻ります。
ifstream ifs ( filename , ifstream::in );
streampos pos;
while (ifs.good())
{
char curField[255];
pos = ifs.tellg();
ifs.getline(curField, 255, ' ');
string s(curField);
if (s.find("\n")!=string::npos)
{
ifs.seekg(pos);
ifs.getline(curField, 255, '\n');
s = string(curField);
}
// process the field contained in the string s...
}
ただし、「シーク」はストリームを1文字遅すぎるように配置しているようです(したがって、各フィールドの最初の文字を各改行の前に見逃しています)。行ごとにスキャンするなど、このようなパーサーをコーディングする他の方法があることは知っていますが、この特定のコードが失敗する理由を本当に知りたいです...
どうもありがとうございました!