繁体   English   中英

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

[英]how do i read data from textfile and push back to a vector?

我有一个文本文件“ 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)

}

但是推送数据似乎有问题

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

但这不是 唯一的问题。 您的while (!infile.eof())也是错误的(实际上, while (!whatever.eof())本质上总是错误的)。 您通常想做的是在阅读成功后继续阅读。 whatever.eof()仅在您尝试进行读取并且开始读取之前到达文件末尾之后才返回true。

我通常会解决的方法是为您的Machine类定义流提取器:

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>> ),然后使用它来初始化machines向量。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM