我正在尝试读取一个csv文件,然后使用读取的内容创建对象。这些对象将形成一个链表。

当我在记事本中打开csv文件时,它看起来像这样:

名称,位置
鲍勃·史密斯(洛杉矶)
纽约乔·斯莫
通用名称,凤凰

我想跳过第一行(名称,位置),然后阅读其余内容。

现在,我的代码如下所示:

ifstream File("File.csv");

string name, location, skipline;

if(File.is_open())
{
    //Better way to skip the first line?
    getline(File, skipline, ',');
    getline(File, skipline);


    while (File.good())
    {
        getline(File, name, ',');


        getline(File, location);


        //Create new PersonNode (May not need the null pointers for constructor)
        PersonNode *node = new PersonNode(name, location, nullptr, nullptr);


        //Testing
        cout << node->getName() << " --- " << node->getLocation() << endl;

        //Add HubNode to linked list of Hubs (global variable hubHead)
        node->setNext(hubHead);
        hubHead = node;
    }
}
else
{
    cout << "Error Message!" << endl;
}

这似乎大部分都可以从文件OK中读取,但是有更好的方法跳过第一行吗?同样,当文件被打印出来时,最后一列的第二行被复制,因此看起来像这样:

输入:

名称,位置
鲍勃·史密斯(洛杉矶)
纽约乔·斯莫
通用名称,凤凰

输出为:

鲍勃·史密斯---洛杉矶
乔·斯莫-纽约
通用名称-凤凰
-凤凰

如果相关,则对象的构造函数将如下所示(将使用OtherNode,因为将涉及另一个链表,但我现在不必担心)。
PersonNode::PersonNode(string name, string location, Node *next, OtherNode *head) { PersonNode::name = name; PersonNode::location = location; PersonNode::next = next; PersonNode::OtherNode = OtherNode;}
感谢您的帮助,不胜感激。

最佳答案

我认为您不需要getline(File, skipline, ',');即可跳过第一行。
因为getline(File, skipline);已经跳过第一行

(documentation):

(1) istream& getline (istream& is, string& str, char delim);
(2) istream& getline (istream& is, string& str);

从is中提取字符并将其存储到str中,直到找到定界字符delim(或(2)的换行符'\ n')为止。

您需要getline(File, skipline, ',');才能在循环中获取值

10-01 00:12