Произвести поиск байта или слова в строке

Произвести поиск байта или слова в строке У семейства x86 есть группа специализированных строковых инструкций, одна из которых - scasb/scasw - производит поиск байта/слова в строке. Использовать преимущества этой инструкции в Delphi позволяют длинные строки, которых в старых паскалях не было. Никаких сложностей с пониманием, на мой взгляд, быть не должно. Единственное это смена режима открытия файла (FileMode := 0), которая позволит открыть файлы заблокированные ядром Windows и сдвиг указателя файла при чтении нового блока влево на длину искомой строки. Сдвиг делается на случай разрезания искомой строки на части при чтении файла. Полный текст проверенной программы:

program search;
{$APPTYPE CONSOLE}
uses SysUtils;
const buffSize = 16384;
var F : File;
var buff : AnsiString;
var oldFileMode : integer;
var SearchString: shortString='SunSB';
var SearchPos : integer = -1;
var readed : integer;
var blockStart: integer;
begin
  SetLength( buff, buffSize);
  assignFile( F, 'Speedometer2.exe');
  oldFileMode := FileMode;
  FileMode := 0;
  reset( F,1);
  while not eof( F ) do begin
  blockStart := filePos( F );
  blockRead( F, buff[1], buffSize, readed);
  SearchPos:=Pos( SearchString, buff );
  if SearchPos > 0 then begin
  WriteLn( 'Substr found at pos ',
  blockStart+SearchPos );
  break;
  end;
  if readed=buffSize then
  seek( F, ( filePos( F ) -
  length( SearchString )));
  end;
  closeFile( F );
  FileMode := oldFileMode;
  SetLength( buff, 0 );
  if SearchPos = 0 then
  WriteLn( 'Substr not found.');
  readLn;
end.
http://sunsb.dax.ru

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...