【问题标题】:How to read CSV file with C++ [duplicate]如何使用 C++ 读取 CSV 文件 [重复]
【发布时间】:2016-06-07 14:24:36
【问题描述】:

我有一个 csv 文件,每行包含以下信息:

John,Doe,17

ifstream 对象名称是 inFile 我试过了:

string firstName;
string lastName;
int age;
inFile >> firstName >> "," >> lastName >> "," >> age

但是,很明显,我做不到>> "," >>

如何正确获取这些值并使用它们?

谢谢。

【问题讨论】:

    标签: c++ parsing csv


    【解决方案1】:

    你可以这样做。

    string firstName;
    string lastName;
    int age;
    getline(inFile, firstName, ',');
    getline(inFile, lastName, ',');
    inFile >> age;
    

    如果要保持一致,可以对所有数据使用 getline(inFile, ..., ',') ,然后使用 std::stoi 将年龄转换为整数。或者你可以使用getline(inFile, Wholeline),然后在整行上使用sscanf。

    【讨论】:

    • 字符串临时变量; getline(inFile, tempVariable);字符串名;字符串姓氏;字符逗号;浮动年龄; while(inFile >> firstName >> comma >> lastName >> comma >> age { 你知道为什么它从不进入这个循环吗?我使用 getline() 跳过第一行
    • inFile >> firstName >> dummy >> lastName >> dummy >> age; - 这不起作用 - >>std::string 会消耗输入,直到下一个空格字符或流结束,所以 "John,Doe,17"firstName 结束.
    • @D.Lin 啊我没注意到你没有逗号前的空格。
    【解决方案2】:

    您需要使用字符串流并使用逗号作为分隔符将每一行读入流中。 见:this question and its answer

    【讨论】:

    • 问题是我的第一行是诸如“first, last, age”之类的标题,我怎么会考虑到不读那一行呢?
    • 跳过第一行怎么样?
    • 我不愿扩展我的答案,因为我觉得对一个人来说,尝试和解决手头的问题更有益,提供一些指导,而不是提供分步说明关于做什么。话虽如此,关于跳过一行,当你阅读它时,你不必对它做任何事情(提示)。
    • stringstream 不是必需的,因为 infile 是 istream 并且可以像 stringstream 一样使用大部分
    猜你喜欢
    • 2017-05-01
    • 2021-07-28
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多