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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2013, 19:11   #1
Poltish
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 35
Радость Ребят, поможете найти ошибку?

Работал над чтением HEX-кода файла.

Вот собственно код:

Код:
procedure TForm1.Button5Click(Sender: TObject);
var
F : File;
Arr : array of Byte;
S, STmp : String;
i, j, Size, H, Len : Integer;
begin

{Привязывание, чтение и т.д. файла}
AssignFile(F, Op.FileName);
Reset(F, 1);
Size:= FileSize(F);
SetLength(Arr, Size);
BlockRead(F, Arr[0], Size);
CloseFile(F);

{Формирование данных для RichEdit}
Len := Size * 3 + (Size div 16);
  if Size mod 16 > 0 then Dec(Len);
  SetLength(S, Len);
  H := High(Arr);
  j := 1;
  for i := 0 to H do begin
    STmp := IntToHex(Arr[i], 2);
    S[j] := STmp[1];
    S[j + 1] := STmp[2];
    Inc(j, 2);
    if i = H then Continue;
    if i mod 16 = 15 then begin
      S[j] := #13;
      S[j + 1] := #10;
      Inc(j, 2);
    end else begin
      S[j] := #9;
      Inc(j);
    end;
  end;

form2.RichEdit1.Text:= S;

end;
Что-то мне подсказывает что на BlockRead ругается. Вот скрин ошибки:

Причём код читает и в нужном виде сканирует его в RichEdit. А после закрытия второй формы (на которой EichEdit) выдаёт ошибку. Буду премного благодарен всем откликнувшимся
Poltish вне форума Ответить с цитированием
Старый 16.06.2013, 19:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
после закрытия второй формы
Значит проблема не в этом коде.
Это легко проверить: Закоментируй код этой кнопки и запусти - появится ошибка?
Если нет раскоментируй считывание - запусти. Потом Формирование данных для RichEdit - запусти, и так до последнего.
Узнаешь в каком месте родина сбоя.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2013, 19:27   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Похоже, что за пределы массивы лезешь
Код:
 H := High(Arr);
  for i := 0 to H do begin
Попробуй заменить на
Код:
 H := High(Arr);
  for i := 0 to H-1 do begin
Или
Код:
 H := Size;
  for i := 0 to H-1 do begin
TwiX вне форума Ответить с цитированием
Старый 16.06.2013, 19:33   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Попробуй заменить на
Не. С High динамческого массива все нормально. Вот значение j покапать не мешало бы, если выход, то из-за него скорее
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.06.2013, 19:38   #5
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Попробуй так:
Код:
BlockRead(F,@Arr,Size);
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 16.06.2013, 19:43   #6
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Да) Скорее всего, саша40 прав
BlockRead(F, Arr[0], Size); это сильно) (Может собаку забыл?)
TwiX вне форума Ответить с цитированием
Старый 16.06.2013, 19:46   #7
Poltish
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Значит проблема не в этом коде.
Это легко проверить: Закоментируй код этой кнопки и запусти - появится ошибка?
Если нет раскоментируй считывание - запусти. Потом Формирование данных для RichEdit - запусти, и так до последнего.
Узнаешь в каком месте родина сбоя.
Ошибки нет в случае если закомментирован BlockRead и вывод информации в RixhEdit
Poltish вне форума Ответить с цитированием
Старый 16.06.2013, 19:47   #8
Poltish
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 35
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
Попробуй так:
Код:
BlockRead(F,@Arr,Size);
[dcc32 Error] Unit1.pas(85): E2197 Constant object cannot be passed as var parameter
Вот такая ошибка вылазит
Poltish вне форума Ответить с цитированием
Старый 16.06.2013, 19:48   #9
Poltish
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 35
По умолчанию

Цитата:
Сообщение от TwiX Посмотреть сообщение
Да) Скорее всего, саша40 прав
BlockRead(F, Arr[0], Size); это сильно) (Может собаку забыл?)
Если честно я с темой чтения и записи в файл по средствам BlockRead и BlockWrite только начинаю работать. Не подскажете зачем тут собачка?
Poltish вне форума Ответить с цитированием
Старый 16.06.2013, 19:53   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Все правильно с Arr[0]. C собакой не прокатит и не должно. TC, ставь точку останова и пошагово проверяй где вылетаешь и почему
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти ошибку Яська Помощь студентам 1 04.04.2010 17:23
Ребят,надо найти ошибку vovey Помощь студентам 7 28.03.2010 12:40
Найти ошибку Uvaroff Помощь студентам 3 13.01.2010 01:45
Ребят найдите ошибку! agunek Помощь студентам 8 31.10.2009 16:24
ребят, помогите найти ошибку Frame1992 Помощь студентам 14 08.10.2009 02:01