Читать из текстового файла с разделителем - PullRequest
0 голосов
/ 23 мая 2019

У меня есть текстовый файл с индексом учеников, который выглядит примерно так:

Anna Baker
Class 1B
Long description text about the student lorem ipsum dolor sit amet, consetetur sadipscing elitr.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr.
#####
Rick Bell
Class 2A
Long description text about the student lorem ipsum dolor sit amet.
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor.
#####
etc.

У меня есть ученик класса, и мне нужно извлечь информацию из текстового файла и поместить ее в объекты ученика,

class Student{
private:
  string name;
  string class;
  string description;
}

До сих пор имя и класс работали нормально, но я изо всех сил пытаюсь извлечь текст описания.«#####» служит разделителем.Я использую:

while (???){
   getline(inFile, word3);
   word3=word3.substr(0,word3.find(delimiter));
}

Мне нужен цикл while для чтения всех строк вплоть до разделителя, и я не могу найти правильное утверждение для него.Вы можете мне помочь?

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Вы можете использовать ifstream для чтения файла, с

std::ifstream student_file("file.txt");

Вы можете читать файл построчно используя

string info;
if(student_file.is_open()){
   while( getline(student_file, info) ) {
        if( info == "####")
           continue;
        else {
                //this is student info
        }
   }
}
0 голосов
/ 23 мая 2019

Быстрый просмотр ссылки cpp предполагает, что возвращаемое значение std :: string :: find равно std :: string :: npos, когда не foud. Таким образом, вы можете использовать что-то вроде

bool continue = true;
while (continue)
{
   getline(inFile, word3);
   continue = word3.find(delimiter)) == std::string::npos;
 //do something else
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...