2017-01-02 5 views
0

にファイルから複数の行を読んで私は、次のテキストファイルのレイアウトを持っている:C++クラス

者:ユージン・サンドバル; 26;男性
レポーター
アーティスト
パーソン:ヨハンナ・ギブス; 34;女性
サーカスワーカー
映画プロデューサー
銀行店員

最初の行にはその人に関する情報があり、次の行は前の仕事です。

これは私が作ったクラスです。

#pragma once 

#include <string> 
#include <vector> 

class Person 
{ 
public: 
    Person() {}; 
    ~Person() {}; 

    std::string name; 
    std::string age; 
    std::string gender; 

    std::vector<std::string> previousJobs; 

    friend std::istream& operator >> (std::istream& is, Person& p) 
    { 
    std::string line; 
    std::getline(is, line); 
    std::istringstream iss(line); 

    std::getline(iss, p.name, ';'); 
    std::getline(iss, p.age, ';'); 
    std::getline(iss, p.gender, ';'); 

    return is; 
    } 
}; 

メイン:

int main() 
{ 
    std::vector<Person> people; 
    std::ifstream input_file("Resources/data.txt"); 

    Person p 

    while (input_file >> p) 
    { 
     people.push_back(p); 
    } 

    getchar(); 
    return 0; 
} 

は、これまでのところ私は、オブジェクトへの最初の行をsuccesfullの読んでいます。しかし、私は以前の仕事をベクターに読み込むことに苦労しています。

+1

これで 'name'にはperson:"部分が含まれます。ストリームから行を読み終えたら、まずこの文字列をチェックし、一致すると 'name'、' age'と 'gender'を取得し、ストリームから行を読み込み、ベクトルに入れるようにしてくださいあなたは '' person: "'を含む別の行にヒットします。 – Unimportant

+0

インターネットで "stackoverflow C++ read file struct"を検索します。すでに**テキスト**ファイル**から** struct **への** read ** ingの質問と例がたくさんあります。 –

答えて

0

ファイルの最初の行を読み込み、istringstreamを使用して解析すると、他の行と同じことができます。 1つのファイルに1人の人物に関する情報が含まれていることが確かな場合は、自由に使用することができます:

while (![your_file].eof()) 
{ 
    previousJobs.push_back(getline(is,line)); 
} 
+0

これは 'while(![your_file] .good()){}'にする必要があります。 – Matthew