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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2022, 01:10   #221
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Не вижу такого.
Код:
Да, я просто константу неправильно выставлял, сейчас разобрался.

На счёт кода Вашего, ну что , тут можно сказать? Вы настоящий профи и мастер своего дела, нам лузерам до такого уровня, как до Китая ползком. Но благодаря Вам и мы стараемся , учимся.
Всё просто замечательно и отлично, тут даже слов нет, рот открыт и одни эмоции...

Я единственно что не увидел выбор комбобокса в Вашем коде .

И второй момент, допустим поставили новую задачу: добавить ещё 3-4 списка для S19,S28,S37 как тогда быть? ну допустим ;

Код:
  const
ranges: array[0..7] of array[0..1] of Integer = (     // S19
    ($0000, $06C0),
    ($0870, $1F20),
    ($2080, $3A90),
    ($3DD0, $42C0),
    ($4C60, $58E0),
    ($6030, $73C0),
    ($0BAE0, $BF60),
    ($0E800, $FFFF)
  );  

 const
ranges: array[0..7] of array[0..1] of Integer = (     // S19
    ($0010, $04C0),
    ($0670, $1E20),
    ($3080, $2A90),
    ($2DD0, $32C0),
    ($4D60, $59E0),
    ($6230, $73D0),
    ($0CAE0, $BF60),
    ($0E700, $FFFF)
  );
И так несколько для каждой S, как тогда быть ?
sergey.serg-72 вне форума Ответить с цитированием
Старый 05.02.2022, 02:10   #222
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
в константе $FFFF, тогда надо +,, если $10000 то минус.
Нет, в выражении "ranges[j, 1] - addr" всегда минус, но если хочется, чтобы конец диапазона был включен, то нужно добавить в выражение "+ 1".
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
не увидел выбор комбобокса
Код:
      if ComboBox1.ItemIndex = -1 then
        raise Exception.Create('Не выбран диапазон!');
      ...
      with info[ComboBox1.ItemIndex] do
      begin
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
добавить ещё 3-4 списка для S19,S28,S37 как тогда быть?
Расширить массив записей info, добавить инициализацию новых записей аналогично имеющимся, добавить строки в комбобокс. Единственное ограничение, что сейчас в каждой записи должно быть строго 8 диапазонов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.02.2022, 10:01   #223
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Нет, в выражении "ranges[j, 1] - addr" всегда минус, но если хочется, чтобы конец диапазона был включен, то нужно добавить в выражение "+ 1".
Если выставляю адрес, $FFFF то тогда за место + addr, ставить просто + 1 я правильно понял ?
sergey.serg-72 вне форума Ответить с цитированием
Старый 05.02.2022, 10:02   #224
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
if ComboBox1.ItemIndex = -1 then
raise Exception.Create('Не выбран диапазон!');
...
with info[ComboBox1.ItemIndex] do
begin
Будем разбирать этот момент. Хотя на трёх позициях пока работает и так.
sergey.serg-72 вне форума Ответить с цитированием
Старый 05.02.2022, 10:05   #225
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
за место + addr, ставить просто + 1 я правильно понял
Нет, если хочется указывать диапазоны так, чтобы последний адрес каждого диапазона входил в выходной файл, то:
Код:
          while fbin.Position < Min(fbin.Size, ranges[j, 1] + 1) do
          begin
            addr := fbin.Position;
            read_count := fbin.Read(b[0], Min(BYTES_IN_LINE, ranges[j, 1] + 1 - addr));
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.02.2022, 10:21   #226
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Расширить массив записей info, добавить инициализацию новых записей аналогично имеющимся, добавить строки в комбобокс. Единственное ограничение, что сейчас в каждой записи должно быть строго 8 диапазонов.
добавить надо разбираться с этим , а в комбобокс добавить это понятный момент.
А вот то, что ограничение только на 8 и по разному нельзя, это не айс!.

При тестах использовал оба кода, адреса одинаковые, тестовые файлы тоже.
Файлы полностью идентичны, пошагово проверял , оба кода рабочие.
Вложения
Тип файла: rar Proga_test_.rar (174.5 Кб, 0 просмотров)
Тип файла: rar Тестовые файлы.rar (152.6 Кб, 0 просмотров)
sergey.serg-72 вне форума Ответить с цитированием
Старый 05.02.2022, 22:44   #227
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
А вот то, что ограничение только на 8 и по разному нельзя, это не айс!.
Это легко обойти, если добавить еще поле в TInfo, которое обозначает реальное количество диапазонов, но инициализировать придется всё равно все 8 (например, нулями).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 06.02.2022, 02:04   #228
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Это легко обойти, если добавить еще поле в TInfo, которое обозначает реальное количество диапазонов, но инициализировать придется всё равно все 8 (например, нулями).
да, но всё ровно не айс ! лишний, не нужный код, пустышка.

Я тестировал пошагово и отловил неприятный касячёк в наших кодах. В обработки 8 адресов, есть обработка , если нет одного диапазона. Но нет полной обработки диапазонов всех и что получается на выходе ? : прога прошла обработку по 7 диапазонам , но на 8 попалась .

$0BAE0, $BF60), этот диапазон прошла.
($0E800, $FFFF) а на этом, последнем спотыкнулась, файл не 65536 байт а меньше 65504 байта и получилось не хорошо $0E800 с этого начала , а конец то другой файла по этому данные испорчены считай. А если бы была полная обработка то прога должна была бы пропустить $0E800, $FFFF) этот диапазон полностью, но не пропкстила и перевела считай битый (неправильный ) файл. Как этот момент обработать ?

Так что тесты это не маловажная тоже работа.

p.s
тестовый обрезной файл в архиве.
Вложения
Тип файла: rar тест на обрыв.rar (29.0 Кб, 1 просмотров)

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

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
А если бы была полная обработка то прога должна была бы пропустить этот диапазон полностью
Да, вроде, не было формулировки до этого, что диапазон обязан быть целиком в файле, поэтому вычитывалось, что есть (диапазон частично). Вот так должен пропускать диапазон:
Код:
          if ranges[j, 0] < fbin.Size then
            fbin.Position := ranges[j, 0]
          else
            Break;
          if ranges[j, 1] > fbin.Size then
            Break;
          while fbin.Position < ranges[j, 1] do
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
лишний, не нужный код, пустышка
На мой взгляд, пара лишних чисел в данных всё равно лучше, чем дублирование кода.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 06.02.2022, 06:40   #230
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
if ranges[j, 0] < fbin.Size then
fbin.Position := ranges[j, 0]
else
Break;
if ranges[j, 1] > fbin.Size then
Break;
while fbin.Position < ranges[j, 1] do

Не, непо


Цитата:
Сообщение от BDA Посмотреть сообщение
Да, вроде, не было формулировки до этого, что диапазон обязан быть целиком в файле, поэтому вычитывалось, что есть (диапазон частично). Вот так должен пропускать диапазон:
Код:
if ranges[j, 0] < fbin.Size then
fbin.Position := ranges[j, 0]
else
Break;
if ranges[j, 1] > fbin.Size then
Break;
while fbin.Position < ranges[j, 1] do
Так все нюансы и не уследишь, это в процессе тестов выяснилось. А момент то существенный .
Этот код я тоже делал, но это не вариант, так как диапазон от 16 до 65536 , то может быть файл в котором 6 диапазонов полных можно считать, а которые не полный не считывать.
А с этим кодом просто пустой файл, хотя 6 из 8 диапазонов можно считать и нужно.
А так пустой файл, не вариант, могли целых 6 диапазонов считать и записать.

Я тоже, сижу над этим, пока не получается .
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