Я анализирую файл, который содержит как строки, так и числовые значения. Я хотел бы обрабатывать файл поле за полем, каждый из которых разделен пробелом или символом конца строки.
Операция ifstream :: getline () допускает только один символ-разделитель. Таким образом, в настоящее время я делаю строку 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...
}
Однако «seekg», кажется, позиционирует поток на один символ слишком поздно (поэтому я пропускаю первый символ каждого поля перед каждым переводом строки).
Я знаю, что есть другие способы кодирования такого парсера, сканируя построчно и т. Д., Но мне бы очень хотелось понять, почему этот конкретный фрагмент кода не работает ...
Большое спасибо!