Показать сообщение отдельно
  #9  
Старый 19.07.2020, 12:57
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Все равно ошибка
Цитата:
Сообщение от Kailon
Код:
//Функция поиска шаблона
function PatternSearch(aPattern: TBytes; aFileName: String): LongInt;
var
  F: TMemoryStream;
  Buf: TBytes;
  Len, Step: LongInt;
begin
  F := TMemoryStream.Create;
  F.LoadFromFile(aFileName);
  try
    Len := Length(aPattern);
    SetLength(Buf, Len);
    Step := 0;
    try
      repeat
        F.Seek(Step, soFromBeginning);
        F.ReadBuffer(Buf, Len);
        Inc(Step);
      until CompareMem(Buf, aPattern, Len);
      Result := F.Position; // <--- Позиция курсора в файле показывает на начало паттерна или нет? :D 
    except
      Result := -1;
    end;
  finally
    F.Free;
  end;
end;

И по примеру использования: А кто сказал, что паттерн не может располагаться в самом начале файла (Offset= 0)?
Стоит возвращать (-1) если паттерн не найден. А если найден, то уже значение от 0 до ... Аналогично функции Pos().

Вы не подумайте, что я критикую и не предлагаю. Я предложил решение первым ответом. Imikle внес замечания. По сути алгоритм есть, нужно только написать. Мне лень писать, но читать чужой код я люблю
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием