C++ 使用c+;从CSV文件数据写入数组时出现错误值+;
我创建了一个程序,它读取一个CSV文件,其中有两列,除第一行外,其余的行都是数值。读取后,它将值写入两个不同的数组(x[],y[])。我的问题是这个值读起来很完美,但是应该在x[0]的值是在x[-5],在x[0]有y[4]的值 下面是CSV文件中的数据C++ 使用c+;从CSV文件数据写入数组时出现错误值+;,c++,C++,我创建了一个程序,它读取一个CSV文件,其中有两列,除第一行外,其余的行都是数值。读取后,它将值写入两个不同的数组(x[],y[])。我的问题是这个值读起来很完美,但是应该在x[0]的值是在x[-5],在x[0]有y[4]的值 下面是CSV文件中的数据 Distance,Time 10,12 57,69 40,54 60,71 90,200 68,76 我尝试过不同的方法来解决这个问题,但没有一种有效。如果可能的话,请帮助我 #包括 #包括 #包括 使用名称空间std; int main()
Distance,Time
10,12
57,69
40,54
60,71
90,200
68,76
我尝试过不同的方法来解决这个问题,但没有一种有效。如果可能的话,请帮助我
#包括
#包括
#包括
使用名称空间std;
int main()
{
ifstream数据(“data.csv”);
int Count=0,x[Count+1],y[Count+1],a=0;//删除a=0时,它的行为不同
if(data.is_open())
{
弦线,第1行;
//第一排
getline(数据,行',');
cout而不是具有固定大小的int[]
。使用标准容器,如std::vector
。并使用push_back()
方法而不是x[Count]=value;
来代替
#include <vector>
// ...
std::vector<int> x,y;
// ...
x.push_back(stoi(line));
y.push_back(stoi(line1));
int Count = x.size(); //or y.size() as they should be same
#包括
// ...
std::向量x,y;
// ...
x、 推回(stoi(线));
y、 推回(stoi(线路1));
int Count=x.size();//或y.size(),因为它们应该相同
您还可以使用成对向量,而不是两个向量std::vector
或元组向量std::vector
还应添加一些错误检查…这里有一个使用std::istringstream
和std::vector
存储结果的解决方案。唯一真正的诀窍是用空格替换逗号,以便可以用std::istringstream
解析它
#include <fstream>
#include <vector>
#include <sstream>
//...
ifstream infile("Data.csv");
std::string line;
std::getline(infile, line);//skip header line
std::vector<std::pair<int, int>> coords;
while (std::getline(infile, line))
{
std::replace(line.begin(), line.end(), ',', ' ');//replace ',' with space
std::istringstream iss(line);
int x, y;
if (!(iss >> x >> y)) {
break; // error in format
}
coords.emplace_back(x, y);
}
#包括
#包括
#包括
//...
ifstream infle(“Data.csv”);
std::字符串行;
std::getline(infle,line);//跳过标题行
std::向量坐标;
while(std::getline(infle,line))
{
std::replace(line.begin(),line.end(),',','');//用空格替换','
标准::istringstream iss(线);
int x,y;
如果(!(iss>>x>>y)){
break;//格式错误
}
坐标。向后放置(x,y);
}
您可能需要更好地处理实际代码中的格式错误情况。此外,如果需要,您还可以使标题可选(跳过第一行的错误)数组中的两个问题:首先C++没有,第二个数组大小固定,不能扩展。看起来你需要学习和学习。例如,你知道,你的数组的大小是1?如果你读了一本好书,你也应该学习。什么是<代码> x(5)< /C>?