2016-05-31 8 views
1

私はDVDレンタルストアを管理するのに役立つこのプログラムで作業しています。私がしなければならないことは、DVDなどに関する情報を含むテキストを取ることです:構造体へのファイルへのファイル

平均的な女の子;コメディー; PG; 2009;レジーナ・ジョージ; 12.07.2015;

Conjuring;ホラー; R; 2013;サラ・ジョンソン; 16.05.2016;

ポケモン2000;子供たち; G; 2000年; Ash Katchem; 15.04.2016; など。

そして、この情報を受け取り、その配列にそれを読み込み、そこから配列を構造体に読み込まれ、その後、そのように適切な順序で表示: 名前:ミーン・ガールズ ジャンル:コメディー 評価: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; 

} 

だから私がやりたいものにテキストファイルを読んだことがありますそこからArrayを構造体に読み込みます。だから、テキストファイルをベクトルに読み込む代わりに、配列に読み込む必要があり、そこから配列の最初の行(dvdArray [1])をstruct dvdに読み込み、その情報をprint関数を使って出力してからループします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 ; 
} 
関連する問題