我有这个.csv文件。它有6列(以逗号分隔)和许多行。我想制作一个3D矢量,使每行都在一个矢量中,所有行都在3D矢量中。
到目前为止我的代码:
// open a file in read mode.
ifstream csv("test.csv");
string line;
vector <string> lineV;
if (csv.is_open()) {
for (int i = 0; csv.good(); i++)
{
getline(csv, line, ',');
lineV.push_back(line);
}
}
else {
cout << "Unable to open file";
}
// close the opened file.
csv.close();
现在,我有了这个矢量lineV,其中.csv文件中的所有值都用逗号分隔,如下所示:
row1column1
row1column2
row1column3
row1column4
row1column5
row1column6
row2column1
......等等
我想过迭代遍历向量并在每第6个值之后将值传递给新向量,但我不知道如何开始。
或者,如果我将getline(csv, line, ',');
更改为getline(csv, line);
,我可以逐行获取:
row1column1,row1column2,row1column3,row1column4,row1column5,row1column6
row2column1,row2column2,row2column3,row2column4,row2column5,row2column6
......等等
但我仍然需要将每一行拆分为自己的矢量......
答案 0 :(得分:-1)
您可能更容易先按行(行)读取csv文件,然后使用std::istringstream
从每行中提取逗号分隔的实体。
// open a file in read mode.
std::ifstream csv("test.csv");
std::string line;
std::vector <std::vector<std::string>> items;
if (csv.is_open()) {
for (std::string row_line; std::getline(csv, row_line);)
{
items.emplace_back();
std::istringstream row_stream(row_line);
for(std::string column; std::getline(row_stream, column, ',');)
items.back().push_back(column);
}
}
else {
cout << "Unable to open file";
}