首页 > 解决方案 > 从csv文件c ++读取时stoi抛出错误

问题描述

我需要帮助尝试从 csv 文件中读取数据。

我的 csv 的布局如下


1 鲍勃 1 2 11 3 4 5 6 6

2 简 2 2 11 3 4 5 6 6

等等

这就是我试图从中读取的方式

std::ifstream file;
    Data d;
    std::vector<Data> values;
    std::string number, name;
    file.open("Data-Organisation-Test1.csv");
    while (file.good())
    {
        getline(file,number,',');
        getline(file,name,',');
        //std::cout<< typeid(number).name();
        int num = stoi(number);
        d.num = num;
        d.name = name;
        // go through all fields
        values.push_back(d);
        
        
    }

我面临的问题:

使用 stoi() 时出现以下错误

terminate called after throwing an instance of 'std::invalid_argument'
  what():  stoi

当我输出变量编号的数据类型时,它会返回“s”,其次是因为我不确定我是否正在努力实现我想要实现的目标。

这就是我想要实现的目标:

struct Data{
int number;
std::string name;
 // ...
}

read from csv file and get reach column and place into struct ie:
getline(file,number,',');
getline(file,name,',');
d.number = number;
d.name = name;
 ...

我也得到 3 的返回值

编辑:这是我最接近它的工作

while (!inFile.eof()) {
    getline ( inFile, number, ',' );
    getline ( inFile, name, ',' );
    getline ( inFile, mark, ',' );
    getline ( inFile, raw, ',' );
    std::cout << "number: " << number <<  std::endl;
    std::cout << "name: " << name<<  std::endl;
    std::cout << "mark: " << mark<<  std::endl;
    std::cout << "raw: " << raw<<  std::endl;
}

这对第一行输出正确,并且每隔一行关闭一个,即:

输出:

number: 1 
name: A
mark: 2
raw: 13
2
number: b
mark: 3
raw: 14
3
weight: c
number: 4
name: 11

标签: c++csv

解决方案


推荐阅读