我正在尝试读取一个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, ',');
才能在循环中获取值