首页 > 解决方案 > C++ CSV 获取线

问题描述

我在 csv 文件中有一列浮点数。没有列标题。

string val;
vector<float> array;

string file = "C:/path/test.csv";

ifstream csv(file);
if (csv.is_open())
{
    string line;
    getline(csv, line);

    while (!csv.eof())
    {   
        getline(csv, val, '\n');
        array.push_back(stof(val));
    }

    csv.close();

}

我想将列中的值推送到 vector array。当我','用作分隔符时,它会将第一行推到数组中,但列的其余部分会粘在一起并且不可推。如果我使用'\n'它不会返回第一行并且我得到一个stof错误。

我尝试了其他答案没有成功。在这里格式化的正确方法是什么?

测试.csv

在此处输入图像描述

标签: c++csv

解决方案


您的原始test.csv数据可能如下所示:

1.41286
1.425
1.49214
...

所以没有逗号,使用,as '(line) separator' 会读取整个文件并只解析第一个浮点数(直到第一个\n)。

此外,第一行被读取但从未使用过:

getline(csv, line);  // <- first line never used

while (!csv.eof())
{   
    getline(csv, val, '\n');
    array.push_back(stof(val));
}

由于只有一个字段,您不必使用分隔符,并且正如评论中已经提到的那样,使用while(getline(...))是正确的方法:

if (csv.is_open())
{
    string line;

    while (getline(..))
    {   
        array.push_back(stof(val));
    }

    csv.close();
}

推荐阅读