如何替换CSV文件中的值

时间:2014-09-15 11:04:41

标签: c++ csv

我有这样的CSV文件构建:

1;name;2;5;
2;diff_name;3;5;

我希望能够在阅读下一行之前用5替换5。 所以我正在阅读文件:

file>>number1;
file.ignore( numeric_limits < streamsize >::max(), ';' );
file>>data;

等等。而我试图用这种方式写它:

long pos = plik.tellp();
plik.seekp (pos-2);
plik<<other_number;

但它打破了文件。我不知道怎么做但不可靠。 pos以某种方式取决于文件长度,我不能每次都这样工作(文件中有不同的valuse)。还有其他方法可以替换这里的值吗?有一个简单的方法吗?

1 个答案:

答案 0 :(得分:0)

正如Joachim Pileborg在评论中所说,你不能真正(并且简单地)直接替换文件。解决方案是写入另一个文件。如果您的第一个文件足够小,您可以使用内存代替第二个文件,并将结果写入第一个文件。

我的代码:

#include <fstream>
#include <iostream>
using namespace std;

int main(){
  ifstream ifile("file.csv"); //First file
  ofstream ofile("filenew.csv"); //File with replaced fields
  char s[100];
  string temp;//useful for the replacement
  int count=0;//fields counter (useful for replacement)
  while(ifile.good()){
    ifile.getline(s, 100, ';'); //We read the file field by field
    count++;
    if(ifile.good()){
      if(count==3){ //The third field is stored in a temp variable
        temp = s;
      }
      else if(count==4){//And we put the fourth field before the third
        ofile << s;
        ofile << ';';
        ofile << temp;
        ofile << ';';
        count=0;
      }
      else{
        if(count==5)count=0;
        ofile << s;
        ofile << ';';
      }
    }
  }
}