IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Замена со смещением в бинарных файлах, найти определенное смещение и поменть.
volsub
сообщение 24.12.2007 23:00
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +



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

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

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

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

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

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

Заранее спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.12.2007 23:29
Сообщение #2


Гость






Цитата
Бинарный разбираем в типизированную запись (или нет?), а текстовый - в двумерный массив.
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;


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

Сообщение отредактировано: volvo - 24.12.2007 23:29
 К началу страницы 
+ Ответить 
volsub
сообщение 25.12.2007 2:14
Сообщение #3





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +


Цитата(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);


Правильно понимаю? о_О?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 25.12.2007 12:57
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Не совсем.
В операторе write должна быть переменная, а не константа. Но в переменной должно быть записано число 235.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volsub
сообщение 25.12.2007 13:28
Сообщение #5





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +


Цитата(andriano @ 25.12.2007 12:57) *

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


Спасибо, буду побывать сегодня вечером. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 7:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"