Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


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

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


Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2021, 18:33   #71
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Осталось удалить offset из объявлений переменных, инициализацию offset нулем и прибавление offset к fbin.Position.
Всё сделал, надо было про тестить, чтоб без сюрпризов ...
Пусть будут два варианта выбора, кому та так, а кому так подойдёт.
Код:
 const
BYTES_IN_LINE = 16;
var
fbin: TMemoryStream;
ftxt: TMemoryStream;
s, data_s: string;
b: TBytes;
i, count,  high_addr, cur_high_addr: integer;
sum: byte;
low_addr: word;
begin
with dlgOpen1 do
begin
Filter := 'Binary file (*.bin)|*.bin';
if Execute then
begin
fbin := TMemoryStream.Create;
ftxt := TMemoryStream.Create;
fbin.LoadFromFile(FileName);
SetLength(b, BYTES_IN_LINE);
high_addr :=0;
while fbin.Position < fbin.Size do
begin
low_addr := fbin.Position ;
cur_high_addr := (fbin.Position ) div $10000;
if cur_high_addr <> high_addr then
begin
high_addr := cur_high_addr;
sum := 6 + high_addr mod $100 + high_addr div $100;
sum := -sum;
s := Format(':02000004%.4x%.2x%s', [high_addr, sum, sLineBreak]);
ftxt.Write(s[1], Length(s));
end;
count := fbin.Read(b[0], BYTES_IN_LINE);
sum := count + low_addr mod $100 + low_addr div $100;
data_s := '';
for i := 0 to count - 1 do
begin
data_s := data_s + IntToHex(b[i], 2);
Inc(sum, b[i]);
end;
sum := -sum;
s := Format(':%.2x%.4x00%s%.2x%s', [count, low_addr, data_s, sum, sLineBreak]);
ftxt.Write(s[1], Length(s));
end;
s := ':00000001FF';
ftxt.Write(s[1], Length(s));
dlgSave1.Filter := 'Intel HEX File (*.hex)|*.hex';
dlgSave1.FileName := ChangeFileExt(FileName, '.hex');
if dlgSave1.Execute() then
begin
ftxt.SaveToFile(dlgSave1.FileName);
Application.MessageBox(' HEX  Файл  успешно  записан.', 'Сообщение', MB_Ok + MB_ICONINFORMATION);
end;
fbin.Free;
ftxt.Free;
end;
end;
end;
sergey.serg-72 вне форума Ответить с цитированием
Старый 15.03.2021, 20:25   #72
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

sergey.serg-72,

Сейчас пробую из HEX в bin преобразовать.
Должно быть легче.

Фиг там легче, какая то засада обрезает тоже, другие не берёт ....

Код:
  var
  S: String;
  i,j,C: Integer;
  F: TFileStream;
  ABytes: TBytes;
  ST: TStringList;
begin
 dlgOpen1.Filter := ' (*hex)|*.hex';
if dlgOpen1.Execute then
 begin
  F := TFileStream.Create(ChangeFileExt( dlgOpen1.FileName, '.bin'), fmCreate);
  ST := TStringList.Create;
  ST.LoadFromFile( dlgOpen1.FileName);
  SetLength(ABytes, 0);

  for j := 0 to ST.Count - 1 do
  begin
    S := Copy(ST[j], 10, Length(ST[j])-11);
    C := Length(S) div 2;
    SetLength(ABytes, Length(ABytes) + C);
    for i := 1 to C do
      ABytes[j*C+i-1] := StrToInt('$'+S[i*2-1]+S[i*2]);
  end;
  F.Write(ABytes[0], Length(ABytes));
Application.MessageBox(' Bin  Файл  успешно  записан.', 'Сообщение', MB_Ok + MB_ICONINFORMATION);
  F.Free;
  ST.Free;
end;
end;

Последний раз редактировалось sergey.serg-72; 16.03.2021 в 00:16.
sergey.serg-72 вне форума Ответить с цитированием
Старый 16.03.2021, 05:54   #73
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 6,005
По умолчанию

Цитата:
Сообщение от sergey.serg-72
Программы оказались не готовы к большим файлам
Ну так и наша программа не все случаи корректно обработает. Если подать на вход достаточно большой файл (сотни мегабайт), то она упадет. Если не сможет открыть файлы на чтение или запись, то упадет. Так что есть еще, что можно улучшить.
Цитата:
Сообщение от sergey.serg-72
не справились со смещением , после обратной конвертации в bin
Значит разработчикам данных конвертеров не попадались hex со смещением. Возможно, конвертеры писались под конкретный случай (входной размер файла, сами записи данных подряд). HxD нулями заполнил все дырки в bin файле, где не хватало данных в hex.
Цитата:
Сообщение от sergey.serg-72
ошибка контрольной суммы строки и файл повреждён
Предположу, что конвертерам не понравилась пустая строка в конце hex файла после редакторов.
Цитата:
Сообщение от sergey.serg-72
разработчики что не тестировали свои программы?
Вполне может быть. Если программа пишется под себя для какой-то рутинной автоматизации, то обычно не заморачиваются кучей проверок. Просто добиваются приемлемой работы на своем наборе входных данных.
Цитата:
Сообщение от sergey.serg-72
А что перевод из hex в bin , это трудней ?
На мой взгляд, да. Из bin в hex знай себе читай по 16 байт и пиши строку на выход. А наоборот нужно больше всего проверять. Особенно если не просто брать из строки текст с десятого по 3й с конца и пытаться преобразовать в байты, но и проверять корректность формата (что длина данных совпадает с записанной длиной, что контрольная сумма совпадает), обрабатывать записи 04 (содержащие смещение). Да и адрес в записи 00 может прыгать из начала в конец выходного bin файла и обратно.
Цитата:
Сообщение от sergey.serg-72
Программы нельзя как я понял размещать на сайте?
Если не уверены, что их можно свободно распространять, то нельзя.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.03.2021, 23:15   #74
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Ну так и наша программа не все случаи корректно обработает. Если подать на вход достаточно большой файл (сотни мегабайт), то она упадет. Если не сможет открыть файлы на чтение или запись, то упадет. Так что есть еще, что можно улучшить.
Наша, честней и правильней сказать Ваша программа, обработала файл сегодня в 8261832 байта,нашёл в инете такой файл и проверил, да делала не быстро, прога чуток замерла, но сделала и корректно (в редакторах проверил) не знаю много , или это мало (думаю не маленький файл) но программа сделала, я в работе больше файлов, пока не встречал, а те упали уже на 98304 байта, средней микроконтроллер ... .

Сейчас новый рекорд , делала правда 9 минут 40 секунд , но сделала размер файла :24759256 байта, вот и думай мало это, или нет ? Да, редакторы быстрей сделали, но и они подвисали немного.
Изображения
Тип файла: jpg размер.JPG (13.2 Кб, 19 просмотров)

Последний раз редактировалось sergey.serg-72; 16.03.2021 в 23:41.
sergey.serg-72 вне форума Ответить с цитированием
Старый 16.03.2021, 23:50   #75
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Значит разработчикам данных конвертеров не попадались hex со смещением. Возможно, конвертеры писались под конкретный случай (входной размер файла, сами записи данных подряд). HxD нулями заполнил все дырки в bin файле, где не хватало данных в hex.
Один, по крайней мереи как в описании к нему было, предназначен для микроконтроллеров и микросхем, а значить автор должен был учитывать эти моменты, а упасть на 98304 байтах это что за микросхемы 24С02 ?
sergey.serg-72 вне форума Ответить с цитированием
Старый 16.03.2021, 23:56   #76
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Предположу, что конвертерам не понравилась пустая строка в конце hex файла после редакторов.
Так после Вашей программы принимали, а редакторские нет, файл, один и тот же .
Что им там не нравилось не знаю , но такими программами пользоваться нельзя, если нет уверенности и если не делают предписанного им.
sergey.serg-72 вне форума Ответить с цитированием
Старый 17.03.2021, 00:02   #77
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Вполне может быть. Если программа пишется под себя для какой-то рутинной автоматизации, то обычно не заморачиваются кучей проверок. Просто добиваются приемлемой работы на своем наборе входных данных.
Когда пишут для себя и под свои задачи, не выкладывают в общий доступ и тем более не уверяют, что будет всё корректно, как в описании написано. Проверки должны быть когда знаешь что программа пойдёт в массы.
sergey.serg-72 вне форума Ответить с цитированием
Старый 17.03.2021, 00:08   #78
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
На мой взгляд, да. Из bin в hex знай себе читай по 16 байт и пиши строку на выход. А наоборот нужно больше всего проверять. Особенно если не просто брать из строки текст с десятого по 3й с конца и пытаться преобразовать в байты, но и проверять корректность формата (что длина данных совпадает с записанной длиной, что контрольная сумма совпадает), обрабатывать записи 04 (содержащие смещение). Да и адрес в записи 00 может прыгать из начала в конец выходного bin файла и обратно.
Да, я уже понял это задача для меня не подъёмна, оставил эту затею. Лучше srec ещё сделать, чем обратный перевод.
Читаю srec, как понял там S, далее запись, количество байт в строке и адрес, всё по другому.
Всё за ново там надо делать..... Но srec как я понял больше приспособлен к смещению и там окно ввода для смещения обязательно.
sergey.serg-72 вне форума Ответить с цитированием
Старый 17.03.2021, 00:10   #79
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Если не уверены, что их можно свободно распространять, то нельзя.
Удалил их все, они в свободном были распространении, но я уже удалил их.
sergey.serg-72 вне форума Ответить с цитированием
Старый 17.03.2021, 00:16   #80
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

sergey.serg-72,
Над разборкой и описанием кода Вашего сижу целый вечер вчера и сегодня.
Но мне кажется что что то неправильно описал, что то не допонял.....
А хочу разобраться и понять до конца.
Многое ново для меня и впервые в коде . А понимать надо.
Стараюсь разобраться .Но что то плохо идёт....
Вложения
Тип файла: rar описание кода.rar (2.1 Кб, 1 просмотров)
sergey.serg-72 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 20000 рублей в месяц

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно создать "батник", вырезать из "2.txt" первых n строк и вставить их в "1.txt" temphard Помощь студентам 2 03.09.2013 15:03
Удаление первых n-строк из txt-файла Neksion Помощь студентам 2 10.07.2013 17:12
Создать чтение из файла и запись в файл txt на С++ skifre Фриланс 0 01.06.2012 15:16
поиск и выципление строк из txt файла D_e_n_n Помощь студентам 7 04.02.2011 05:39
C# Представление txt файла как массива строк asheb Помощь студентам 7 20.04.2010 11:51


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS