2011-09-30 6 views
0

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

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

Итак, если баланс составляет 1000 (4 цифры), я могу перезаписать его другой 4-значной строкой. Но если новая строка баланса составляет более 4 цифр, она перезаписывает данные после поля баланса (это простой текстовый файл, который вы ...). Например, если текстовый файл содержит

Acc. No.   balance 
123456   100 
123567   2500 

Поля разделяются TAB «\ г» символ, а следующая запись отделяется символом новой строки «\ п». Если я ввожу новый депозит 200000. за счет 123456, функция FWRITE() записывает данные в текстовом файле, как ...

Acc. No   Balance 
123456   2001003567   2500 

Вы можете заметить, что «\ п» после поля баланса и 2 цифры из следующих учетных записей в соотв. нет. перезаписывается.

Конечно, никто не хочет, чтобы это произошло :) Что мне нужно, это способ вставки текст в этом файле, а не только перезаписать его. Есть много результатов этого, используя Java, python или даже SED, но ничего не использует потоки FILE. Пожалуйста, поделитесь своими мыслями ... спасибо.

ответ

0

Если вы действительно хотите, чтобы управлять данными в обычном текстовом файле:

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

Системы баз данных были изобретены для таких целей. Поэтому я рекомендую управлять вашими данными в таблице базы данных и динамически создавать текстовый отчет по мере необходимости.

+0

Но разве это не приведет к потере исходной даты изменения файла/создания? Я имею в виду, это не проблема для меня, но для систем баз данных должна быть нужна такая информация, верно? – aditya

+0

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

+0

Как _Vanje_ advised, я создал временный файл, отредактировал его, а затем удалил оригинал. Мне это не понравилось, но это сработало :). Но да, я считаю, что подход к базе данных определенно более эффективен. Но все-таки wodering hoe _database_ делает это в первую очередь ..., они также должны использовать файлы. В любом случае ... thnks guys – aditya

1

Вам нужно будет перенести все данные после точки вставки на несколько байтов в первую очередь. Это то, что делают Java, sed или python, если они не пишут временный файл для начала.

+0

Вы имеете в виду, что я должен прочитать все данные в буфер, написать мои данные и затем записать все прочитанные данные в файл. Невозможно вставить данные между существующими данными? – aditya

+0

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

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