【问题标题】:Reading a file ".txt" and assign the data of each line to a new Node in a Circular List C++ [duplicate]读取文件“.txt”并将每一行的数据分配给循环列表C++中的一个新节点[重复]
【发布时间】:2014-11-07 04:38:06
【问题描述】:

我正在使用 C++ 开发一个项目,我被要求读取一个 txt 文件并将数据分配给一个节点。 文本文件是:

雅妮, 19, 1993, 12345

奥斯卡, 20, 1994, 56789

我有结构列表:

struct List{
    string name;
    int age;
    int birth;
    int id;
    List *next;
    List *prev;
}

我的问题,如何将文本文件中的数据分配给节点,在这种情况下是两个节点,但是如果有更多行,它必须创建更多新节点?

我正在使用的部分代码:

#include <fstream>

struct List{
...
}

//Here I create the first Node and:
aux=head;
ifstream file ("file.txt");
file >> aux->name >> aux->age >> aux->birth >> aux-> id;

如果文本文件中没有逗号,则可以正常工作,但逗号会到处出错。

另外,总结一下:) 如果文本文件有:

丹尼·沃森,1980 年 23 岁,58953

节点的名称必须是 Danny Watson,而不仅仅是 Danny :)

我希望你能帮助我!我会很感激的。

(对不起,我的英文不太好:()

【问题讨论】:

  • 逗号有什么错误?它们是否包含在结果中?
  • 是的,我不希望它们包含在“name”或“age”变量中,因为我必须使用另一个函数显示节点。提前致谢。
  • 您可以尝试在 StackOverflow 中搜索“c++ 读取文本文件列表”以获取大量示例。
  • 糟糕,您正在阅读“逗号分隔值”文件,因此您需要在 StackOverflow 中搜索“C++ 读取文件 csv”并查看涉及文本字段的结果。我之前的建议是针对非 csv 文件(例如使用制表符)。
  • 谢谢@Thomas,这是一位朋友对我说的,要查找 CSV 文件,但我完全是初学者,几乎不了解所使用的语法。该任务说它必须是一个结构列表,并且必须将变量分配给一个节点。新行用于另一个新节点。在 StackOverflow 中搜索“C++ 读取文件 csv”对我有帮助吗? :) 再次感谢您!

标签: c++ stream codeblocks fstream ifstream


【解决方案1】:

问题在于输入运算符&gt;&gt; 读取的是空格 分隔的“单词”。这意味着像"Danny Watson" 这样的输入将被读取为两个单独的单词。

相反,我建议您使用std::getline 将整行读入stdstring,然后使用std::getline 再次std::istringstream 来获取逗号分隔的值。请记住在需要时去除前导(和可能的尾随)空格。

类似这样的:

std::vector<List> myList;

std::string line;
while (std::getline(file, line))
{
    std::istringstream iss(line);

    List myEntry;

    // Read a comma-separated entry from the temporary input stream
    std::getline(iss, myEntry.name, ',');

    std::string temp;

    std::getline(iss, temp, ',');
    myEntry.age = std::stoi(temp);

    std::getline(iss, temp, ',');
    myEntry.birth = std::stoi(temp);

    std::getline(iss, temp, ',');
    myEntry.id = std::stoi(temp);

    myList.push_back(myEntry);
}

【讨论】:

  • 非常感谢!但我还有一个问题,任务说它必须是一个循环列表。那还能用吗?
猜你喜欢
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2015-10-03
相关资源
最近更新 更多