从.csv文件读取到具有未知#行/列的字符串向量中

时间:2018-06-20 19:53:29

标签: c++ string visual-studio csv vector

我正在从Excel文件中读入字符串向量的向量。但是,我的示例excel文件的第一行有12列,当我尝试使用while(getline(file,line,'\n'))在while循环中将该行读入单个字符串时,它将获得大部分内容,但在字符串末尾以“ ...”结尾

我假设这是因为字符串无法容纳更多信息。我尝试的一种解决方法是简单地使用while (getline(file, line,','))并将每一列中的每个元素保存在其向量的相应索引中。这种方式实际上对我来说更好,因为无论如何我都必须这样做,所以我不妨从开始做起。但是...这样做很复杂,因为我无法知道指针何时移至下一行。不知道何时在行尾,我不可能将每个元素都放在向量的正确索引中。我怎么知道指针何时位于行尾或是否有其他方法来解决此问题?

这是C ++语言

vector<vector<string>> list;
int size; //number of columns
while(getline(file,line,','))
{
vector<string> test;
list.push_back(test);
list[i%size].push_back(line)
}

1 个答案:

答案 0 :(得分:1)

我认为您可以尝试使用std :: stringstream拆分逗号。 这是用于将csv文件读取为2D向量的示例代码:

vector<vector<string>> list;    
ifstream file("myfile.csv");
while(file){
  string line;
  if(!getline(file,line)) break;

  istringstream ss(line);
  vector<string> words;

  while(ss){
    string s;
    if(!getline(ss, s, ',')) break;
    words.push_back(s);
  }
  list.push_back(words);
}

测试:

for(size_t row = 0, maxrow = list.size(); row < maxrow; row++)
{
    for (size_t col = 0, maxcol = list[row].size(); col < maxcol; col++)
        cout << list[row][col] << ", ";
    cout << "\n";
}