![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 19.11.2016
Сообщений: 24
|
![]()
Всем добрый день !
В общем задача стоит , создать мини HEX редактор, для сравнения и, если требуется корректировки файлов. Работать преимущественно с файлами (bin, Hex), но хотелось бы чтоб редактор работал со всеми файлами (всех типов). Задача такая : в первое окно загружается файл (оригинал), во второе окно файл (подопытный). Если есть несовпадения, то программа подсчитывает сколько несовпадений и выводит в Label (на форму). Можно реализовать при нажатии на кнопку, чтоб происходило сравнение файлов. А лучше, чтоб при загрузке второго файла, сразу производилось сравнение и подсчёт несовпадений, с выводом в Label. Ещё момент, оригинал может быть скажем в 700 байт, а подопытный, в 2048 и т.д (бывшей в работе уже). Так вот надо чтоб программа показывала не совпадения по оригиналу, остальные данные (переменные) не важны. И чтоб несовпадения, выделялись и на каких адресах.... Вот начали потихонечку, думали что будет по проще, но оказывается в Дельфи, нет компонента, который бы загружал файл, без описания структуры. Используем Memo, но есть момент : большие файлы долго загружает, не очень айс скажем. Код:
а вот как сверку произвести и вывести количество несовпадений, пока не получается. Последний раз редактировалось nikitin.leha-201; 27.11.2016 в 13:40. |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,544
|
![]()
в первом приближении можно просто СРАВНИТЬ аналогичные(имеющие одинаковые индексы) строки записанные в ОБА мемо.
Код:
А если и кажется что учтены, то наверняка не полностью. Цитата:
Код:
НО правильнее будет СРАВНИВАТЬ данные в файлах ДО загрузки в мемо. используя ОДНОВРЕМЕННОЕ чтение двух файлов в два различных массива(буфера). Код:
Код:
например как-ТО отобразить ЧИСЛО различий на КАЖДОЙ "строке мемо" (то бишь В КАЖДОМ блоке длиной 16 байт).
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 28.11.2016 в 12:32. |
|
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 19.11.2016
Сообщений: 24
|
![]() Цитата:
Вот если без данных об адресах, то файл загружается быстро, но что , за редактор без адреса? Код:
|
|
![]() |
![]() |
![]() |
#4 | |
Пользователь
Регистрация: 19.11.2016
Сообщений: 24
|
![]() Цитата:
Все выходные изучали новый компонент StringGrid, очень долго мучились с настройкой строк и вывод данных . Удалось разобраться с компонентом, сделать нужное количество строк, даже попробовали код, данные Char и первая строка и адреса выводятся быстро, как и большие файлы. Этот компонент, то , что надо. Решили работать с StringGrid, форму разработали, а вот с кодом что то не то получилось... Файл загружается, если в три строки делать, а в редакторе, будет 16 клеточек , каждая это строка, всё как в настоящем редакторе. Но в коде ни как не получается сделать так, чтоб загружался файл не в одну строку, а в 16... символы ANSI которые идут в бинарном файле, выводятся в 17 строку, всё отлично, а вот сами байты файла, только в первый ряд, первой строки. Где то явно что то неправильно в коде, пока не получается изменить. Вот новый код под StringGrid : Код:
Как вообще в этом компоненте выводить данные по строкам, если больше трёх строк ? Последний раз редактировалось nikitin.leha-201; 28.11.2016 в 21:25. |
|
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,544
|
![]()
StringGrid1.RowCount:=N;// будет выведено N строк
аналогично для столбцов(колонок) columnCount:= Цитата:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 29.11.2016 в 10:07. |
|
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 19.11.2016
Сообщений: 24
|
![]() Цитата:
Этот код не работает, при компиляции ошибка выскакивает (не компилируется).... Код:
А потом с выводом ASCII проблем нет, всё выводится как надо в 17 колонку. А делалось всё в Form Creat Код:
А вот с этим не понятно всё же : StringGrid1.RowCount:=N;// будет выведено N строк аналогично для столбцов(колонок) columnCount:= Если это ещё StringGrid1.RowCount:=N; компилируется, то columnCount:= не в какую. Не поняли всё же, как выводить для столбцов(колонок)? Не получается, как распределять и в какой части кода? Последний раз редактировалось nikitin.leha-201; 29.11.2016 в 13:53. |
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,544
|
![]() Цитата:
StringGrid1.columnCount написал, заметил надо colCount. Найдите книжку Aрхангельский 100 компонент Delphi. Русский "почти перевод" справки. http://programmersforum.ru/showpost....6&postcount=12 http://www.programmersclub.ru/book/
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 29.11.2016 в 14:02. |
|
![]() |
![]() |
![]() |
#8 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,544
|
![]() Цитата:
Цитата:
ровно до тех пор пока не начнутся "фокусы" со специальными кодами (#00..#031)
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 29.11.2016 в 14:14. |
||
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 19.11.2016
Сообщений: 24
|
![]() Цитата:
Теперь проблема другая, при загрузке файла в редактор, должна подсчитываться crc файла и выводится, так во всех редакторах. Получается правильно подсчитать, если изначально указать адрес начала файла и конец . Скажем файл имеет определённый размер в 256 байт, тогда создаём константу и в ней прописываем ,адрес, начало файла и конец :$0100 -$0, потом константу вставляем в цикл и тогда всё корректно подсчитывается и выводится. Но вся проблема в том, что файлы имеют разные размер, от 170 байт, до 98765... скажем и менять в константе адрес на каждый не серьёзно. Проблема состоит в том, как либо в константе, либо в цикле указать конец файла, чтоб подсчёт вёлся до конца файла, от $0до $.... В общем чтоб код понимал разные размеры файла и считал от 0, до конца файла. В инете, ни чего не нашли по данной проблеме, как и по материалам по Дельфи и Вашим ссылкам. Всё не то. Данный код подсчитывает, но неправильно... Код:
|
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,544
|
![]()
если я правильно понял вашу проблему вы не можете понять а какую же часть буфера вам надо обработать (или константа или ... )
TStream.Read это функция и она возвращает какой-то результат. А значение оного описано в справочной литературе. (в т.ч. и в рекомендованной мною ранее). Код:
Код:
1. рассчитанную вами (вы ведь учли(посчитали) и эти байты), это же "точно такие же" байты 2. записанную ранее (а они при расчетах их не учитывали), их ведь еще не было когда считали и потом записывали Код:
и имеет смысл динамическая "подстройка" размера буфера под размер файла с целью снижения "сложности" программы путем избавления от "переключения буфера" на другой блок файла. Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 01.12.2016 в 13:31. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi. создать проект, содержащий форму для ввода данных о поездке, вычисление стоимости, файл с записями, редактор | egor55555 | Фриланс | 9 | 05.09.2016 17:28 |
Редактор XML файлов в Delphi | MagGarbut | Помощь студентам | 1 | 15.03.2011 16:26 |
Программа для сравнения содержимого файлов | Alter | Свободное общение | 7 | 25.11.2009 23:38 |