Как заменить значение в файле CSV

0

У меня CSV файл выглядит так:

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

И я хотел бы иметь возможность заменить 5 на 2 перед прочтением следующей строки. Поэтому я читаю файл:

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

и так далее. И я пытался написать так:

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

Но он разбивает файл. Я не знаю, как, но это ненадежно. pos как-то зависит от длины файла, и я не могу заставить его работать каждый раз (с разными значениями в файле) таким образом. Есть ли другой способ заменить значение здесь? Есть ли простой способ?

  • 9
    Читайте все данные из файла построчно и записывайте все в другой файл, изменяя значение, которое вы хотите изменить. Затем переименуйте новый файл в старый (перезаписав его).
  • 0
    Вам нужно будет предоставить подробную информацию о том, что именно вы видите и что вы ожидаете увидеть вместо этого.
Теги:
csv

1 ответ

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 << ';';
      }
    }
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню