重写与添加到c++中已读csv文件的末尾

Overwriting vs. adding to the end of read csv files in c++

本文关键字:文件 csv 添加 c++ 重写      更新时间:2023-10-16

我正在尝试编写一个程序,在该程序中,我可以读写已经创建的csv文件。其中一些会被新数据覆盖,而另一些则只是添加到文件的末尾。我打开文件使用:

ifstream file;
file.open("")

然后我阅读文件并进行必要的计算。我只是不知道如何用我需要的两种方式回写这个文件。我对编程比较陌生,所以最简单的答案是最好的。

我能想到这两个方便的函数。

您可能希望typedef某些类型。

/*Read CSV using a vector of vector of string */
std::vector<std::vector<std::string> >  loadCSV(std::istream &input){
  std::string csvLine;
  std::vector<std::vector<std::string> > data;
  while( std::getline(input, csvLine) ){
    std::istringstream csvStream(csvLine);
    std::vector<std::string> csvRow;
    std::string csvCol;
    while( std::getline(csvStream, csvCol, ',') )
      csvRow.push_back(csvCol);
    data.push_back(csvRow);
  }
  return data;
}
/*Modify Data by accessing  elements of data[row][col]*/
/*Add new data using push_back ref. loadCsv function */
/* Finally update */
 void saveCSV(std::ostream &output,const std::vector<std::vector<std::string> >& data){
  if(!data.size())
    return;
  std::vector<std::vector<std::string> >::const_iterator i=data.begin();
  for(; i != data.end(); ++i){
    std::vector<std::string> row =*i;
        if(!row.size())
            continue;
    std::vector<std::string>::const_iterator j=row.begin();
    output<<*(j++);
    for(;i != row.end();++j)
        output<<','<<*j;
    output<<std::endl;
  }
}