我如何从文本文件中读取数据并推回向量?

时间:2013-01-27 06:47:49

标签: c++ vector ifstream getline

我有一个文本文件," test.txt"存储我的数据如下,每个分隔符字段之间有一个间距..

代码:姓名:Coy

045: Ted: Coy1
054: Red: Coy2

如何从文件中读取此数据并将其插入到矢量中?

vector <Machine> data;
Machine machine

void testclass(){
ifstream inFile("test.txt");
if (!inFile){
    cout << "File couldn't be opened." << endl;
    return;
}
while(!inFile.eof()){
    string code,name,coy;
    getline(inFile,code, ':');
    getline(inFile,name, ':');
    getline(inFile,coy, ':');
data.push_back(machine)

}

但是推送数据似乎有问题

2 个答案:

答案 0 :(得分:1)

正如其他人已经指出的那样,一个问题是您正在将数据读入局部变量(codenamecoy),但从未将这些值放入在将其添加到矢量之前machine

问题。您的while (!infile.eof())也是错误的(事实上,while (!whatever.eof())基本上总是错误)。您通常想要做的是在阅读成功时继续阅读。 {I} {}仅在您尝试执行读取后返回true,并且在读取开始之前已到达文件的末尾。

我通常会修复的方法是为Machine类定义一个流提取器:

whatever.eof()

使用此功能,您可以阅读以下内容:

class Machine { 
// ...

    friend std::istream &operator>>(std::istream &is, Machine &m) { 
        std::getline(is, m.code, ':');
        std::getline(is, m.name, ':');
        std::getline(is, m.coy, ":");
        return is;
    }
};

一旦为该类型定义了一个流提取器,就可以考虑另一种可能性了;你可以从一对迭代器初始化向量:

std::vector<Machine> machines;

Machine machine;

while (infile >> machine) 
    machines.push_back(machine);

...这将读取文件中的所有数据(使用我们上面定义的std::vector<Machine> machines((std::istream_iterator<Machine>(infile)), std::istream_iterator<Machine>()); )并使用它来初始化operator>>向量。

答案 1 :(得分:0)

您应该读取数据并将它们放入Machine类对象的成员变量中。然后将该对象放在Vector上。