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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2014, 00:23   #61
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию ответ

Цитата:
Сообщение от BDA Посмотреть сообщение
1) Я не очень понял Ваше последнее сообщение.
2) Аватар Вам говорит вот об этом месте:
Код:
stream.Read(a, 2);
case D of
  $2C29:begin
...
Там нужно не "a", а "D".
3) Добавьте вывод считанного значения, чтобы было, что анализировать.
Код:
stream.Read(D, 2);
showmessage(IntToHex(D, 4));
case D of
  $2C29:begin
...

BDA, Аватар !!! полная победа, решил задачу!!!

Сначало код :

Код:
 begin
if D=$292C then
begin
Label41.Caption:='морковь';
end
else
if D=$2124 then
begin
Label41.Caption:='помидор';
end
else
if D=$5A0A then
begin
 Label41.Caption:=' ???';
 end
 else
 begin
  Label41.Caption:='фрукт неизвестен!';
   end;
 end;
  end;
Теперь по порядку:
1) var
D:word;
begin
D:=$5A0A;
D:=$2421;
D:=$292C;
stream.Read(D,2);
дальше код выше, стрим естественно ниже, это чтоб понятно было.
В общем ситуация в том что word переворачивает байты и читается с право, на лево, а byte читает нормально, поэтому и не получалось, при сверке надо было переворачивать данные, а так получается что сверять несчим, вот она и последнюю позицию ????выяснелось случайно, в Label стал выводить и увидел, вот тут и пришло озарение.Вспомнил про подсчёт, когда писал, почему в перевёрнутом виде. Вот и разгадка.
А я себя поливал, что не так условие может ставлю....
Теперь так красиво, всё обошла родную, бегает быстро, к стате походу компонент Xp добавил теперь понял его назначение, кнопочки стали супер!!! Вот так пока решаешь одно, там и другое по ходу идёт.
Отдал на тесты всем нравится, но придирчивые программисты , указали на то что не дело что файл не стандартный всё ровно прога грузит и его не открыть в другом редакторе, пока прогу не закроешь, если устранить эту проблему, то она будет совершенной. Я тоже не рад что она загружает нестандартный фай всё ровно, но не знаю как сделать чтоб не только окошко вылезало, а чтоб не грузилась вообще. Типа стоп нестандартному файлу.

Вот :fmShareDenyNone – другие приложения могут производить с файлом

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

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

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

Последний раз редактировалось Семён-2014@; 03.02.2014 в 00:34. Причина: забыл
Семён-2014@ вне форума Ответить с цитированием
Старый 03.02.2014, 01:12   #62
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Выложите тот участок кода, в котором происходит открытие файла.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.02.2014, 01:21   #63
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию ответ

Цитата:
Сообщение от BDA Посмотреть сообщение
Выложите тот участок кода, в котором происходит открытие файла.
Выкладываю

Код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
const cLen = $1Fа-$90;
var Stream: TFileStream;
a: array [0..1023] of Byte;
B: array [1..clen] of Byte;
 F: File of byte;
Size: Integer;
w1,w2: Word;
i: integer;
D:word;
begin

Label46.Caption:='   ';
Label42.Caption:='   ';
Label41.Caption:='   ';
with OpenDialog1 do
if Execute then
begin
Stream:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyNone);
Stream.Position:=$100;
Stream.Read(B,clen);
w1:=$0;
for i:=1 to clen do  w1:=w1+B[i];  //при переполнении левые биты обрежутся
Stream.Position:=$1Fа;
Stream.Read(w2,2);
if w2<>w1 then Label46.Caption:=('не совпадают повреждена !');
Stream.Free;
  //считаем контрольную сумму
if w2=w1 then Label42.Caption:=('совпадают исправна  !');
AssignFile(F, FileName);
Reset(F);
Size:=Filesize(F);
CloseFile(F) ;
Label38.Caption:=IntToStr(Size);
Stream:=TFileStream.Create(OpenDialog1.FileName,fmOpenReadWrite or fmShareDenyNone);
if Stream.Size<>512 then
ShowMessage('не допустимый размер файла, загрузите файл равный 700 байтам.')

else
if Stream.Size=700then
begin
ShowMessage(' файл загружен успешно ! ');
begin
Stream.Position:=$R0;
Write вставлял я в код.

Последний раз редактировалось Семён-2014@; 03.02.2014 в 17:17. Причина: дописать
Семён-2014@ вне форума Ответить с цитированием
Старый 03.02.2014, 01:47   #64
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Так тут нет проверки на размер файла.
http://programmersforum.ru/showpost....4&postcount=19
Код:
var
    Stream: TFileStream;
    a: array [0..1023] of Byte;
    B: array [1..clen] of Byte;
    Size, i: Integer;
    w1,w2, D: Word;
begin
    Label46.Caption:='';
    Label42.Caption:='';
    Label41.Caption:='';
    if OpenDialog1.Execute then
    begin
        Stream := TFileStream.Create(OpenDialog1.FileName,fmOpenReadWrite or fmShareDenyNone);
        if Stream.Size <> 512 then  
            Application.MessageBox('Ошибка. Файл должен иметь размер строго 512 байт!', 'Ошибка!', MB_ICONERROR or MB_OK);  
        else {размер файла ровно 512 байт, продолжаем} 
        begin
            Stream.Position := $100;
            Stream.Read(B, clen);
            //другие действия с файлом
        end;
        Stream.free;
    end;
end;
Вместо кучи if else лучше использовать case of.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 03.02.2014 в 01:51.
BDA вне форума Ответить с цитированием
Старый 03.02.2014, 02:37   #65
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию ответ

Цитата:
Сообщение от BDA Посмотреть сообщение
Так тут нет проверки на размер файла.
http://programmersforum.ru/showpost....4&postcount=19
Код:
var
    Stream: TFileStream;
    a: array [0..1023] of Byte;
    B: array [1..clen] of Byte;
    Size, i: Integer;
    w1,w2, D: Word;
begin
    Label46.Caption:='';
    Label42.Caption:='';
    Label41.Caption:='';
    if OpenDialog1.Execute then
    begin
        Stream := TFileStream.Create(OpenDialog1.FileName,fmOpenReadWrite or fmShareDenyNone);
        if Stream.Size <> 512 then  
            Application.MessageBox('Ошибка. Файл должен иметь размер строго 512 байт!', 'Ошибка!', MB_ICONERROR or MB_OK);  
        else {размер файла ровно 512 байт, продолжаем} 
        begin
            Stream.Position := $100;
            Stream.Read(B, clen);
            //другие действия с файлом
        end;
        Stream.free;
    end;
end;
Вместо кучи if else лучше использовать case of.
Есть условие, просто оно ниже чуток было, Вы сказали открытие начало, туда просто не попало , поменял в первом сообщении .
Проверка проходит и в моём варианте, но всё ровно загружает,
сейчас для успокоения совести и Ваш код поставил, опробывал, окошко вылетает предупреждает, всё как и у меня было, но файл всё ровно грузится и в редакторе его не открыть, пишет что занят другим приложением.... Убрал свой, опробывал Ваш, всё бестолку, опробывал две проверки ставить и Ваш код и мой оставить, вылетает окошко от Вашего кода, до моего не доходит, а картина всё таже, файл не открыть, пока прогу не закроешь...
К стате сегодня упрёк выслушал, типа убери окошко которое сообщает об удачной загрузке файла, типа лишнее движение, раздражает... убрал.
Я тоже не пойму почему файл всё ровно грузится.
Помогало одно средство, я ввёл чтоб прога закрывалась, если не тот файл, тем самым обеспечил не загрузку файла не того формата, но пришлось убрать, сказали раздражает, да и сам понимаю что когда в папке прошив куча и свалка, не очень удобно, если каждый раз прога будет закрываться, убрал. Теперь эта проблема остается, я мозг уже весь себе вынес...

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

Сначала нужно проверять размер файла, а затем уже считать его проверочную сумму, а то можно вылезти за размер файла. Также не нужно использовать assignfile и связанные с ним команды. Не нужно файл отрывать 2 раза. Если остальной код в данной процедуре секретен, то киньте через личные сообщения, а если нет, то выложите тут.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.02.2014, 09:02   #67
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Семён-2014@ Посмотреть сообщение
Выкладываю

Код:
begin
D:=$5A0A;
D:=$2124;
D:=$292C;
я выделил красным БЕССМЫСЛЕННЫЙ (он же беcполезный и беспощадный ) код.
Выделенные строки не несут никакого смысла. в одной простой (скалярной переменной) одновременно может находится ОДНО значение.
все предыдущие значения затираются.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.02.2014, 16:54   #68
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию ответ

Цитата:
Сообщение от BDA Посмотреть сообщение
Сначала нужно проверять размер файла, а затем уже считать его проверочную сумму, а то можно вылезти за размер файла. Также не нужно использовать assignfile и связанные с ним команды. Не нужно файл отрывать 2 раза. Если остальной код в данной процедуре секретен, то киньте через личные сообщения, а если нет, то выложите тут.
BDA, Всё проблему решил доработал, прога теперь не грузит нестандартный файл, внёс ещё изменения, проблема решена. Как ВАМ в личку скинуть?, чтоб не в открытую. Изменил условие и кое что убрал, проблема решилась, теперь условие срабатывает и не допускает загрузке, файл можно открывать в любом другом редакторе одновременно. Изменения и в сохранении произвёл, отловил траблу. Скиньте личку я Вам отправлю, если интересно. Работает быстро, всё как должно быть. Огромное Вам и Аватару спасибо!!! Если скинете личку, то Вам и Аватару отправлю.
Семён-2014@ вне форума Ответить с цитированием
Старый 03.02.2014, 17:00   #69
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию ответ

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я выделил красным БЕССМЫСЛЕННЫЙ (он же беcполезный и беспощадный ) код.
Выделенные строки не несут никакого смысла. в одной простой (скалярной переменной) одновременно может находится ОДНО значение.
все предыдущие значения затираются.
Согласен с Вами на все сто процентов, он выброшен ещё вчера и уже не присутствует в коде. Изменения произведены.
Сергей Вам тоже огромное спасибо за помощь!.
Семён-2014@ вне форума Ответить с цитированием
Старый 03.02.2014, 17:19   #70
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию ответ

Цитата:
Сообщение от BDA Посмотреть сообщение
Сначала нужно проверять размер файла, а затем уже считать его проверочную сумму, а то можно вылезти за размер файла. Также не нужно использовать assignfile и связанные с ним команды. Не нужно файл отрывать 2 раза. Если остальной код в данной процедуре секретен, то киньте через личные сообщения, а если нет, то выложите тут.
Что то не могу Вам отправить файл с вложениями, не вижу опции, он только код в письме может отправлять так что ли? А файл не отправить?
И код весь не лезет пишет много ему, как отправить?

Последний раз редактировалось Семён-2014@; 03.02.2014 в 17:45.
Семён-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