............
for j:=0 to m do
begin
for k:=0 to n do
begin
_A:=2; //Два первых байта совпадают по определению
ss:=sss; //Пишем эти два байта в строку
while Fil1[Sort1[i,m]+_A]=Fil2[Sort2[i,n]+_A] do //Если следующие байты совпадают - повторяем сравнение
begin
ss:=ss + chr(Fil1[Sort1[i,m]+_A]); //Добавляем в строку совпадающий байт
_A:=_A+1; //Увеличиваем кол-во совпавших байт на единицу
if (((Sort1[i,m]+_A)>_Len1) or ((Sort2[i,n]+_A)>_Len2)) then break; //Проверяем на выход за размер файла
end;
//---------------Если кол-во совпавших байтов равно или больше установленного, выводим найденную строку и позиции на индикацию
if ((_A>=_Min) and (s<>ss)) then _hi_OnEvent(onRes, ss + ';' + int2str(Sort1[i,m]) + ';' + int2str(Sort2[i,n]));
s:=ss;
end;
end;
............
А если перестать стесняться: оно вообще-то правильно работает, или как ???
А вообще - я сильно удивлен.
Вот, скажем, ты индексируешь первый файл (в котором ищем, по терминологии ТС, словарь - это второй файл). ВСЕ позиции этого файла попадают в хеш-таблицу. Потом ты перебираешь ВСЮ хеш-таблицу и анализируешь ВСЕ позиции для заданного ключа.
Таким хитромудрым образом ты перебираешь ВСЕ позиции первого файла. И ничего другого, и только по одному разу.
Зачем вся эта хитромудрость - не пойму. Мне бы такое в голову никогда не пришло.
Ну перебери ты ВСЕ эти позиции из входного файла ПО ПОРЯДКУ. Как все белые люди...
Не, парни. такому я вас не учил.
Я говорил, что проще надо быть... Проще
--- Добавлено в 2020-03-16 19:52:07
А уж выравнивание - Netspirit-а на тебя не хватает.