Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2016, 15:55   #1
nikitin.leha-201
Пользователь
 
Регистрация: 19.11.2016
Сообщений: 24
По умолчанию "Работа с типизированными файлами (Pascal ) - запись Шестнадцатеричного значения из Edit1 в файл "

Здравствуйте !. Сыну, (занимается в кружке программирования при школе) Дали на выходные задание. Написать программу, для работы с типизированным файлом (файл в формате bin) .Суть программы : загрузить файл, считать данные и вывести данные в программу. Далее, по конкретному адресу в файле, изменить байт (записать из программы в файл). С первой задачей справились успешно, файл загружается, данные считываются и выводятся в программу. А вот с последней задачей, справится не удаётся, а именно : в поле Edit1 вводится значение (в шестнадцатиричном значении : 3E,62, AA ...) которое надо записать в файл, далее при нажатии на кнопку button, значение записывается в файл по конкретному адресу и файл сохраняется.
Но при просмотре в Hex редакторе, это совсем не тот байт , записывается в файл, который вводили в поле Edit. Понимаю что eddit это для работы со строковыми данными, но задание дали именно с этим компонентом.

Просидели вчера весь вечер и сегодня день, что нашли в интернете, не совсем подходит. Где то неправильное преобразование строки в hex и обратно.
Я после института по забыл Паскаль основательно, сын только учится.
Просьба сильно не пинать.
Среда Дельфи7.

Код :



Код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
Stream: TMemoryStream;
p:byte ;
i: integer;
s:string;
c: char;
begin
if (Sender = SpeedButton1) and (EDit1.Text = '')  then
begin
Application.MessageBox('Введите ( в окошко) , латинскими  заглавными буквами , либо цифра + буква , либо одни цифры !', 'ISSSS', MB_Ok + MB_ICONINFORMATION);
exit;
end;
Stream := TMemoryStream.Create;
Stream.LoadFromFile(openDialog1.FileName);

begin
case Stream.Size of
45536:
begin
s := edit1.Text;
s := s + intToHex(Integer(c),2);
Stream.Position := $0DC;
Stream.Write(s,1);

end;
12768:
begin
s:= edit1.Text;
s := s + intToHex(Integer(c),2);
Stream.Position := $0A0;
Stream.Write(s,1);

end;
end;
SaveDialog1.Filter := 'Bin File (*.Bin)|*.Bin';
SaveDialog1.FileName := openDialog1.FileName;
if SaveDialog1.Execute then
begin
Stream.SaveToFile(SaveDialog1.FileName );
ShowMessage('Байт записан и файл сохранён!');
end;
Stream.Free;
end;
end;

Последний раз редактировалось nikitin.leha-201; 20.11.2016 в 13:55. Причина: правка заголовка
nikitin.leha-201 вне форума Ответить с цитированием
Старый 19.11.2016, 19:22   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

справочник Основы Delphi (ссылка наверху старницы)
http://www.delphibasics.ru/Read.php
второй пример чтение из типизированного (двоичного) файла.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.11.2016, 23:58   #3
nikitin.leha-201
Пользователь
 
Регистрация: 19.11.2016
Сообщений: 24
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
справочник Основы Delphi (ссылка наверху старницы)
http://www.delphibasics.ru/Read.php
второй пример чтение из типизированного (двоичного) файла.
Вы меня конечно извините ! но причём здесь справочник, Основы Дельфи ?
Справочник это конечно хорошо, обязательно как будет побольше времени почитаю.
Но как справочник, на который Вы мне дали ссылку, может помочь в данной теме?
В моей теме, по моему написано: как записать(введённые) данные из eddit1 в файл.
Как считать данные из типизированного (bin) файла, вопрос не стоит, данные из файла считываются и выводятся в программу.
2) процедуру ,которая описывается в справочники, а именно :AssignFile сколько слышал от программистов, вообще не рекомендуют использовать....
3) Прочитал справочник, на который Вы, дали ссылку, так и не понял как увязать процедуру AssignFile и eddit1?
Файловая переменная :myFile ну, ни как не связывается с Edit1...

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

Последний раз редактировалось nikitin.leha-201; 20.11.2016 в 00:03.
nikitin.leha-201 вне форума Ответить с цитированием
Старый 20.11.2016, 21:52   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Файловая переменная :myFile ну, ни как не связывается с Edit1...
сначала надо СОДЕРЖИМОЕ(text) поля ВВОДА(Edit1), которое является СТРОКОЙ (string) перевести в ДВОИЧНОЕ представление числа(Word)
Код:
w:=strtoint(Edit1.Text);
после этого ПОЛУЧЕННОЕ значение записать в файл ассоциированный с с файловой переменной.
Код:
var f: file of WORD; //файл для записи значений типа WORD;

AssignFile(f, 'c:\mytypefile.bin');// ассоциация файловой переменной(f) с конкретным файлом 
ReWrite(f);
Write(f,w);//запись значения из переменной в файл
Код:
 а именно :AssignFile сколько слышал от программистов, вообще не рекомендуют использовать....
не путайте УЧЕБНУЮ задачу
Цитата:
(занимается в кружке программирования при школе)
и рабочие программы.

Цитата:
Иногда, чтоб сказать девушке Испанке, на её родном языке
Еще можно эту же фразу (или слова входящие в ее состав) найти в словаре(справочнике).
а у профи уточнить как их лучше применить (или какие из найденных слов выбрать).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.11.2016 в 22:04.
evg_m вне форума Ответить с цитированием
Старый 21.11.2016, 00:33   #5
nikitin.leha-201
Пользователь
 
Регистрация: 19.11.2016
Сообщений: 24
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
сначала надо СОДЕРЖИМОЕ(text) поля ВВОДА(Edit1), которое является СТРОКОЙ (string) перевести в ДВОИЧНОЕ представление числа(Word)
Код:
w:=strtoint(Edit1.Text);
после этого ПОЛУЧЕННОЕ значение записать в файл ассоциированный с с файловой переменной.
Код:
var f: file of WORD; //файл для записи значений типа WORD;

AssignFile(f, 'c:\mytypefile.bin');// ассоциация файловой переменной(f) с конкретным файлом 
ReWrite(f);
Write(f,w);//запись значения из переменной в файл
Код:
 а именно :AssignFile сколько слышал от программистов, вообще не рекомендуют использовать....
не путайте УЧЕБНУЮ задачу
и рабочие программы.

Еще можно эту же фразу (или слова входящие в ее состав) найти в словаре(справочнике).
а у профи уточнить как их лучше применить (или какие из найденных слов выбрать).
Всё дело в том, что преподаватель (ведёт кружок ) у сына, категорически требует
от ребят не использовать AssignFile...
Говорит, что учится сразу надо правильно...
Эта не первая программа у сына уже, да и у ребят тоже в программах нет AssignFile... Четыре месяца учатся и не разу AssignFile, не применяли. Эта не моя прихоть, а требование преподавателя.
Они конечно может не профессиональные, но работают как надо.

Сейчас я попробовал код :

Код:
w:=strtoint(Edit1.Text);
AssignFile(f, 'c:\mytypefile.bin');
ReWrite(f);
Stream.Position := $0DC;
Write(f,w);
CloseFile(F);
W - переменная как Word или как integer ?
Пробовал и так и так, данные в файл не записываются по конкретному адресу.
При попытки в edit ввести шестнадцатеричное значение а потом записать и сохранить , скажем АА, ошибка выскакивает, только 62,46 но и они не записываются в файл....

AA is not a valid integer value...
nikitin.leha-201 вне форума Ответить с цитированием
Старый 21.11.2016, 09:13   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
AA is not a valid integer value...
Цитата:
вводится значение (в шестнадцатиричном значении
Код:
var
  w: word;

w:=strtoint('$0EF');
Код:
w:=strtoint('$0' + Edit1.Text);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.11.2016 в 09:17.
evg_m вне форума Ответить с цитированием
Старый 21.11.2016, 09:37   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Там же байт записать, c ним и работать
Код:
var b: Byte;

b:=strtoint('$0' + Edit1.Text);
Stream.Position:=$0DC;
Stream.Write(b,1);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.11.2016, 18:52   #8
nikitin.leha-201
Пользователь
 
Регистрация: 19.11.2016
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Там же байт записать, c ним и работать
Код:
var b: Byte;

b:=strtoint('$0' + Edit1.Text);
Stream.Position:=$0DC;
Stream.Write(b,1);

Аватар где же вы были вчера ?

Докладываю, с заданием к сожалению за выходные справится не удалось, сегодня пошёл с сыном на занятие, честно сказал преподавателю ,что не удалось за выходные решить задание и тему создал на форуме, но не получилось...
Утешением служило то, что мы не одни такие оказались, из группы справились с заданием только 6 человек, троих забраковал преподаватель ,за применение в коде :AssignFile... Трое справились на отлично, но у одного из родителей сосед , кодер профи, так что его не в счёт. Двое сами решили с помощью какого то форума.

В общем, преподаватель на доске подробно показал всё и объяснил, далее опробовали код, всё работает отлично.
Всё оказалось просто : Аватар прав, надо было работать как с байтом, а дальше всё решилось в три строки. Один, в один как у Аватара.

Код:
begin
case Stream.Size of
45536:
begin
p:=strtoint('$0' + Edit1.Text);
Stream.Position:=$0DC;
Stream.Write(p,1);
end;
12768:
begin
p:=strtoint('$0' + Edit1.Text);
Stream.Position:=$0A0;
Stream.Write(p,1);
end;
end;
SaveDialog1.Filter := 'Bin File (*.Bin)|*.Bin';
SaveDialog1.FileName := openDialog1.FileName;
if SaveDialog1.Execute then
begin
Stream.SaveToFile(SaveDialog1.FileName );
ShowMessage('Байт записан и файл сохранён!');
end;
Stream.Free;
end;
end;
Всё работает на отлично !

В результате ,сыну не за чёт за задание, мне нагоняй от жены и дали новое задание, за невыполнение первого.
Теперь надо записать байт, в разные по размерам файлы и на разных адресах, адреса надо, чтоб программа определила по данным из файла...
думаю что с помощью case, либо if else....
Думаю что второе, станет хуже первого...
Не знаю закрывать тему, или если понадобится помощь, продолжить в этой теме, чтоб не создавать новую? что скажет администрация?

Аватар, Вы точно чувствуется профи с большой буквы !
Где же Вы были в субботу и вчера ?
Огромное Вам спасибо !

Евгений и Вам спасибо за помощь !

Последний раз редактировалось nikitin.leha-201; 21.11.2016 в 18:59.
nikitin.leha-201 вне форума Ответить с цитированием
Старый 21.11.2016, 19:59   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну, во-первых, видел вчера, просто был в недоумении, что и в кружках за детей родители работают. Во-вторых ни кто таким хакерским способом не модифицирует типизированный файл, разве что для взлома, на то он и типизированный, преподу двойка. В-третьих при чем здесь профи? И начинающий должен знать, обязан вернее, как заменить в файле двоичный байт
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.11.2016, 13:27   #10
nikitin.leha-201
Пользователь
 
Регистрация: 19.11.2016
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ну, во-первых, видел вчера, просто был в недоумении, что и в кружках за детей родители работают. Во-вторых ни кто таким хакерским способом не модифицирует типизированный файл, разве что для взлома, на то он и типизированный, преподу двойка. В-третьих при чем здесь профи? И начинающий должен знать, обязан вернее, как заменить в файле двоичный байт
Да нет, не всегда работают, сейчас детки куда более продвинутые нас родителей,
Я пол дня вспоминал как написать Helloo Word, а он мне : что первую программу так начинают только лузеры.... Просто ещё ему 13 лет и он стесняется на взрослых форумах регистрироваться и темы создавать. Вот и папы, с мамами сгодятся...
Аватар , а что значит :Во-вторых ни кто таким хакерским способом не модифицирует типизированный файл, разве что для взлома, на то он и типизированный, преподу двойка?. Не понял честно говоря.
Просто задача стояла без
AssignFile - без этой процедуры. А далее всё проще, Тут в инете нашли строчку, там вычитали, вот и слепили.... Препод здесь не причём, у него всё красиво и правильно, я просто кодер просто ни какой, даже со словарём... Вот если вижу готовое с пояснениями, то понимаю хоть что то. Сын ещё учится.
А байт почему надо менять, тут всё просто: кружок по профилю радиолюбительский, ребята модели радио управляемые собирают, самолётики, машинки кораблики и прочее.Сын любит паять, собирать, конструировать.... А программирование идёт как смежная наука, они микроконтроллеры для своих моделей программируют (ну старшие ребята), а соответственно нужны программы по отладке, обработки файлов, естественно типизированных, в основном bin, Hex.
Программку которую писали, делает простую функцию, она записывает калибровочный байт, чтоб моделька за работала. Меняешь байт калибровки и машинка не едет, далее записываешь нужный и машинка поехала.
Байт высчитывается согласно даташиту на микроконтроллер питание и прочие характеристики, если байт будет не соответствовать, то модель не запустится.
Вот эта программка, позволяет без Hex редактора, быстро записать в файл нужный байт. Так что к хакерству это отнести ну ни как, нельзя. С паяльником и радиоэлементами ,я сыну во всём помогу, эта тема мне знакома. А вот в программировании, тут из меня помощник ни какой... Я вот читаю по Дельфи материалы, но написаны они на таком языке, что наверное для Академиков, а не для начинающих + совсем нет нужных примеров с пояснениями, а для меня лично это важней, Я так быстрей усваиваю, да и сын тоже.
Ещё только 4 месяца учится кодить, думаю что на учится.Это для меня не достижимо и трудно уже, а он схватывает на ура и многое мне разъясняет.
Не, препод дядька хороший, ребята его обожают, ему двойку не надо ! он просто глаза закрывает на наши не всегда удачные коды... А идея с кодом была моя, я в инете материал нашёл и по нему делали.... Ну главное вышло, да и как ещё.
Вчера удалось выполнить задание, поставить условия обработки файла по размеру и адресам, программа делает всё на отлично, проверил и на хрюше и на 7 и на 10 не докопаешься, работает быстро и корректно.
Компилятор ни одного предупреждения и совета даже не дал, всё без сучка и задоринки. Правда код получился, какого то смешанного типа, длинноватый, как сын говорит. Но главное работает и безупречно. В четверг сдавать задание.
Осталось таблицу из даташита к программе приделать и всё готово.
Сейчас комбо- бокс изучаем. Теперь зато знаем, как заменить двоичный код. Ни сразу Рим строился. А сыну тяжеловато, надо и материал по радиоэлектроники изучать +программирование. Не всегда всё так быстро усваивается, как хотелось бы.

Что касается почему Вас профи назвал , так это не лесть. Просто препод учит ребят, что кодера профи отличает, короткий код - короткий путь к успеху, где это возможно, без длинных функций и доп. обработок. Краткость, как говорится ,сестра таланта ! А у Вас в три строчки получилось, как у препода, а он большой профи, так его ребята называют. Я вод код обработки условия хотел выложить на проверку, но чего то Вы, меня за смущали, хакером назвали, теперь стесняюсь, а то и сын лузером называет и Вы засмеёте наверное. Хотя мне кажется что код условие который получился, может быть по меньше. Работать, то работает и отлично, но мне кажется что то длинноват код. А сын, старается как может . Пусть лучше старается изучать, чем по подвалам лазить.....

Последний раз редактировалось nikitin.leha-201; 22.11.2016 в 13:38.
nikitin.leha-201 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку "Работа с файлами (Pascal)" Pro_overrseer Помощь студентам 3 07.11.2013 23:26
Turbo Pascal Создание и работа с типизированными файлами(тип запись) Dina 85 Помощь студентам 19 19.03.2013 22:35
Работа с типизированными файлами ( Pascal / Delphi ) *Катюшка* Помощь студентам 8 16.12.2011 19:39
Необходимо доработать программу "Паскаль" с типизированными файлами, чтобы результат выводило в текстовый документ а не на экран. Женька Good Помощь студентам 0 09.12.2011 21:20