我有这样的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)。还有其他方法可以替换这里的值吗?有一个简单的方法吗?
答案 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 << ';';
}
}
}
}