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

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

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

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

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

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

Цитата:
Сообщение от BDA Посмотреть сообщение
Это не так важно, чьи именно диапазоны. Они просто для примера.
Согласен !

Цитата:
Сообщение от BDA Посмотреть сообщение
Так эта программа только для проверки перехлеста диапазонов, заданных в том же виде, как и в коде генерации bin->srec.
Понял, но было бы отлично, если бы и файл S19,Hex проверяла, корректен ли, или где то строка не корректна и указание на повреждённую строку.....

Цитата:
Сообщение от BDA Посмотреть сообщение
Ну это же вспомогательная программа для проверки диапазонов перед использованием в коде преобразования. Сначала изменять описание диапазонов в ней, компилировать и проверять отсутствие пересечений, а потом просто копировать массив целиком в код преобразования. Но вы вольны сделать сколь угодно красивый интерфейс.
Это да, но если пользователь который хочет проверить свои диапазоны, где ему исходники брать?
Вот если бы ввёл в мемо диапазон, проверил и если всё ок! скопировал и вставил в программу. И быстрл и исходник не надо каждый раз, под диапазон теребить.
Волен то волен, да если бы сам мог, то уже сделал бы.
А так не понятно как реализовать мемо и ввод диапазонов, как проверить корректен ли сам файл, или где то строка повреждена.... Это для меня трудная задача.....
Тут одной воли маловато будет ....

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

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

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
если всё корректно, чтобы писала что пересечений нет
Например, можно завести флаг для этого:
Код:
procedure TForm1.btn1Click(Sender: TObject);
const
  ranges: array[0..8] of array[0..2] of Int64 = (
    // new start, old start, old end
    ($01870, $01870, $04000),
    ($020F0, $020F0, $08000),
    ($08000, $00000, $04000),
    ($0C000, $0C000, $10000),
    ($18000, $04000, $08000),
    ($28000, $08000, $0C000),
    ($38000, $0C000, $10000),
    ($48000, $10000, $14000),
    ($58000, $14000, $18000)
  );
var
  i, j: integer;
  range_end_i, range_end_j: Int64;
  no_intersections: boolean;
begin
  no_intersections := True;
  with mmo1 do
  begin
    Clear;
    Lines.BeginUpdate;
    for i := Low(ranges) to High(ranges) do
    begin
      range_end_i := ranges[i, 2] + ranges[i, 0] - ranges[i, 1];
      for j := i + 1 to High(ranges) do
      begin
        range_end_j := ranges[j, 2] + ranges[j, 0] - ranges[j, 1];
        if (range_end_i > ranges[j, 0]) and (ranges[i, 0] < range_end_j) then
        begin
          Lines.Add(Format('%d intersects %d', [i, j]));
          no_intersections := False;
      end;
    end;
    if no_intersections then
      Lines.Add('No intersections');
    Lines.EndUpdate;
  end;
end;
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Вот если бы ввёл в мемо диапазон
Не уверен, что именно мемо лучше всего подходит для ввода диапазонов. Нужно определиться, в каком именно виде будут вводиться числа (наличие пробелов, скобок, запятых). Допустим, если вводятся только числа через запятую по три в строку, то достаточно будет "резать" строку по запятой и преобразовывать кусочки в числа.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Это для меня трудная задача
Разбивайте задачу на задачки поменьше, пока они не станут достаточно простыми для решения. Без практики все задачи будут оставаться сложными.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 24.03.2022, 22:09   #343
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

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

Чуток подправил
Код:
 begin
          Lines.Add(Format('Диапазон №  %d  пересекает   Диапазон №  %d', [i, j]));
          no_intersections := False;
      end;
    end;
    if no_intersections then
     memo1.Text:=('Диапазоны не пересекаются , всё корректно ! ');
    Lines.EndUpdate;
sergey.serg-72 вне форума Ответить с цитированием
Старый 24.03.2022, 22:15   #344
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Не уверен, что именно мемо лучше всего подходит для ввода диапазонов. Нужно определиться, в каком именно виде будут вводиться числа (наличие пробелов, скобок, запятых). Допустим, если вводятся только числа через запятую по три в строку, то достаточно будет "резать" строку по запятой и преобразовывать кусочки в числа.
Да, момент важный и заморочки с ним , вводить наверное так и надо как есть
Код:
    ($01870, $01870, $04000),
    ($020F0, $020F0, $08000),
    ($08000, $00000, $04000),
    ($0C000, $0C000, $10000),
    ($18000, $04000, $08000),
    ($28000, $08000, $0C000),
    ($38000, $0C000, $10000),
    ($48000, $10000, $14000),
    ($58000, $14000, $18000)
Другой вопрос что могут быть варианты и с 2 только диапазонами и с диапазоном у которого последний адрес, стоит последним (по старому), всё не так просто, заморочек много получается.

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

Цитата:
Сообщение от BDA Посмотреть сообщение
Разбивайте задачу на задачки поменьше, пока они не станут достаточно простыми для решения. Без практики все задачи будут оставаться сложными.
Да, согласен, сегодня дали файл, найти ошибку , где то некорректно в файле, вопрос где? Тритон пишет что ошибка контрольной суммы строки, а какой и одной ли ?, не пишет, как и другие редакторы. Вот как искать проблему, по строчно пересчитывать весь файл?
Я же говорил что программка по проверки файла, будет актуальной, так и вышло.
Изображения
Тип файла: jpg ошибка.JPG (7.2 Кб, 16 просмотров)
Вложения
Тип файла: rar Некорректный файл .rar (26.0 Кб, 3 просмотров)

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

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
вводить наверное так и надо как есть
Можно попробовать повырезать строки между "$" и ",", между следующим "$" и ",", а затем между "$" и ")", используя posex, copy и trim.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
могут быть варианты
Стоит реализовать хотя бы один. А другие получатся или легким переделыванием кода или добавлением нескольких if.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Вот как искать проблему, по строчно пересчитывать весь файл?
Такая проблема уже была год назад. Можно воспользоваться SRecord, которая сама исправит контрольные суммы (а потом можно будет сравнить старый и новый файл, чтобы найти место). Или скормить ваш файл скрипту с 15й страницы этой темы, результат будет такой:
Код:
WRONG CHECKSUM 0xf - 4: S21400803024015CA04D9FA2009037957F8C20359E42
WRONG CHECKSUM 0x0 - 2046: S21400FFD00485DCC70359CF03589EFE022604CC6077
END CHECK
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 25.03.2022, 18:17   #347
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Можно попробовать повырезать строки между "$" и ",", между следующим "$" и ",", а затем между "$" и ")", используя posex, copy и trim.
Нет, Вы правы были, лучше вводить диапазоны в исходник и проверять, так лучше, чем вырезать, убавлять для мемо. Исходник переделать можно и под другие диапазоны и всё корректно, опробовал. Лучше будет с исходником , Вы правы тогда были.

Цитата:
Сообщение от BDA Посмотреть сообщение
Стоит реализовать хотя бы один. А другие получатся или легким переделыванием кода или добавлением нескольких if.
Лучше исходник на ходу чуток подправить и проверить, диапазоны.

Цитата:
Сообщение от BDA Посмотреть сообщение
Такая проблема уже была год назад. Можно воспользоваться SRecord, которая сама исправит контрольные суммы (а потом можно будет сравнить старый и новый файл, чтобы найти место). Или скормить ваш файл скрипту с 15й страницы этой темы, результат будет такой:
Код:
WRONG CHECKSUM 0xf - 4: S21400803024015CA04D9FA2009037957F8 C20359E42



WRONG CHECKSUM 0x0 - 2046: S21400FFD00485DCC70359CF03589EFE022 604CC6077
END CHECK
Я так и не понял где по ссылке можно скачать SRecord, не вижу скачки на сайте.
Исправит контрольную сумма как, подогнав под строку? А если надо скажем не 02, а 03 , SRecord исправит контролку, но испорченные данные не найдёт.Сравнение тоже много не даст, так как контролку можно подогнать под данные, а как понять какой файл корректный, а какой после исправления уже нет ?
Или скормить ваш файл скрипту с 15й страницы этой темы, результат будет такой:

А как скормить там код на питоне и не полный, как его использовать?

Вчера пол ночи просидел, пересчитывал в ручную, нашёл две строки , а вот как исправлять, чтоб не просто подгонять данные под контролку, а найти истинную ошибку?


Код:
from sys import stdin

for num, line in enumerate(stdin, 1):
    line = line.strip()
    if len(line) % 2 == 1:
        print("WRONG LINE LENGTH - %d: %s" % (num, line))
        continue
    sum = 0
    for i, c in enumerate(line[2:], 1):
        n = int(c, 16) * (16 ** (i % 2))
        sum += n
    sum &= 255
    if sum != 255:
        print("WRONG CHECKSUM 0x%x - %d: %s" % (sum, num, line))
print("END CHECK")
как этот код можно использовать в дельфи ?

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

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
где по ссылке можно скачать SRecord
На странице download есть ссылки, например, The 1.64 release folder.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
как понять какой файл корректный, а какой после исправления уже нет
Если контрольная сумма правильная, то исправление нельзя выявить.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
как исправлять, чтоб не просто подгонять данные под контролку, а найти истинную ошибку?
Никак, так как такая контрольная сумма подходит только для обнаружения факта ошибки. Почитайте на досуге Код Хэмминга. Пример работы алгоритма.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
А как скормить там код на питоне и не полный, как его использовать?
Вполне полный, две ошибочных строки нашел. Сначала нужно установить какую-нибудь версию питона на ПК, сохранить код скрипта в файл (например, srec-checker.py), положить в эту же папку файл srec (например, Некорректный файл .S19), открыть командную строку в этой же папке и выполнить команду:
Код:
python3 srec-checker.py < "Некорректный  файл  .S19"
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
как этот код можно использовать в дельфи ?
Самый простой (и более правильный, учитывая количество кода в скрипте) подход, написать аналогичный код на дельфи. Есть более сложные пути: вызывать скрипт из приложения дельфи как отдельный процесс и выводить результат; использовать библиотеку (python4delphi) для интеграции между питоном и дельфи (хотя, похоже она не работает с дельфи 7).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 26.03.2022, 07:05   #349
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
На странице download есть ссылки, например, The 1.64 release folder.
Что то у меня не открывается,блокируется сайт типа не безопасный сайт.

Цитата:
Сообщение от BDA Посмотреть сообщение
Если контрольная сумма правильная, то исправление нельзя выявить.
Да и если неправильная тоже не выявишь, любые из данных можно изменить и контролка неправильная будет. 02,на 03, или 0B на 0С, как тут узнаешь?

Цитата:
Сообщение от BDA Посмотреть сообщение
Вполне полный, две ошибочных строки нашел. Сначала нужно установить какую-нибудь версию питона на ПК, сохранить код скрипта в файл (например, srec-checker.py), положить в эту же папку файл srec (например, Некорректный файл .S19), открыть командную строку в этой же папке и выполнить команду:
Думаю не лучший вариант, устанавливать среду, на которой не пишешь ради проверки файла, место на компе занимать, его и так не много. А вдруг вирусняк ещё в среде?....

Цитата:
Сообщение от BDA Посмотреть сообщение
Самый простой (и более правильный, учитывая количество кода в скрипте) подход, написать аналогичный код на дельфи.
Вот это самый лучший и правильный вариант, есть своя среда, которая не хуже питона.
Плюс своя программа.
Вопрос как перевести код питона на дельфи?
Я не вижу в коде, не переменных, ни загрузке файла в программу.
Хотя думаю что код для Дельфи не должен быть большим.
А выводить либо в edit, либо в label .
Загрузил файл проверил корректность, вывел информацию.
Можно вторую кнопку для изменения контролки (если не правильная, на правильную ).
Чем мы хуже, Питера Миллера?

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

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
блокируется сайт типа не безопасный сайт
У меня только пишет, что подключение к сайту не защищено, но сайт открывается.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
любые из данных можно изменить и контролка неправильная будет
Да.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
место на компе занимать, его и так не много
Можно поискать онлайн, например, https://www.onlinegdb.com/online_python_compiler. Вставить код в верхнее окошко, а содержимое файла скопировать в нижнее, выбрав режим Text, а потом нажать Run.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
ни загрузке файла в программу.
Потому что скрипт анализирует данные со стандартного потока ввода.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
как перевести код питона на дельфи?
Скрипт проверяет каждую строчку на 3 условия: строка четной длины; контрольная сумма равна 255 (каждый символ, начиная с 3его, преобразуется в 16ричное число и прибавляется к сумме, потом от суммы отбрасываются лишние байты, оставляя младший); заодно при преобразовании выяснится, если какой-то символ не является 16ричным числом. Просто реализуйте эти 3 условия на дельфи.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
А выводить либо в edit, либо в label .
Если выводить информацию о нескольких ошибочных строках, а не останавливаться на первой, то уж лучше memo.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Хотя думаю что код для Дельфи не должен быть большим.
В принципе, да. Но даже простая заготовка (только что созданный пустой проект), созданная средой, уже 75% от кода скрипта по объему. Так что получится чуть менее лаконично.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 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