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

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

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

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

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

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

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

Цитата:
Сообщение от BDA Посмотреть сообщение
Можно поискать онлайн, например, https://www.onlinegdb.com/online_python_compiler. Вставить код в верхнее окошко, а содержимое файла скопировать в нижнее, выбрав режим Text, а потом нажать Run.
Тоже не пускает на сайт и всё тут, сбрасывает подключение и выкидывает ....

Цитата:
Сообщение от BDA Посмотреть сообщение
Скрипт проверяет каждую строчку на 3 условия: строка четной длины; контрольная сумма равна 255 (каждый символ, начиная с 3его, преобразуется в 16ричное число и прибавляется к сумме, потом от суммы отбрасываются лишние байты, оставляя младший); заодно при преобразовании выяснится, если какой-то символ не является 16ричным числом. Просто реализуйте эти 3 условия на дельфи.
Нет не смогу , сам реализовать не реально, пробовал но не получается . Мне не по зубам эта задача, слишком трудная.

Цитата:
Сообщение от BDA Посмотреть сообщение
Если выводить информацию о нескольких ошибочных строках, а не останавливаться на первой, то уж лучше memo.
Согласен , строк повреждённых может быть несколько Вы, правы !.

Цитата:
Сообщение от BDA Посмотреть сообщение
В принципе, да. Но даже простая заготовка (только что созданный пустой проект), созданная средой, уже 75% от кода скрипта по объему. Так что получится чуть менее лаконично.
Ну заготовку сама среда делает, это не в счёт.

А у Вас есть среда питона? можете сделать экзешник и выложить его? было бы проще и без головной боли.

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

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Тоже не пускает на сайт и всё тут
Странно.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
можете сделать экзешник и выложить его?
Могу, но не буду по нескольким причинам: он много весит (4.5 мегабайта), такой объем не поддерживается форумом; не знаю, насколько он работоспособен на разных версиях ОС; готовый exe уже нельзя менять; exe никак не поможет в собственной реализации на дельфи; питон, интерпретируемый язык (с оговорками, что исходный код компилируется в байт-код), так что создание exe претит сути языка
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Мне не по зубам эта задача
Начните с малого, создайте TStringList и загрузите в него какой-нибудь srec файл. Добавьте TOpenDialog, чтобы выбирать файл с помощью него. Добавьте цикл, который проходит по всем строкам в TStringList. А потом уже можно внутри этого цикла делать всякие проверки для каждой строки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

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

Цитата:
Сообщение от BDA Посмотреть сообщение
Странно.
Вот и мне странно, но факт !
Изображения
Тип файла: jpg 1.JPG (46.8 Кб, 11 просмотров)
sergey.serg-72 вне форума Ответить с цитированием
Старый 29.03.2022, 00:59   #354
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Могу, но не буду по нескольким причинам: он много весит (4.5 мегабайта), такой объем не поддерживается форумом; не знаю, насколько он работоспособен на разных версиях ОС; готовый exe уже нельзя менять; exe никак не поможет в собственной реализации на дельфи; питон, интерпретируемый язык (с оговорками, что исходный код компилируется в байт-код), так что создание exe претит сути языка
Плохой питон тогда получается !
sergey.serg-72 вне форума Ответить с цитированием
Старый 29.03.2022, 01:11   #355
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Начните с малого, создайте TStringList и загрузите в него какой-нибудь srec файл. Добавьте TOpenDialog, чтобы выбирать файл с помощью него. Добавьте цикл, который проходит по всем строкам в TStringList. А потом уже можно внутри этого цикла делать всякие проверки для каждой строки.
Создать можно,и загрузить можно файл, цикл можно и даже посчитать количество строк и байт в файле контрольную сумму файла можно, но это не то совсем. Мало у меня опыта с текстовыми файлами ...... Ерунда получается и совсем не то , что хотелось бы.

Код:
 var
st: TStringList;
f: TMemoryStream;
CS:Byte;
i,Res,Sum: integer;
begin
OpenDialog1.Filter:='S19 File (*.S19)|*.S19';
if OpenDialog1.Execute then
AssignFile(TEXT_FILE,OpenDialog1.FileName); //связываем дескриптор
begin
f := TMemoryStream.Create;
f.LoadFromFile(OpenDialog1.FileName);
st := TStringList.Create;
st.LoadFromFile(OpenDialog1.FileName);
Begin
Sum:=0;    //обнуляем контрольную сумму 
Reset(TEXT_FILE) ;   //открываем файл для чтения 
While Not Eof(TEXT_FILE) Do Begin   //пока не конец файла 
Read(TEXT_FILE,CS);  //читаем один байт из файла 
Sum:=Sum+CS;//прибавляем этот байт к контрольной сумме 
End;
Res:=Sum Mod 10000;//делим полученный результат на большое число 
Label3.Caption:='CS  файла  :'+IntToStr(Res); //выводим результат 
CloseFile(TEXT_FILE);
End;
for i := 0 to st.Count - 1 do
begin
Memo1.Lines.Add(st[i]);
Label1.Caption :=количество строк в файле :  ' + IntToStr(Memo1.Lines.Count);
label2.Caption:= 'количество байт в файле   :'+' ' +IntToStr(f.Size)+ ' ' + ' '+'Byte';
end;
f.free;
st.free;
end;
end;
В общем совсем не то , что надо ....
sergey.serg-72 вне форума Ответить с цитированием
Старый 29.03.2022, 01:19   #356
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Начните с малого, создайте TStringList и загрузите в него какой-нибудь srec файл
Это можно, пожалуй с этого надо начать
Код:
var
st: TStringList;
f: TMemoryStream;
CS:Byte;
i,Res,Sum: integer;
begin
OpenDialog1.Filter:='S19 File (*.S19)|*.S19';
if not OpenDialog1.Execute then
exit;
f := TMemoryStream.Create;
f.LoadFromFile(OpenDialog1.FileName);
st := TStringList.Create;
st.LoadFromFile(OpenDialog1.FileName);
for i := 0 to st.Count - 1 do
begin
Memo1.Lines.Add(st[i]);
Label1.Caption :='Количество строк в файле :  ' + IntToStr(Memo1.Lines.Count);
label2.Caption:= 'Количество байт в файле  :'+' ' +IntToStr(f.Size)+ ' ' + ' '+'Byte';
end;
f.free;
st.free;
end;

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

Примерно так, код не запускал, так что возможны опечатки:
Код:
var
  st: TStringList;
  i, j, k, len: integer;
  sum: byte;
  err_flag: boolean;
begin
  OpenDialog1.Filter := 'S19 File (*.S19)|*.S19';
  if not OpenDialog1.Execute then
    exit;
  st := TStringList.Create;
  st.LoadFromFile(OpenDialog1.FileName);
  with Memo1 do
  begin
    Clear;
    Lines.BeginUpdate;
    for i := 0 to st.Count - 1 do
    begin
      len := length(st[i]);
      if len mod 2 <> 0 then
      begin
        Lines.Add(Format('WRONG LINE LENGTH - %d: %s', [i + 1, st[i]]));
        continue;
      end;
      err_flag := False;
      sum := 0;
      j := 3;
      while j < len do
      begin
        k := StrToIntDef('$' + st[i][j] + st[i][j + 1], -1);
        if k = -1 then
        begin
          Lines.Add(Format('INVALID CHARACTER IN LINE - %d: %s', [i + 1, st[i]]));
          err_flag := True;
          break;
        end;
        Inc(sum, k);
        Inc(j, 2);
      end;
      if err_flag then
        continue;
      if sum <> 255 then
      begin
        Lines.Add(Format('WRONG CHECKSUM 0x%x - %d: %s', [sum, i + 1, st[i]]));
        continue;
      end;
    end;
    Lines.Add('END CHECK');
    Lines.EndUpdate;
  end;
  st.Free;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.03.2022, 18:46   #358
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Примерно так, код не запускал, так что возможны опечатки:
BDA, отлично всё работает. Но есть замечания :
1) Если файл корректен и не повреждён, то программа должна писать, что проблем не найдено, или всё гуд ! , а то пишет и при повреждённом и при корректном END CHECK(ОКОНЧАТЕЛЬНАЯ ПРОВЕРКА ) это понятно, а каков результат этой проверки всё гуд, или нет ?
Почему тогда и при некорректном пишет что END CHECK ?

2) - ой момент думаю не лишняя информация о размере файла в байтах и количество строк в файле. Мне не нравится мой код с подсчётом количества строк, он грузит в мемо файл и листает, это долго и не айс ..... Надо что то другое, без загрузке файла и быстрый подсчёт.

3) И главное выводится информация так : WRONG CHECKSUM 0xF - 4: S21400803024015CA04D9FA2009037957F8 C20359E42
WRONG CHECKSUM 0x0 - 2046: S21400FFD00485DCC70359CF03589EFE022 604CC6077
END CHECK Что означает 0xF - 4:?
И что означает 0x0 - 2046 ?

Как это интерпретировать ?
Думаю что надо выводить адрес повреждённой строки, или строк.
Так проще найти по адресу строки в файле и исправить.
Скажем так : по адресу 1080 строка имеет неправильную контрольную сумму, или значение.
Показывать посчитанную сумму и какая должна быть сумма.
Так можно быстро найти в файле по адресу повреждённые строки и исправить .

А то что означает 0xF - 4:? , или 0x0 - 2046:? как это перевести на понятный язык и по какому адресу эти строки находятся?
А может загружать файл в мемо и выделять цветом (красным) повреждённые строки ?
Тогда и адрес будет виден строк. И правильную контрольную сумму, чтоб открыл файл и исправил, или кнопку нажал и контролка исправилась на правильную ?

Код:
 var
  st: TStringList;
  f: TMemoryStream;
  i, j, k, len: integer;
  sum: byte;
  err_flag: boolean;
begin
Memo1.Clear;
label1.Caption:=' ';
label2.Caption:=' ';
  OpenDialog1.Filter := 'S19 File (*.S19)|*.S19';
  if not OpenDialog1.Execute then
    exit;
   f := TMemoryStream.Create;
f.LoadFromFile(OpenDialog1.FileName);
  st := TStringList.Create;
  st.LoadFromFile(OpenDialog1.FileName);

with Memo1 do
  begin
    Clear;

Lines.BeginUpdate;
 for i := 0 to st.Count - 1 do
    begin
      len := length(st[i]);
      if len mod 2 <> 0 then
      begin
        Lines.Add(Format('WRONG LINE LENGTH - %d: %s', [i + 1, st[i]]));
        continue;
      end;
      err_flag := False;
      sum := 0;
      j := 3;
      while j < len do
      begin
        k := StrToIntDef('$' + st[i][j] + st[i][j + 1], -1);
        if k = -1 then
        begin
          Lines.Add(Format('INVALID CHARACTER IN LINE - %d: %s', [i + 1, st[i]]));
          err_flag := True;
          break;
        end;
        Inc(sum, k);
        Inc(j, 2);
      end;
      if err_flag then
        continue;
      if sum <> 255 then
      begin
        Lines.Add(Format('WRONG CHECKSUM 0x%x - %d: %s', [sum, i + 1, st[i]]));
        continue;
      end;
    end;
    Lines.Add('END CHECK');
    Lines.EndUpdate;
    label2.Caption:= 'Number of bytes in the file :'+' ' +IntToStr(f.Size)+ ' ' + ' '+'Byte';
    Label1.Caption :='Number of lines in the file:  ' + IntToStr(st.Count-1);
  end;
  st.Free;
end;

Последний раз редактировалось sergey.serg-72; 29.03.2022 в 18:54.
sergey.serg-72 вне форума Ответить с цитированием
Старый 30.03.2022, 00:49   #359
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Сообщение от BDA
Примерно так, код не запускал, так что возможны опечатки:
Я попробовал для HEX, всё вроде правильно исправил, но пишет ошибка контрольной суммы, но ошибки точно нет. Где то ошибка, но не могу понять где
Код:
 var
  st: TStringList;
  f: TMemoryStream;
  i, j, k, len: integer;
  sum: byte;
  err_flag: boolean;
begin
Memo1.Clear;
label1.Caption:=' ';
label2.Caption:=' ';
  OpenDialog1.Filter := 'Hex File (*.Hex)|*.Hex';
  if not OpenDialog1.Execute then
    exit;
   f := TMemoryStream.Create;
f.LoadFromFile(OpenDialog1.FileName);
  st := TStringList.Create;
  st.LoadFromFile(OpenDialog1.FileName);

with Memo1 do
  begin
    Clear;

Lines.BeginUpdate;
 for i := 0 to st.Count - 1 do
    begin
      len := length(st[i]);
      if len mod 1 <> 0 then
      begin
        Lines.Add(Format('Неправильная длина линии - %d: %s', [i + 1, st[i]]));
        continue;
      end;
      err_flag := False;
      sum := 0;
      j := 2;
      while j < len do
      begin
        k := StrToIntDef(':' + st[i][j] + st[i][j +1], -1);
        if k = +1 then
        begin
          Lines.Add(Format(Недопустимый символ в строке - %d: %s', [i + 1, st[i]]));
          err_flag := True;
          break;
        end;
        Inc(sum, k);
        Inc(j, 1);
      end;
      if err_flag then
        continue;
      if sum <> 255 then
      begin
        Lines.Add(Format('ошибка контрольной суммы   0x%x - %d: %s', [sum, i + 1, st[i]]));
        continue;
      end;
    end;
    Lines.Add('окончание проверки ');
    Lines.EndUpdate;
     label2.Caption:= 'количество строк :'+' ' +IntToStr(f.Size)+ ' ' + ' '+'Byte';
    Label1.Caption :='Êколичество байт  :  ' + IntToStr(st.Count+1);
  end;
  st.Free;
end;
sergey.serg-72 вне форума Ответить с цитированием
Старый 30.03.2022, 03:02   #360
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
а каков результат этой проверки всё гуд, или нет
Сообщение означает окончание проверки. Если никаких других сообщений не было, значит всё хорошо. Можно вывести более явное сообщение вместо "Lines.Add('END CHECK');":
Код:
if Lines.Count > 0 then
  Lines.Add('Что-то плохо')
else
  Lines.Add('Все хорошо');
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
не лишняя информация о размере файла в байтах и количество строк в файле
Не вижу в ней смысла при проверке корректности. С количеством строк вы и сами справились (st.Count). Для узнавания размера лучше уж воспользоваться TFileStream вместо TMemoryStream, чтобы меньше занимать оперативной памяти.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Как это интерпретировать ?
WRONG CHECKSUM 0xF - 4: S21400803024015CA04D9FA2009037957F8 C20359E42
Сумма получилась 0xF (а должна быть 0xFF), номер неверной строки 4, а далее сама строка.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
А может загружать файл в мемо и выделять цветом (красным) повреждённые строки ?
Можете сделать и так, только TMemo не поддерживает разные цвета, так что придется перейти на TRichEdit.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
всё вроде правильно исправил
Да нет, ошибки есть. "len mod 1 <> 0" - строка должна быть нечетной длины, но делить нужно на 2 "len mod 2 = 0". "StrToIntDef(':'" - откуда взялось двоеточие? Тут должна формироваться строка вида "$XX", которая преобразуется в 16ричное число. "if k = +1 then" - почему +1? -1 означает, что строка неудачно преобразовалась в число. "if sum <> 255 then" для HEX нужно сравнивать с нулем.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
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