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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2014, 13:32   #11
Семён-2014
Подтвердите свой е-майл
 
Регистрация: 17.01.2014
Сообщений: 16
По умолчанию

[QUOTE=Семён-2014;1329560]Что конкретно нужно я уже подробно отправил на почту человеку( он в теме предложил помощь), он ознакомился с материалами и сказал что всё понятно, что надо и сказал что к воскресенью напишет, но потом куда то пропал....
Вы пишите что никто не покажет, Вы не правы !!! у нас на сайте мастеров, начинающим мастерам, всё до каждого действия объясняют и даже на скриншотах показывают, куда надо подпаяться и сколько проводов , какой флюс и какая температура паяльной станции, всё до мелочей, в плоть до того что человек не державший паяльник в руках сможет сделать... Я сам не однократно описывал процесс на сайте из расчёта на человека не владеющего начальными навыками.... И знаете понимают даже новички.... Из чего понял сам, что нет плохих учеников, есть учителя не способные правильно и подробно объяснить материал...
Когда мы становимся профи, мы почему то забываем, что сами ни чего ,когда-то не знали и пытаемся объяснить начинающему человеку, как профи и негодуем если человек не понял.... Иногда полезно опускаться до уровня начинающего и с этого уровня объяснять. А унас извените все материалы , на тему программирования, как будто с многолетними профи объясняються. Самое лучшее объяснение, это когда на примере показано и расписано, где удаётся найти подробный материал, проблем с написанием нет, но таких единицы. А писать для новичка на языке , фалехов гентохаселапе, извените не очень правильно.

Суть проблемы, в том что мне надо на примере, показать как можно из файла в формате Bin с нужных адрессов, на разных строках файла считать определённое количество байтов, при необходимости перевести их из 16теричной в 10 теричную систему и вывести на экран программы.
А все примеры что я видел работают от начало строки, или с конца и всё текстовые файлы.... А что по программированию тоже есть даташиты?
В моём случае даташиты не нужны, надо просто считать инфу , переконвертировать, если вазникнит такая необходимость и вывести результат в программу.
Семён-2014 вне форума Ответить с цитированием
Старый 21.01.2014, 13:58   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вот пример упрощенной работы c bin-файлом на чтение. Да, строк в bin-файле как таковых не существует
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Stream: TFileStream;
    b1: Byte;
    w1: DWORD;
    i: Integer;
    a: array [0..1023] of Byte;
    s: String;
begin
  Stream:=TFileStream.Create('e:\MyFile.bin',fmOpenRead or fmShareDenyNone);
//чтение байта с заданной позиции
  Stream.Position:=$270;
  Stream.Read(b1,1);
  Label1.Caption:=IntToHex(b1,2);    //16-ричное
  Label2.Caption:=IntToStr(b1);      //10-тичное
//чтение 4-х байтов с заданной позиции
  Stream.Position:=$270;
  Stream.Read(w1,4);
  Label3.Caption:=IntToHex(w1,8);    //16-ричное
//чтение 15-и байтов с заданной позиции
  Stream.Position:=$270;
  Stream.Read(a,15);
  s:='';
  for i:=0 to 14 do s:=s+IntToHex(a[i],2);
  Label4.Caption:=s;    //16-ричное
  Stream.Free;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.01.2014, 18:46   #13
masterstariy
 
Регистрация: 18.01.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Семён-2014, так проблема в том, что Вы путаете мягкое с кислым..
Проблема в другом - что конкретно нужно сделать.
Тёзка-что конкретно нужно мне- описал выше, что скажеш по этому поводу?
masterstariy вне форума Ответить с цитированием
Старый 21.01.2014, 19:02   #14
masterstariy
 
Регистрация: 18.01.2014
Сообщений: 4
По умолчанию

Кстати для админов попытался войти в блог получил извещение---
Веб-страница: http://www.pblog.ru
Комментарий: ESET Smart Security заблокировал доступ к веб-странице. Страница находится в списке веб-сайтов с потенциально опасным содержимым.
Открыть базу знаний ESET | www.eset.com
masterstariy вне форума Ответить с цитированием
Старый 21.01.2014, 22:56   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от masterstariy Посмотреть сообщение
Тёзка-что конкретно нужно мне- описал выше, что скажеш по этому поводу?
Это именно то, о чём я и говорил.
Аватар привёл именно такой код, как я и сам хотел набросать в качестве примера.
Так что, можете его брать в качестве шаблона и ваять из него то, что Вам нужно. Возникнут вопросы/проблемы - welcome!


p.s. похоже, что ESET у Вас параноит... Зашёл с KAV, никаких проблем, всё работает, опасного контента не видно!

Последний раз редактировалось Serge_Bliznykov; 21.01.2014 в 22:58.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.01.2014, 23:01   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Он и у меня параноит, и не только, уже с год или около того на блог ругается. Какого-то занесли в список запрещенных сайтов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.01.2014, 00:23   #17
Семён-2014
Подтвердите свой е-майл
 
Регистрация: 17.01.2014
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Вот пример упрощенной работы c bin-файлом на чтение. Да, строк в bin-файле как таковых не существует
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Stream: TFileStream;
    b1: Byte;
    w1: DWORD;
    i: Integer;
    a: array [0..1023] of Byte;
    s: String;
begin
  Stream:=TFileStream.Create('e:\MyFile.bin',fmOpenRead or fmShareDenyNone);
//чтение байта с заданной позиции
  Stream.Position:=$270;
  Stream.Read(b1,1);
  Label1.Caption:=IntToHex(b1,2);    //16-ричное
  Label2.Caption:=IntToStr(b1);      //10-тичное
//чтение 4-х байтов с заданной позиции
  Stream.Position:=$270;
  Stream.Read(w1,4);
  Label3.Caption:=IntToHex(w1,8);    //16-ричное
//чтение 15-и байтов с заданной позиции
  Stream.Position:=$270;
  Stream.Read(a,15);
  s:='';
  for i:=0 to 14 do s:=s+IntToHex(a[i],2);
  Label4.Caption:=s;    //16-ричное
  Stream.Free;
end;

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

000000B0: 02 DD ED AB 45 07 09 67 FF FF CA ED 08 76 DD DA
000000С0: 00 00 00 00 31 00 EC 00 00 00 00 00 00 00 00 00
000000D0: 00 FF 00 00 00 AD 00 45 00 FF 00 00 00 00 00 00
000000E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00
000000F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E1 00
00000100: 33 00 01 85 07 24 AA CC FF 00 00 00 32 00 00 00

С первой строки( адрес: 000000В0) - считать надо все данные и вывести в прогу ( Label) так : заместо 02, надо просто 2, заместо DD, надо :221( перевод из Hex в Dec), AB, 45=69, заместо 07, надо просто 7( 0 отбросить), 09 - просто 9( ноль отбросить), 67 =103, FF =255, СА=202, ED =237 итак всю строчку в прогу выводим цифры, и так всю строку, каждую цифру( только цифру) в отдельный Label.

000000F0 : с этой строки выводим только одно значение это E1, причём значение этой ячейки выводится так , или EA, EB, EC, ED в этой строке выводится только так и ни как иначе, или будет неправильно. Поэтому смотря какое там значение прописалось, такое и должно вывестись в прогу. А значение может быть от E1,E2,E3,E4,E5,E6,E7,E8,E9, далее только такие могут быть : EA, EB,EC, ED.

00000100: Из этой строчки только вот эти данные и больше ничего, другие не нужны( лишние) значения такие :33 00 01 85(выводится строго в один Label) всё , в таком виде выводятся в прогу, в один Label . всё конец.
Желательно чтоб все данные выводились в разные Label , причём самая верхняя строка должна каждая получившаяся цифра в свой Label, а не все в кучу, в одной строке.
С кодом представленым выше, это реалезовать не удаётся.
И надо чтоб программа принимала строго один объём файла в 512 байт и только, чтоб не больше , ни меньше файл не брала. То-есть ограничение размера файла, тоже надо ввести обязательно.

Последний раз редактировалось Семён-2014; 22.01.2014 в 00:36.
Семён-2014 вне форума Ответить с цитированием
Старый 22.01.2014, 10:06   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну что-бы совсем было понятно и по-простому то так
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Stream: TFileStream;
    a: array [0..1023] of Byte;
begin
  Stream:=TFileStream.Create('e:\MyFile.bin',fmOpenRead or fmShareDenyNone);
  if Stream.Size=512 then begin
    Stream.Position:=$B0;
    Stream.Read(a,16);
    Label1.Caption:=IntToStr(a[0]);
    Label2.Caption:=IntToStr(a[1]);
    Label3.Caption:=IntToStr(a[2]);
    Label4.Caption:=IntToStr(a[3]);
    Label5.Caption:=IntToStr(a[4]);
    Label6.Caption:=IntToStr(a[5]);
    Label7.Caption:=IntToStr(a[6]);
    Label8.Caption:=IntToStr(a[7]);
    Label9.Caption:=IntToStr(a[8]);
    Label10.Caption:=IntToStr(a[9]);
    Label11.Caption:=IntToStr(a[10]);
    Label12.Caption:=IntToStr(a[11]);
    Label13.Caption:=IntToStr(a[12]);
    Label14.Caption:=IntToStr(a[13]);
    Label15.Caption:=IntToStr(a[14]);
    Label16.Caption:=IntToStr(a[15]);

    Stream.Position:=$FE;
    Stream.Read(a,1);
    Label17.Caption:=IntToHex(a[0],2);

    Stream.Position:=$100;
    Stream.Read(a,4);
    Label18.Caption:=IntToHex(a[0],2)+' '+IntToHex(a[1],2)+' '+IntToHex(a[2],2)+' '+IntToHex(a[3],2);
  end;
  Stream.Free;
end;
Лэйблы на форму надеюсь сами накидаете.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 22.01.2014 в 10:13.
Аватар вне форума Ответить с цитированием
Старый 22.01.2014, 11:19   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Аватар, спасибо за пример. (Вы опять избавили меня от необходимости писать код! )


небольшие замечания/уточнения для Семён-2014
Код:
if Stream.Size<>512 then  
       Application.MessageBox( 'Ошибка. Файл должен иметь размер строго 512 байт!',
          'Ошибка!', MB_ICONERROR or MB_OK);  
else {размер файла ровно 512 байт, продолжаем} 
begin
    Stream.Position:=$B0;
    Stream.Read(a,16);
    ....
end;
для выбора файла можно использовать компонент TOpenDialog

ну и вместо кучи Label я бы предложил использовать таблицу (TSTringGrid, например). впрочем, это уже дело хозяйское...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.01.2014, 21:10   #20
Семён-2014
Подтвердите свой е-майл
 
Регистрация: 17.01.2014
Сообщений: 16
По умолчанию ответ

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ну что-бы совсем было понятно и по-простому то так
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Stream: TFileStream;
    a: array [0..1023] of Byte;
begin
  Stream:=TFileStream.Create('e:\MyFile.bin',fmOpenRead or fmShareDenyNone);
  if Stream.Size=512 then begin
    Stream.Position:=$B0;
    Stream.Read(a,16);
    Label1.Caption:=IntToStr(a[0]);
    Label2.Caption:=IntToStr(a[1]);
    Label3.Caption:=IntToStr(a[2]);
    Label4.Caption:=IntToStr(a[3]);
    Label5.Caption:=IntToStr(a[4]);
    Label6.Caption:=IntToStr(a[5]);
    Label7.Caption:=IntToStr(a[6]);
    Label8.Caption:=IntToStr(a[7]);
    Label9.Caption:=IntToStr(a[8]);
    Label10.Caption:=IntToStr(a[9]);
    Label11.Caption:=IntToStr(a[10]);
    Label12.Caption:=IntToStr(a[11]);
    Label13.Caption:=IntToStr(a[12]);
    Label14.Caption:=IntToStr(a[13]);
    Label15.Caption:=IntToStr(a[14]);
    Label16.Caption:=IntToStr(a[15]);

    Stream.Position:=$FE;
    Stream.Read(a,1);
    Label17.Caption:=IntToHex(a[0],2);

    Stream.Position:=$100;
    Stream.Read(a,4);
    Label18.Caption:=IntToHex(a[0],2)+' '+IntToHex(a[1],2)+' '+IntToHex(a[2],2)+' '+IntToHex(a[3],2);
  end;
  Stream.Free;
end;
Лэйблы на форму надеюсь сами накидаете.

Аватар огромное спасибо !!! всё получилось, создал заготовку, всё считывает и показывает, всё сделал при помощи Label, ну это пока, потом разберусь с функцией TsTrigGrid и перейду на работу с ней. Зато разобрался с чтением нужной инфы из файла

Огромное спасибо Serge Bliznykov, ценная поправка, ввёл её, теперь окошко вылетает о неправильном файле( не правильный объём).

Ребята при первой компиляции, компилятор упёрся и не хотел компилировать из за строки:
Stream:=TFileStream.Create('e:\MyFi le.bin',fmOpenRead or fmShareDenyNone); не нравилось ему ' e\MyFile.bin',
пришлось менять на вот так :

Stream:=TFileStream.Create(OpenDial og1.FileName,fmOpenRead or fmShareDenyNone); OpenDialogFileName, по другому ни как , замучелся.
Не пойму в чём дело?

вот весь код мой :

procedure TForm1.Button1Click(Sender: TObject);
var Stream: TFileStream;
a: array [0..1023] of Byte;
begin
if OpenDialog1.Execute then
else
ShowMessage('загрузка файла отменена пользователем !' );
begin
Stream:=TFileStream.Create(OpenDial og1.FileName,fmOpenRead or fmShareDenyNone);
if Stream.Size<>512 then
ShowMessage('недопустимый размер файла !');

begin
Stream.Position:=$B0;
только так с компилировался и ни как подругому.

Прога делает всё правильно, считывает и выводит, всё как хотел.
Но есть маленький касячёк... Если прогу открыл первый раз, нажал кнопку загрузить файл, открылись диски на выбор, любой выбираю, открываю диск с, или D, вижу файлы нужные, но жму отменить и ничего не загружаю, выскакивает сообщение что загрузка отменена пользователем, жму ок, а далее выскакивает сообщение от Винды наверное суть которого вот : Cannot open File'''' системе не удаётся найти указанный путь....

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

Не пойму в чём проблема, код с текстовыми файлами и с таким кодом, всё ок без ошибок. А здесь проблема.
Семён-2014 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
file->HEX HEX->BIN kakawkin Общие вопросы Delphi 1 25.04.2012 01:02
перевод чисел из hex в bin. ASM. crashmanx Помощь студентам 0 25.12.2011 21:35
Нужно реализовать программу на Дельфи Aizada Помощь студентам 1 16.05.2011 21:45
Перевод BIN -> HEX Piar Помощь студентам 2 20.05.2009 15:44