Как заменить строку в середине текстового файла на C?

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

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

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

Программа компилируется и запускается, но когда дело доходит до замены информации в файле, она просто ничего не делает.

Как мне решить проблему?


person PTt    schedule 23.05.2011    source источник
comment
Разместите код. Но в целом вы просто не можете этого сделать, если в файле не используются записи фиксированной длины.   -  person    schedule 23.05.2011
comment
Используйте базу данных вместо плоских файлов.   -  person zellio    schedule 23.05.2011
comment
r означает не «заменить», а «прочитать».   -  person user unknown    schedule 23.05.2011


Ответы (1)


Программа может заменять (перезаписывать) текст в середине файла. Но вопрос в том, нужно ли это делать.

Чтобы вставить текст большего или меньшего размера (и закрыть пробел), необходимо записать новый текстовый файл. Предполагается, что файл не имеет фиксированной ширины. Основное правило - скопировать весь исходный текст перед вставкой в ​​новый файл. Напишите новый текст. Напоследок напишите оставшийся исходный текст. Это большая работа, которая замедлит работу даже самых простых программ.

Я предлагаю вам разработать макет данных, прежде чем идти дальше. Также рассмотрите возможность использования базы данных, см. Мой пост: В какой момент стоит использовать базу данных?

Ваша цель - спроектировать данные так, чтобы минимизировать дублирование и выборку данных.

person Thomas Matthews    schedule 23.05.2011