C ++使用分隔符逐行读取文件并将数据存储到列表中

时间:2015-12-14 17:40:22

标签: c++ list file push-back

我有一个名为Task的类

//Attributes


int earliestStartingTime, earliestEndTime, latestStartingTime, latestEndTime, duration, differ;
char TaskPosition;
list<Task*> predecessors;
list<Task*> successors;


//Constructor

 Task::Task(char TaskPosition2, int duration, list<Task*> predecessors)
 {
      this-> TaskPosition = TaskPosition2;
      this -> duration = duration; 
      for(list<Task*>::iterator it = this-> predecessors(); it != this->predecessors.end(); it++)
      {
           this-> predecessors.push_back(*it);
      }
  }

我正在尝试逐行读取文件并将数据存储到列表任务中。

在文件中,数据存储为

A(3)

B(4),A

C(2),A

E(5),A

G(3),A

Ĵ(8),B,H

H(7),C,E,G

I(6),G

F(5),H

M(4),我 ...

我希望能够将它们添加到Task列表中,如下所示

任务(char TaskPosition,int duration,list predecessors) 例如:

A是任务位置

3是持续时间

没有前辈

B是任务位置

4是持续时间

A是前身

... J是任务位置

8是持续时间

B,H是J

的前身

等等。

我稍后会对该列表应用一些计算,例如,从A到Z等的最短路径是什么......

但我仍然坚持阅读文件并将其添加到列表中。

这是我到目前为止所拥有的。

   int _tmain(int argc, _TCHAR* argv[])

   {
    string line;
    list< Task>* allTask  = new list<Task>;

    const string file = "Test01.txt";  // text file


    ifstream file;

    if(file.is_open())
    {
       while(getline(file, line, ','))
       {
           allTask.push_back(line);     
        }
    }
 }

这一行

    allTask.push_back(line);    

给我一​​条错误消息

  the lest side of .push_back must have class/struct/union

所以我不知道该怎么办。任何人都可以请帮我弄清楚如何阅读文件请将数据添加到列表中。

谢谢

2 个答案:

答案 0 :(得分:1)

allTask是一个指针,因此您必须使用->直接使用成员函数。虽然没有理由将allTask作为指针,但不要改变它。你可以简单地使用

list< Task> allTask;

现在allTask是一个自动对象,您可以使用.来调用它的成员函数。

答案 1 :(得分:0)

您可能会很好地阅读并可能使用序列化反序列化库。这将完全符合您的要求,它将让您深入了解如何以传统方式进行操作。