2010-07-13 3 views
1

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

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

Thank you.

ответ

5

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

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

Или вы можете держать данные csv в ram и записывать их в файл после завершения обработки и знать заголовок.

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

+0

выглядит как 2 файла - это единственный способ добавить данные динамического заголовка, спасибо. –

1

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

+0

творческий, приятный .... –

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

«пишите достаточно пробелов в первой строке» - это предполагает добавление заголовка в одну строку? –

+0

Нет, фактическое количество байтов, которое займет ваш заголовок. Это может охватывать столько строк, сколько вы хотите. –

+0

Это полезно, если он знает, сколько строк добавить. –

2

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

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

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

Смежные вопросы