Я пытаюсь читать из специально отформатированного текстового файла для поиска определенных имен, номеров и т. Д. В этом случае я хочу прочитать первое число, затем получить имя и перейти к следующей строке.Моя проблема, кажется, с условием цикла while для чтения файла построчно.Вот пример формата файла txt:
5-Jon-4-Vegetable Pot Pie-398-22-31-Tue May 07 15:30:22
8-Robb-9-Pesto Pasta Salad-143-27-22-Tue May 07 15:30:28
1-Ned-4-Vegetable Pot Pie-398-22-31-Tue May 07 15:30:33
Я покажу вам два решения, которые я пробовал: одно, которое пропускает первую строку в файле, а другое, которое не принимает самоПоследняя линия.Я попробовал типичное время (! IFile.eof ()) в качестве последней попытки, но ничего не получил.
transactionLog.clear();
transactionLog.seekg(0, std::ios::beg);
std::string currentName, line, tempString1, tempString2;
int restNum, mealNum;
bool nameFound = false;
int mealCount[NUMMEALS];
std::ifstream in("patronlog.txt");
while(getline(in, line))
{
getline(in, tempString1, '-');
getline(in, currentName, '-');
if(currentName == targetName)
{
if(getline(in, tempString2, '-'))
{
mealNum = std::stoi(tempString2);
mealCount[mealNum - 1] += 1;
nameFound = true;
}
}
Мне кажется, я понимаю, что происходит в этом.«Getline (in, line)» полностью занимает первую строку, и, поскольку я не использую его, он по сути пропускается.По крайней мере, он берет первое число, затем имя и затем выполняет операции правильно.Ниже приведена модификация кода, который, как я думал, исправит это.
while(getline(in, tempString1, '-'))
{
getline(in, currentName, '-');
// same code past here
}
Я рассчитывал изменить условие цикла while на фактический getline первого элемента в текстовом файле, но теперь, когда япосмотрите на это через отладчик, во втором цикле он устанавливает tempString1 в "Vegetable Pot Pie", а не в следующее имя в следующей строке.По иронии судьбы, эта строка отлично подходит для строки № 1, но не для остальной части списка.В целом я чувствую, что это сделало меня дальше от моего предполагаемого поведения, чем раньше.