2017-01-02 54 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

現在,名稱將包含'「person:」'部分。在從流中讀取一行之後,您應該首先檢查此''person:''字符串,在匹配時檢索'name','age'和'gender',然後繼續讀取流中的行以放入向量中你擊中另一個包含「person:」的行。 – Unimportant

+0

在互聯網上搜索「stackoverflow C++讀取文件結構」。已經有很多問題和例子**從文本**文件**讀入**結構**。 –

回答

0

成功讀取文件的第一行並使用istringstream解析文件後,可以對其他行執行相同的操作。如果您確定一個文件包含一個人的信息,那麼您可以自由使用:

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

它應該是'while(![your_file] .good()){}' – Matthew