Вверх ↑
Этот топик читают: Гость
Ответов: 4505
Рейтинг: 719
#16: 2021-10-13 17:03:29 ЛС | профиль | цитата
Ну, а почему именно по 5 байт? Вероятно, там будет циклический поиск с постепенно увеличивающейся длиной. Если для выявления отличий байты сравниваются, то для выявления вставки/удаления фрагментов начиная с первого отличия ищутся совпадения (при этом длина для совпадающего фрагмента постепенно увеличивается). Это позволит выявить границы вставленных и удаленных фрагментов. Но опять же, некоторые случаи, типа, вставки нескольких байт и изменения нескольких последующих байт могут затруднять принятие решения.

Потренируйся, например, на сравнении файлов в TotalCommander - как он ведет себя с текстовыми и двоичными файлами. Например, при вставке в текстовый файл фрагмента и небольшого изменения последующего текста TotalCommander иногда показывает отличия с места вставки и до конца файла, не имея возможности определить конец добавленного фрагмента. Тогда на помощь приходит команда "установить маркер ручного сопоставления" - мы вручную указываем конец вставленного фрагмента, а дальнейшее сравнение покажет корректный результат.

Редактировалось 5 раз(а), последний 2021-10-13 17:09:20
карма: 26

0
Ответов: 209
Рейтинг: 5
#17: 2021-10-14 13:37:19 ЛС | профиль | цитата
Я думаю сравнивать нужно по одному байту.В строках это должно прокатить т.к. там смещение не важно.А вот в жестко кодированных строках уже засада там каждый лишний символ, даже пробел в основном приводит к краху программы.
карма: 0

0
Ответов: 4505
Рейтинг: 719
#18: 2021-10-15 10:31:36 ЛС | профиль | цитата
Udokanec писал(а):
там каждый лишний символ
Для строк в ресурсах используются корректные функции редактирования ресурсов, которые правильно прописывают новые размеры в исполняемом файле и смещают последующие данные, чтобы они не перекрывались вновь добавленными.
карма: 26

0
Ответов: 209
Рейтинг: 5
#19: 2021-10-15 14:30:24 ЛС | профиль | цитата
Блин почему первый байт не читает

Add(FileStream,5579189,434,280)
{
Point(doPosition)
link(onLoad,14482734:doConvert,[])
}
Add(Button,6901598,224,280)
{
Left=15
Top=45
link(onClick,10644980:doExecute,[])
}
Add(ODialog,10644980,280,280)
{
link(onExecute,7672151:doEvent1,[])
}
Add(Memo,8413688,700,280)
{
Left=20
Top=135
Width=735
Height=360
ScrollBars=3
}
Add(StreamConvertor,14482734,497,280)
{
Point(Data)
}
Add(MainForm,2953706,336,133)
{
Caption="Пример использования компонента FileStream"
}
Add(Hub,7672151,336,280)
{
OutCount=5
link(onEvent1,5579189:doOpen,[])
link(onEvent3,7228710:doFor,[(364,300)(364,398)])
link(onEvent4,5579189:doClose,[(392,307)(392,293)])
}
Add(For,7228710,378,392)
{
IncludeEnd=1
link(onEvent,8206227:doEvent1,[])
link(End,5579189:Size,[(391,353)(447,353)])
}
Add(Convertor,7177771,567,399)
{
Mode=6
link(onResult,8413688:doAdd,[(649,405)(649,286)])
link(Data,15470337:Data,[(573,387)(517,387)(517,443)(461,443)])
}
Add(DataToFileEx,15470337,455,399)
{
BigEndian=0
Point(doPosition)
link(onGet,7177771:doConvert,[])
link(Stream,5579189:Stream,[(461,367)(440,367)])
}
Add(Hub,8206227,420,392)
{
link(onEvent1,5579189:doPosition,[(446,398)(446,349)(422,349)(422,300)])
link(onEvent2,15470337:doGet,[])
}

карма: 0

0
Ответов: 4505
Рейтинг: 719
#20: 2021-10-15 14:46:53 ЛС | профиль | цитата

Add(FileStream,5579189,483,329)
{
Point(doPosition)
link(onLoad,7672151:doEvent1,[])
}
Add(Button,6901598,315,329)
{
Left=10
Top=10
link(onClick,10644980:doExecute,[])
}
Add(ODialog,10644980,371,329)
{
link(onExecute,5579189:doOpen,[])
}
Add(Memo,8413688,875,434)
{
Left=5
Top=45
Width=250
Height=250
ScrollBars=3
}
Add(MainForm,6044688,385,182)
{
Height=347
Caption="Пример использования компонента FileStream"
}
Add(Hub,7672151,532,329)
{
link(onEvent1,7228710:doFor,[(581,335)(581,433)])
link(onEvent2,5579189:doClose,[(565,342)(565,382)(443,382)(443,342)])
}
Add(For,7228710,616,427)
{
IncludeEnd=1
link(onEvent,8206227:doEvent1,[])
link(End,5579189:Size,[(629,402)(496,402)])
}
Add(Convertor,7177771,798,434)
{
Mode=6
link(onResult,8413688:doAdd,[])
}
Add(DataToFileEx,15470337,721,434)
{
BigEndian=0
Point(doPosition)
link(onGet,7177771:doConvert,[])
link(Stream,5579189:Stream,[(727,416)(489,416)])
}
Add(Hub,8206227,665,427)
{
link(onEvent2,15470337:doGet,[])
}

Вероятно, данные из диалога выбора файла попадали на вход компонента For и сбивали начальное значение цикла. Надо следить за подаваемыми на компоненты данными.
1) Работать с файлом надо после того как этот файл успешно открыт - после события FileStream.onLoad, а не выбора файла в диалоге.
2) После чтения/записи любых данных из файла Position автоматически сдвигается вперед на "после прочитанных данных" - необязательно двигать её вручную (если только не надо установить в какую-то другую позицию).
карма: 26

0
Ответов: 209
Рейтинг: 5
#21: 2021-10-15 15:00:58 ЛС | профиль | цитата
Спасибо разобрался

--- Добавлено в 2021-10-15 15:15:14

[b]Netspirit [/b] А как обойти такую байду.Мне при сравнивании строк в оригинальном файле нужен шаг 1 байт,а в переведенном 2 байта.Сравнение будет некорректным.
Add(MainForm,2953706,294,35)
{
Width=616
Height=342
Caption="Пример использования компонента FileStream"
}
Add(FileStream,5579189,392,147)
{
Point(doPosition)
link(onLoad,7672151:doEvent1,[])
}
Add(Button,6901598,224,147)
{
Left=60
Top=15
Width=65
Caption="Оригинал"
link(onClick,10644980:doExecute,[])
}
Add(ODialog,10644980,280,147)
{
link(onExecute,5579189:doOpen,[])
}
Add(Memo,8413688,784,252)
{
Left=5
Top=45
Width=250
Height=250
ScrollBars=3
}
Add(Hub,7672151,441,147)
{
link(onEvent1,7228710:doFor,[(490,153)(490,251)])
link(onEvent2,5579189:doClose,[(474,160)(474,200)(352,200)(352,160)])
}
Add(For,7228710,525,245)
{
IncludeEnd=1
link(onEvent,8206227:doEvent1,[])
link(End,5579189:Size,[(538,220)(405,220)])
}
Add(Convertor,7177771,707,252)
{
Mode=6
link(onResult,8413688:doAdd,[])
}
Add(DataToFileEx,15470337,630,252)
{
BigEndian=0
Point(doPosition)
link(onGet,7177771:doConvert,[])
link(Stream,5579189:Stream,[(636,234)(398,234)])
}
Add(Hub,8206227,574,245)
{
link(onEvent2,15470337:doGet,[])
}
Add(FileStream,12186776,413,357)
{
Point(doPosition)
link(onLoad,7330781:doEvent1,[])
}
Add(Button,7326642,245,357)
{
Left=390
Top=15
Width=90
Caption="Измененный"
link(onClick,8129174:doExecute,[])
}
Add(ODialog,8129174,301,357)
{
link(onExecute,12186776:doOpen,[])
}
Add(Memo,3411457,805,462)
{
Left=320
Top=45
Width=250
Height=250
ScrollBars=3
}
Add(Hub,7330781,462,357)
{
link(onEvent1,4366585:doFor,[(511,363)(511,461)])
link(onEvent2,12186776:doClose,[(495,370)(495,410)(373,410)(373,370)])
}
Add(For,4366585,546,455)
{
Step=2
IncludeEnd=1
link(onEvent,15601516:doEvent1,[])
link(End,12186776:Size,[(559,430)(426,430)])
}
Add(Convertor,3180973,728,462)
{
Mode=6
link(onResult,3411457:doAdd,[])
}
Add(DataToFileEx,13955297,651,462)
{
BigEndian=0
Point(doPosition)
link(onGet,3180973:doConvert,[])
link(Stream,12186776:Stream,[(657,444)(419,444)])
}
Add(Hub,15601516,595,455)
{
link(onEvent2,13955297:doGet,[])
}


Редактировалось 4 раз(а), последний 2021-10-15 15:24:08
карма: 0

0
21
Сообщение
...
Прикрепленные файлы
(файлы не залиты)