2016-05-31 2 views
1

Я работаю над этой программой, которая поможет управлять магазином аренды DVD. Мне нужно сделать текст, содержащий информацию о DVD и т. Д .:Файл в массив для построения

Средние девочки; комедии; PG; 2009; Регина Джордж; 12.07.2015;

The Conjuring; Ужастик; Р; 2013; Сара Джонсон; 16.05.2016;

Pokemon 2000; Дети; Г; 2000; Эш Катхем; 15.04.2016; и т.д ..

А потом берет эту информацию, а затем считывает его в массив, а оттуда массив считывается в структуры, а затем отображаются в правильном порядке, например, так: Имя: Mean Girls Жанр: Comedy Рейтинг : PG

и т.д ...

Это мой код до сих пор:

#include <iostream> 
#include <string> 
#include <fstream> 
#include <vector> 
using namespace std; 

struct dvd{ 
     string name; 
     string genre; 
     string rating; 
     string released; 
     string renter; 
     string rentday; 

     void print(); 
     bool read(ifstream & file); 

}; 

void dvd::print(){ 
     cout <<"Title: " << name << endl; 
     cout <<"Genre: " << genre << endl; 
     cout << "Rating: " << rating << endl; 
     cout << "Release date: " << released << endl; 
     cout << "Name of renter: " << renter << endl; 
     cout << "Date rented: " << rentday << endl; 
    } 
bool dvd::read(ifstream & file) 
{ 
    getline(file, name, ';'); 
    getline(file, genre, ';'); 
    getline(file, rating,';'); 
    getline(file, released, ';'); 
    getline(file, renter, ';'); 
    getline(file, rentday, ';'); 
    return file.good(); 
} 
int main() { 
    vector<dvd> dvds; 
    dvd   dvd1; 
    ifstream file("DVD.txt"); 

    if(! file.is_open()){ 
     cout << "Failed to find input file" << endl; 
     return 1; 
    } 
    while(dvd1.read(file)) 
    { dvds.push_back(dvd1); 
    } 

    dvd1.print(); 


return 0; 

} 

так что я хотел бы сделать, это прочитать текстовый файл в массив и оттуда читаем массив в структуру. Поэтому вместо чтения текстового файла в вектор мне нужно его прочитать в массиве и оттуда прочитать первую строку массива (dvdArray [1]) в struct dvd, а затем распечатать эту информацию с помощью функции печати, а затем закодировать ее пока dvdArray [10] не будет прочитан в struct dvd!

Большое вам спасибо за помощь! :)

ответ

1

Изменить

bool dvd::read(ifstream & file) 

в

bool dvd::read(istream & file) 

Никаких других изменений в его содержание не требуется.

Затем, возьмите каждую линию и положите ее в std::istringstream, затем передайте ее на dvd::read.

Вы должны быть в состоянии выяснить остальное самостоятельно.

+0

Хорошо, таким образом я получил текстовый файл для чтения в массив, но я не могу показаться, чтобы выяснить, как читать это в dvd :: read при печати каждой информации dvd –

+0

Как я писал: постройте 'std :: istringstream' из заданной строки, а затем просто передайте ее. –

0

Для простого чтения и записи в файл я предлагаю перегрузить << и >> для вашего класса struct, чтобы сделать код легко сериализованным и де-сериализованным в удобочитаемом виде.

friend std::ostream& operator<< (std::ostream& stream, const dvd& dvdObj) 
{ 
    // your output stuff 
    // stream <<"Title: " << dvdObj.name << endl; 
    // ... 
    return stream; 
} 

friend std::istream& operator>> (std::istream& stream, dvd& dvdObj) 
{ 
    // your output stuff 
    // getline(stream, dvdObj.name, ';'); 
    // ... 
    return stream; 
} 

Затем

// look for std::copy for reading directly into vector ... else 
while(file >> dvd1) 
{ 
    dvds.push_back(dvd1); 
} 

И

for(const auto& dvd1: dvds) 
{ 
    std::cout << dvd1 ; 
} 
Смежные вопросы