Помощь - Поиск - Пользователи - Календарь
Полная версия: Замена со смещением в бинарных файлах
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
volsub

Добрый вечер.

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

=======================================================
Задание:
Написать программу, которая принимает на вход текстовый файл , состоящий из строк вида "смещение значение" и в заданном бинарном файле изменяет байты по этим смещениям на эти новые значения.

Например, если текстовый файл имеет вид:
1556 235
1642 90
1643 90
1644 90
то значит, что в бинаррнике надо поменять 4 байта-один по смещению 1556 заменить на 235 и три, начиная со смещения 1642, заменить на 90.
=======================================================

Насколько я понимаю тут две части - открываем два файла. Бинарный разбираем в типизированную запись (или нет?), а текстовый - в двумерный массив. Потом идем по массиву и осуществляя переход со смещением - меняем - байты. Только как?

Есть идеи? о_О? Может, где посмотреть?

Заранее спасибо!
volvo
Цитата
Бинарный разбираем в типизированную запись (или нет?), а текстовый - в двумерный массив.
blink.gif Это зачем? Просто открываешь бинарник как file of byte, идешь по текстовому файлу:

while not eof(f) do begin
read(f, offset, new_val);
{ и сразу меняешь данные в бинарном файле }
seek(f_bin, offset); write(f_bin, new_val);
end;


Не надо ничего предварительно разбирать...
volsub
Цитата(volvo @ 24.12.2007 23:29) *

blink.gif Это зачем? Просто открываешь бинарник как file of byte, идешь по текстовому файлу:

while not eof(f) do begin
read(f, offset, new_val);
{ и сразу меняешь данные в бинарном файле }
seek(f_bin, offset); write(f_bin, new_val);
end;


Не надо ничего предварительно разбирать...

Спасибо, попробую... blum.gif Вот только вопрос есть, если привязываться к условиям задачи - то в seek - f_bin - это файл, а offset - это куда нужно перейти - т.е. для первой строчки условий:

seek(f_bin,1556); write(f_bin, 235);


Правильно понимаю? о_О?
andriano
Не совсем.
В операторе write должна быть переменная, а не константа. Но в переменной должно быть записано число 235.
volsub
Цитата(andriano @ 25.12.2007 12:57) *

Не совсем.
В операторе write должна быть переменная, а не константа. Но в переменной должно быть записано число 235.


Спасибо, буду побывать сегодня вечером. smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.