Как вставить данные в начало файла CSV? - PullRequest
1 голос
/ 13 июля 2010

Как я могу вернуться в самое начало файла CSV и добавить строки?

(Я печатаю в файл CSV из C с помощью fprintf (). В конце печати тысяч строк (5 столбцов) данных я хотел бы вернуться к началу файла и вставить некоторые динамические данные заголовка (основанные на том, как все печаталось).

Спасибо.

Ответы [ 4 ]

5 голосов
/ 13 июля 2010

Из-за структуры файлов это более или менее невозможно.Чтобы выполнить то, что вы хотите:

  1. записать данные CSV в файл1
  2. записать заголовок в файл2
  3. скопировать содержимое файла1 в файл2
  4. удалить файл1

Или вы можете сохранить данные CSV в оперативной памяти и записать их в файл после того, как закончите обработку и узнаете заголовок.

Другой вариант - отложить определенныйколичество байтов для заголовка, которое будет работать намного быстрее для больших файлов при минимальных затратах пространства.Поскольку в начале записи в файле выделяется место, проблем с возвратом и заполнением нет. Возобновите файл как произвольный доступ («r +»), который по умолчанию указывает на верхнюю часть файла., напишите заголовок и закройте.

2 голосов
/ 13 июля 2010

Самый простой способ - просто сохранить все содержимое файла в памяти до тех пор, пока вы не закончите, запишите заголовок, а затем запишите остальную часть файла.

Если проблема с памятьюи вы не можете безопасно хранить весь файл в памяти, или просто не хотите, тогда вы можете записать большую часть данных CSV во временный файл, затем, когда вы закончите, записать заголовок на основнойфайл и скопируйте данные из временного файла в первичный файл в цикле.

Если вы хотите проявить фантазию, после записи основных данных CSV в первичный файл вы можете перебрать файл изсначала прочитайте в память данные, которые вы собираетесь перезаписать заголовком, затем запишите заголовок поверх этих данных и т. д., прочитайте каждый блок в память, перезапишите его предыдущим, пока не дойдете до концаи добавить последний кусок.Таким образом, вы «вставляете» данные в начале, а я перемещаю остальную часть файла вниз.Я действительно не рекомендовал бы это, поскольку это будет в основном просто добавлять сложность без особой выгоды, если только нет особой причины, по которой вы не можете сделать что-то попроще, например, использование временного файла.

1 голос
/ 13 июля 2010
  • написать достаточно пробелов в первой строке
  • запись данных
  • искать (0)
  • заголовок записи - последний столбец будет дополнен пробелами
1 голос
/ 13 июля 2010

Я думаю, что это невозможно.Вероятно, самым простым способом было бы записать вывод во временный файл, затем создать необходимые данные в качестве динамического заголовка, записать их в целевой файл и добавить ранее созданный временный файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...