Чтение из файла до появления определенной строки, невозможно создать цикл - PullRequest
0 голосов
/ 11 декабря 2018

Мой входной файл:

Title: Titanic
17:40 hall 1
19:20 hall 7
20:20 hall 1
Title: To Kill a Mockingbird
14:10 hall 3
15:50 hall 3
18:25 hall 8
20:30 hall 2
Title: The Silence of the Lambs
19:30 hall 5
20:50 hall 4
22:10 hall 3

Мой код:

const std::string filename = "schedule.txt";
std::string movieName, movieTime, movieHall;
std::ifstream file (filename);
if (file.is_open()) {
        getline(file, movieName);
        file >> movieTime >> movieHall; 
    file.close();
}
else
    std::cout << "unable to open file";

Я не знаю, как создать цикл, который бы сохранял каждый movieTime и movieHall для каждого фильма изатем перейдите к другому фильму и его фильму Time / movieHall.Я попытался с помощью find, но программа находит первый «заголовок», а затем просто сохраняет все случайным образом во времени и зале, не останавливаясь на другом заголовке, чтобы прочитать его с помощью getline.

EDIT Решил мою проблему сstd::istringstream

const std::string filename = "schedule.txt";
std::string movieName, movieTime, movieHall, read;
std::ifstream file (filename);

if (file.is_open()) {
    while(getline(file, read)){

        std::istringstream iss(read);
        std::string phrase;

        if( std::getline(iss, phrase, ' ') ){
            if(phrase == "Title")
            {
                std::cout << read << std::endl;
            }
            else
            {
                file >> movieTime >> movieHall;
                std::cout << movieTime << " " << movieHall << std::endl;
            }

        }
    }
    file.close();
}
else
    std::cout << "unable to open file";

Спасибо (еще раз) @ Фуберт

1 Ответ

0 голосов
/ 11 декабря 2018

Попробуйте: заголовки начинаются с заголовка: поэтому не читайте всю строку - просто прочитайте первую строку, а затем, если это заголовок: прочитайте оставшуюся часть строки в заголовке.И если это не Заголовок: тогда это время, поэтому вы можете сохранить его и прочитать остаток строки в зале.

#include <iostream>
#include <fstream>

int main()
{
    const std::string filename = "schedule.txt";
    std::string test, movieName, movieTime, movieHall;
    std::ifstream file (filename);
    if (file.is_open()) {
        while (file >> test) {
            // At this point test is either "Title:" or a movie time
            if (test == "Title:") {
                // test is "Title:" so we need to save the movie title
                std::getline(file, movieName);
                std::cout << "\nMovie:" << movieName;
            } else {
                // test is a movie time so save that movie time and then read the movie hall
                movieTime = test;
                std::getline(file, movieHall);
                std::cout << ", " << movieTime << movieHall;
            }
        }
        file.close();
    }
    else
        std::cout << "unable to open file";

    return 0;
}

Вы можете попробовать это онлайн здесь: https://onlinegdb.com/By--4j6JV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...