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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2022, 23:48   #201
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Особо не тестировал, но вроде работает:
Код:
const
  BYTES_IN_LINE = 16;
  sLineEnd = #13#10;
  ranges: array[0..7] of array[0..1] of Integer = (
    ($000, $020),
    ($050, $070),
    ($090, $0B0),
    ($0E0, $110),
    ($150, $170),
    ($1A0, $1C0),
    ($1F0, $230),
    ($2B0, $370)
  );
var
  fbin, ftxt: TFileStream;
  s, data_s: string;
  b: TBytes;
  addr: Int64;
  i, j, count, read_count: Integer;
  sum: byte;
begin
  fbin := nil;
  ftxt := nil;
  try
    try
      if not dlgOpen1.Execute then
        exit;
      fbin := TFileStream.Create(dlgOpen1.FileName, fmOpenRead or fmShareDenyWrite);
      if fbin.Size > 1000 then
        raise Exception.Create('Слишком большой файл!');
      if fbin.Size < 5 then
        raise Exception.Create('Слишком маленький файл!');
      dlgSave1.Filter := 'Motorola S19 (*.s19)|*.s19|Motorola (*.srec; *.s)|*.srec; *.s';
      dlgSave1.FileName := ChangeFileExt(dlgOpen1.FileName, '.s19');
      dlgSave1.DefaultExt := 's19';
      if not dlgSave1.Execute then
        exit;
      ftxt := TFileStream.Create(dlgSave1.FileName, fmCreate or fmShareDenyWrite);
      BeforeConvert(Sender, fbin.Size div BYTES_IN_LINE);
      SetLength(b, BYTES_IN_LINE);
      s := 'S00600004844521B' + sLineEnd;
      ftxt.Write(s[1], Length(s));
      for j := Low(ranges) to High(ranges) do
      begin
        if ranges[j, 0] < fbin.Size then
          fbin.Position := ranges[j, 0]
        else
          Break;
        while fbin.Position < Min(fbin.Size, ranges[j, 1]) do
        begin
          addr := fbin.Position;
          read_count := fbin.Read(b[0], Min(BYTES_IN_LINE, ranges[j, 1] - addr));
          count := read_count + 3;
          sum := count + addr and $FF + (addr shr 8) and $FF;
          data_s := '';
          for i := 0 to read_count - 1 do
          begin
            data_s := data_s + IntToHex(b[i], 2);
            Inc(sum, b[i]);
          end;
          sum := $FF - sum;
          s := Format('S1%.2x%.4x%s%.2x', [count, addr, data_s, sum]) + sLineEnd;
          ftxt.Write(s[1], Length(s));
        end;
      end;
      s := 'S9030000FC' + sLineEnd;
      ftxt.Write(s[1], Length(s));
      s := 'Файл успешно преобразован и записан.';
      Application.MessageBox(PAnsiChar(s), 'Converter', MB_Ok + MB_ICONINFORMATION);
    except
      on E : Exception do
        Application.MessageBox(PAnsiChar(E.Message), 'Converter', MB_Ok + MB_ICONERROR);
    end;
  finally
    fbin.Free;
    ftxt.Free;
  end;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 03.02.2022 в 23:32.
BDA вне форума Ответить с цитированием
Старый 03.02.2022, 03:34   #202
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Особо не тестировал, но вроде работает:
Не прокатит этот вариант, дело то имеем с комбобоксам , а там у нас как минимум 4 варианта
Код:
case Combobox1.ItemIndex of
0:
begin
start_pos :=
end_pos := 

start_pos :=
end_pos := 


end;

1:
begin
start_pos := 
end_pos := 
start_pos := 
end_pos := 
start_pos := 
end_pos := 

end;
2:
begin
start_pos :=;
end_pos := 
start_pos :=;
end_pos := 
start_pos :=;
end_pos := 
start_pos :=;
end_pos := 
end;



3:
begin
start_pos :=
end_pos := 
start_pos :=
end_pos := 
start_pos :=
end_pos := 
start_pos :=
end_pos := 
start_pos :=
end_pos := 
start_pos :=
end_pos := 
end;
4:
begin
start_pos := 
end_pos := 
start_pos :=
end_pos := 
start_pos :=
end_pos := 
start_pos :=
end_pos := 
start_pos :=
end_pos := 
start_pos :=
end_pos := 
start_pos :=
end_pos := 
end;
И на каждом свои адреса на одном три варианта и разные размером файлы, на втором уже 4 и тоже другие адреса и размеры , на 4 тоже и так до восьми , до последнего....

Сколько массивов понадобится для каждой от 0 до 4? для каждой вкладке ?
Или создавать несколько констант под каждую вкладку с адресами ?
Код конский получится наверное? и куда из кода делся case ? у нас 4 вкладки и везде надо по разному и как это к case пристроить?

Вот не зря, я боялся этого комбокса и не долюбливал его..... Как вот все 4 вкладки между собой соединить ?
Батан говорил что как то в цикле обрабатывал соответствующей вкладки , временный буфер, потом на запись. Но как ума не приложу? либо case, либо If else не избежать.
И от комбобокса не отделаться , это . если несколько кнопок или попуменю то да. но с комбо не прокатит. Весь мозг сломал уже.

Последний раз редактировалось sergey.serg-72; 03.02.2022 в 03:48.
sergey.serg-72 вне форума Ответить с цитированием
Старый 03.02.2022, 04:11   #203
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Особо не тестировал, но вроде работает:
Да и ещё момент после конвертации при загрузке в редактор пишет что ошибка в строке и не открывает файл и плюс к этому не дозаписывает один последний байт в конце файла.
Мне кажется что это из за min я вчера этот момент заметил с ним обрезает один байт. без него всё нормально.
Код:
           read_count := fbin.Read(b[0], BYTES_IN_LINE, ranges[j, 1] - addr));

while fbin.Position < Min(fbin.Size, ranges[j, 1]) do
думаю проблема в min как его добавили сразу один байт стал обрезаться.
Не знаю что эта функция выравнивает. но последний байт обрезает это факт.
Изображения
Тип файла: jpg 1.JPG (9.0 Кб, 7 просмотров)

Последний раз редактировалось sergey.serg-72; 03.02.2022 в 04:21.
sergey.serg-72 вне форума Ответить с цитированием
Старый 03.02.2022, 04:44   #204
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Да и ещё момент после конвертации при загрузке в редактор пишет что ошибка в строке и не открывает файл и плюс к этому не дозаписывает один последний байт в конце файла.
Что то от этого min только файлы ломает.
Изображения
Тип файла: jpg 1.JPG (7.9 Кб, 7 просмотров)
sergey.serg-72 вне форума Ответить с цитированием
Старый 03.02.2022, 06:23   #205
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Перечитал последние сообщения и окончательно запутался. Что именно должно с помощью комбобокса выбираться?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.02.2022, 06:53   #206
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Перечитал последние сообщения и окончательно запутался. Что именно должно с помощью комбобокса выбираться?
да всё просто, у комбобокса у нас в case от 0 до 4 , каждая вкладка скажем 0: на ней три варианта с тремя адресами и разные размеры файла. На 1: свои уже 5 скажем обработок с разными адресами и размерами и так до 4.

Сколько у комбобокса 4 пока позиции , а у нас код только под последнюю под 4 :.

И везде разные размеры файлов и разные должны обрабатываться данные.

Сколько у нас в case вырезалке 4 позиции и везде разные адреса и размеры
Разные диапазоны у всех вкладок комбобокса вырезаемых данных так и тут.

Последний раз редактировалось sergey.serg-72; 03.02.2022 в 07:02.
sergey.serg-72 вне форума Ответить с цитированием
Старый 03.02.2022, 07:15   #207
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
разные размеры файла
Какие конкретно размеры и диапазоны для 0й строки комбобокса, а какие для 1й?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.02.2022, 07:32   #208
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Какие конкретно размеры и диапазоны для 0й строки комбобокса, а какие для 1й?
Для
Код:
begin
  case Combobox1.ItemIndex of
    0:
      begin
   start_pos := $0 ;  end_pos := $120 ;

start_pos := $150;   end_pos := $270 ;   // всё что между пропускается

start_pos := $190;   end_pos := $240;

start_pos := $0E0  ;   end_pos := $110;

start_pos := $0150;   end_pos :=  $0170;

      end;
    1:
      begin
     start_pos := $A0 ;  end_pos := $0260 ;

start_pos := $060;   end_pos := $120 ;   // всё что между пропускается

start_pos := $2B0;   end_pos := $310;

start_pos := $290  ;   end_pos := $320;

start_pos := $0150;   end_pos :=  $360;

start_pos := $0200;   end_pos :=  $340;

      end;
Везде разные произвольные.

Последний раз редактировалось sergey.serg-72; 03.02.2022 в 07:34.
sergey.serg-72 вне форума Ответить с цитированием
Старый 03.02.2022, 07:42   #209
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Везде разные произвольные.
Какие-то странные диапазоны. Почему они пересекаются внутри одной группы? И почему размеры файлов никак не упоминаются?
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
всё что между пропускается
До этого было наоборот, всё что между start_pos и end_pos выводится в текстовый файл (а что не попало в этот диапазон, то пропускается).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 03.02.2022 в 07:45.
BDA вне форума Ответить с цитированием
Старый 03.02.2022, 07:58   #210
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Какие-то странные диапазоны. Почему они пересекаются внутри одной группы? И почему размеры файлов никак не упоминаются?
да потому что сказано произвольно, так и сделал как пример ,а где размеры файлов упоминать,я их уже настругал из за этих тестов штук 30. И у каждого разный размер. Это же тестовые, произвольные.

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

Последний раз редактировалось BDA; 03.02.2022 в 08:47.
sergey.serg-72 вне форума Ответить с цитированием
Ответ


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



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