2017-12-06 40 views
-2

データがセミコロンで区切られたファイルからデータを読み込もうとしています。例:データをtxtファイルからC++の構造体のベクトルに読み込む

ロードオブザリング:旅の仲間;ジャクソン、ピーター; 2001; 178;9300万; 871530324

上記はすべて一つのエントリです。ファイルの最初の行には、エントリ数を示す番号もあります。各エントリは異なる行にあります。私はこのデータをinfoという構造体のベクトルに読み込もうとしています。構造体の名前はMovieDataです。

vector<MovieData> readFile(string fName,MovieData info, int& numOfMovies){ 
    vector<MovieData> movies; 
    ifstream fin; 
    fin.open(fName); 

    fin >> numOfMovies; 
    cout << "Number of Movies: " << numOfMovies << "\n"; 

    for(int i=0;i<numOfMovies;i++){ 
     getline(fin, info.Title, ';'); 
     getline(fin,info.Dir, ';'); 
     getline(fin,info.year, ';'); 
     getline(fin,info.time, ';'); 
     getline(fin,info.cost, ';'); 
     getline(fin, info.revenue); 
     info.profit = info.revenue - info.cost; 
     movies.push_back(info); 
    } 

    return movies; 
} 

getline()を使用してファイルからデータを読み込む際に問題がありますが、私はそれ以外はすべて正しいと思います。

+0

あなたの問題は何ですか?フォーマットされた入力とgetlineを混在させるのが一般的な問題です。あなたが番号を読んだ後、あなたはバッファの行末の文字を残しました。あなたはおそらくそれを無視して、次の行を読み始めるでしょう。 –

+0

私はそれをコンパイルすることができません。 – zam1205

+0

あなたが受け取っているコンパイルエラーが助けになると思いますか?ここでヒントはありますが、文字列を引くことはできません。 –

答えて

-1

私はそれを考え出しました。いくつかのものを変更し、すべてが動作するようにした。ご協力いただきありがとうございます。

vector<MovieData> readFile(string fName, struct MovieData, int& numOfMovies){ 
    vector<MovieData> movies; 
    ifstream fin; 
    fin.open(fName); 

    fin >> numOfMovies; 
    cout << "Number of Movies: " << numOfMovies << "\n"; 

    for(int i=0;i<numOfMovies;i++){ 
     movies.push_back(MovieData()); 
     getline(fin, movies[i].Title, ';'); 
     getline(fin,movies[i].Dir, ';'); 
     fin >> movies[i].year; 
     fin.ignore(); 
     fin >> movies[i].time; 
     fin.ignore(); 
     fin >> movies[i].cost; 
     fin.ignore(); 
     fin >> movies[i].revenue; 
     fin.ignore(); 
     fin >> movies[i].profit; 
     movies[i].profit = movies[i].revenue - movies[i].cost; 

    } 

    return movies; 
} 
関連する問題