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

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

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

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

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

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

Цитата:
Сообщение от Семён-2014 Посмотреть сообщение
Аватар огромное спасибо !!! всё получилось, создал заготовку, всё считывает и показывает, всё сделал при помощи 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'''' системе не удаётся найти указанный путь....

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

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




Путь наверное не может найти, а если в дельфи, то ошибка и выделяется стока Strim что то не нравится компилятору.

Последний раз редактировалось Семён-2014; 22.01.2014 в 21:25.
Семён-2014 вне форума Ответить с цитированием
Старый 22.01.2014, 21:22   #22
Семён-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;


Ребята не обижайтесь пожалуйста1!! но хочу ещё помощи попросить.
Надо зону в которой ошибки обнулить, тоесть в зону с которой считал и там были ошибки, по нажатию кнопки второй, можно было очистить, обнулить.


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

строку В0 полностью очистить, загнав нули, за место ошибок.
И в строке F0 обнулить ошибку Е1,( только одно это значение, всю строку не надо) вобщем функцию очистки данных зон от шибок.

А на третью кнопку сохранить уже очищенный от ошибок файл.
Причём ни как не могу понять как при сохранении файла, прога бы сама проставляла имя под которым его загрузила, чтоб в ручную не вводить, а то постоянно в ручную вводить и ставить точку бин. Пример : 31111109.bin Тоесть с каким номером, или названием загрузился с таким и выходит на выходе, только очищенный, не удаляя старый, а место чтоб мог выбрать сам.
Я с чтением разобрался, сейчас эксперементирую, довожу до ума.
А вот теперь бы с записью и с сохранением., первая прога Ваша будет, на Ваш суд. И с меня пиво, или коньяк.
А я пока контрольной и прописной суммой займусь, её поиском и сравнением, без неё прога, не прога.
Сегодня удовольствие получил, больше чем от всех написанных программок раньше, в месте взятых. Ведь из за этого только и начал осваивать программирование.
Огромное спасибо ребята за помощь!!!
Останется доделать и полный порядок будет.
Семён-2014 вне форума Ответить с цитированием
Старый 23.01.2014, 00:13   #23
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Надеюсь, что Вы переписали чтение таким образом:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TFileStream;
  a: array [0..1023] of Byte;
begin
  if OpenDialog1.Execute then
  begin
    Stream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyNone);
    if Stream.Size <> 512 then
      ShowMessage('Недопустимый размер файла!')
    else
    begin
      Stream.Position := $B0;
      ...
    end;
    Stream.free;
  end
  else
    ShowMessage('Загрузка файла отменена пользователем!' );
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 23.01.2014, 02:29   #24
Семён-2014
Подтвердите свой е-майл
 
Регистрация: 17.01.2014
Сообщений: 16
По умолчанию ответ

Цитата:
Сообщение от BDA Посмотреть сообщение
Надеюсь, что Вы переписали чтение таким образом:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TFileStream;
  a: array [0..1023] of Byte;
begin
  if OpenDialog1.Execute then
  begin
    Stream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyNone);
    if Stream.Size <> 512 then
      ShowMessage('Недопустимый размер файла!')
    else
    begin
      Stream.Position := $B0;
      ...
    end;
    Stream.free;
  end
  else
    ShowMessage('Загрузка файла отменена пользователем!' );
end;
Огромное спасибо BDA!

Нет не совсем так, вот и ошибка почему была, теперь понял.
Произвёл две комбинации:
1) if Stream.Size <> 512 then
ShowMessage('Недопустимый размер файла!')
else
ShowMessage('Загрузка файла произведена успешно!');

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

2) if Stream.Size <> 512 then
ShowMessage('Недопустимый размер файла!');

begin
Stream.Position := $B0;
...
end;
Взял и удалил Else и ShowMessage('Загрузка файла произведена успешно!');
Ошибка ушла, теперь прога работает отлично, даже если отменяю, не загрузив...
Я ставил после : ShowMessage('Недопустимый размер файла!') ( , а их ставить не надо было.
Огромное спасибо за помощь, причина нашлась и устранена!!!
Семён-2014 вне форума Ответить с цитированием
Старый 23.01.2014, 02:38   #25
Семён-2014
Подтвердите свой е-майл
 
Регистрация: 17.01.2014
Сообщений: 16
По умолчанию ответ

Цитата:
Сообщение от Семён-2014 Посмотреть сообщение
Ребята не обижайтесь пожалуйста1!! но хочу ещё помощи попросить.
Надо зону в которой ошибки обнулить, тоесть в зону с которой считал и там были ошибки, по нажатию кнопки второй, можно было очистить, обнулить.


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

строку В0 полностью очистить, загнав нули, за место ошибок.
И в строке F0 обнулить ошибку Е1,( только одно это значение, всю строку не надо) вобщем функцию очистки данных зон от шибок.

А на третью кнопку сохранить уже очищенный от ошибок файл.
Причём ни как не могу понять как при сохранении файла, прога бы сама проставляла имя под которым его загрузила, чтоб в ручную не вводить, а то постоянно в ручную вводить и ставить точку бин. Пример : 31111109.bin Тоесть с каким номером, или названием загрузился с таким и выходит на выходе, только очищенный, не удаляя старый, а место чтоб мог выбрать сам.
Я с чтением разобрался, сейчас эксперементирую, довожу до ума.
А вот теперь бы с записью и с сохранением., первая прога Ваша будет, на Ваш суд. И с меня пиво, или коньяк.
А я пока контрольной и прописной суммой займусь, её поиском и сравнением, без неё прога, не прога.
Сегодня удовольствие получил, больше чем от всех написанных программок раньше, в месте взятых. Ведь из за этого только и начал осваивать программирование.
Огромное спасибо ребята за помощь!!!
Останется доделать и полный порядок будет.
Теперь бы с этим разобраться, чтоб обнулить зоны ошибок и сохранить уже очищенный файл, тут я так понимаю уже надо манипуляции с записью в файл и с сохранением, чтоб код для одной кнопки, и очистить и сохранить, потомуч- то по первому коду, файл я так понял открыт только для чтения, сам файл не загружается. Вот и ломаю голову как и это реалезовать. Прошу помощь профи, сам не осилю.

Последний раз редактировалось Семён-2014; 23.01.2014 в 02:41.
Семён-2014 вне форума Ответить с цитированием
Старый 23.01.2014, 03:12   #26
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
uses FileCtrl;
...
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TMemoryStream;
  p: ^Byte;
  i: integer;
  chosenDirectory: string;
begin
  if OpenDialog1.Execute then
  begin
    Stream := TMemoryStream.Create;
    Stream.LoadFromFile(OpenDialog1.FileName);
    if Stream.Size <> 512 then
      ShowMessage('Недопустимый размер файла!')
    else
    begin
      p := Stream.Memory;
      inc(p, $B0);
      for i := 0 to 15 do
      begin
        p^ := 0;
        inc(p);
      end;
      p := Stream.Memory;
      inc(p, $FE);
      p^ := 0;
      if SelectDirectory('Выберите каталог',
        extractfilepath(OpenDialog1.FileName), chosenDirectory) then
        Stream.SaveToFile(chosenDirectory + PathDelim + extractfilename
            (OpenDialog1.FileName));
    end;
    Stream.Free;
  end
  else
    ShowMessage('Загрузка файла отменена пользователем!');
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 23.01.2014 в 03:16.
BDA на форуме Ответить с цитированием
Старый 23.01.2014, 18:29   #27
Семён-2014
Подтвердите свой е-майл
 
Регистрация: 17.01.2014
Сообщений: 16
По умолчанию ответ

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
uses FileCtrl;
...
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TMemoryStream;
  p: ^Byte;
  i: integer;
  chosenDirectory: string;
begin
  if OpenDialog1.Execute then
  begin
    Stream := TMemoryStream.Create;
    Stream.LoadFromFile(OpenDialog1.FileName);
    if Stream.Size <> 512 then
      ShowMessage('Недопустимый размер файла!')
    else
    begin
      p := Stream.Memory;
      inc(p, $B0);
      for i := 0 to 15 do
      begin
        p^ := 0;
        inc(p);
      end;
      p := Stream.Memory;
      inc(p, $FE);
      p^ := 0;
      if SelectDirectory('Выберите каталог',
        extractfilepath(OpenDialog1.FileName), chosenDirectory) then
        Stream.SaveToFile(chosenDirectory + PathDelim + extractfilename
            (OpenDialog1.FileName));
    end;
    Stream.Free;
  end
  else
    ShowMessage('Загрузка файла отменена пользователем!');
end;

Всё спасибо!

Последний раз редактировалось Семён-2014; 24.01.2014 в 14:59. Причина: удаляю тему
Семён-2014 вне форума Ответить с цитированием
Старый 24.01.2014, 02:37   #28
Семён-2014
Подтвердите свой е-майл
 
Регистрация: 17.01.2014
Сообщений: 16
По умолчанию нашёл причину

[QUOTE=Семён-2014;1330729]

Спасибо за помощь!

Последний раз редактировалось Семён-2014; 24.01.2014 в 14:59. Причина: улаляю тему
Семён-2014 вне форума Ответить с цитированием
Старый 24.01.2014, 09:33   #29
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
s:=extractfilename(opendialog1.filename);
savedialog1.initialdir:='d:\';// за точность названия (initialdir) не поручусь 
savedialog1.filename:=s;
if s='' then  
   showmessage('исходный файл не выбран')
else if savedialog1.execute then 
  ....
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.01.2014, 15:04   #30
Семён-2014
Подтвердите свой е-майл
 
Регистрация: 17.01.2014
Сообщений: 16
По умолчанию ответ

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
s:=extractfilename(opendialog1.filename);
savedialog1.initialdir:='d:\';// за точность названия (initialdir) не поручусь 
savedialog1.filename:=s;
if s='' then  
   showmessage('исходный файл не выбран')
else if savedialog1.execute then 
  ....


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

Всем откликнувшимся спасибо, за помощь!!!

В обоих кодах, нет закрытия файла после работы над ним, пока прогу не закроешь, что само по себе не правильно( файл не откроешь в другой программе, нет операции чтоб блокировать загрузку файла, не соответствующего размера, файл всё ровно грузится и его неоткроешь ,в другой программе, пока не закроешь прогу, нет реализации, если файл не загружен, а на кнопку стереть нажали, выскакивает окошко системы об ошибке!, два кода между собой стыкуются не корректно... Вывод чтоб написать прогу с 2,3 операциями, надо пол года просить помощь, потом разбираться с кодами, где не состыковки....
Что у нас за народ?, где секреты не нужны и всё должно быть просто, мы усложняем до первого уровня секретности и делаем себя фигурами равными Черчелю, не подступишся .... , а где действительно нужно секрететь, так на весь мир, да ещё к всеобщей доступности.
Любим мы себе цену всё таки набивать и всё усложнять!!!
потому были, есть и будем в глубокой попе вечно!


Всем откликнувшимся спасибо, за помощь!!!




Прошу администрацию закрыть тему и удалить, а то в опциях не нашёл, как закрыть и удалить тему.

Последний раз редактировалось Семён-2014; 24.01.2014 в 21:15. Причина: спасибо сказать
Семён-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