来自csv文件的C ++ 2D Vector

时间:2016-10-23 04:08:11

标签: c++ csv vector

我有这个.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

     

......等等

但我仍然需要将每一行拆分为自己的矢量......

1 个答案:

答案 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";
}