this slowpoke moves

Search String in EXE File

function PosInFile(Str,FileName:string):integer;
var
   Buffer:array[0..1023]of char;
   BufPtr,BufEnd:integer;
   F:File;
   Index:integer;
   Increment:integer;
   c:char;

function NextChar:char;
begin
   if BufPtr>=BufEnd then
   begin
     BlockRead(F,Buffer,1024,BufEnd);
     BufPtr := 0;
     Form1.ProgressBar1.Position := FilePos(F);
     Form1.Memo1.Lines.Add('Pos : ' + IntToStr(FilePos(F)));
     Application.ProcessMessages;
   end;
   Result := Buffer[BufPtr];
   Inc(BufPtr);
end;

begin
   Result := -1;
   AssignFile(F,FileName);
   Reset(F,1);
   Form1.ProgressBar1.Max := FileSize(F);
   BufPtr:=0;
   BufEnd:=0;
   Index := 0;
   Increment := 1;
   repeat
     c:=NextChar;
     if c=Str[Increment] then
       Inc(Increment)
     else
     begin
       Inc(Index,Increment);
       Increment := 1;
     end;
     if Increment=(Length(Str)+1) then
     begin
       Result := Index;
       Break;
     end;
   until BufEnd = 0;
   CloseFile(F);
   Form1.ProgressBar1.Position := 0;
end;
Beispiel :
procedure TForm1.Button1Click(Sender: TObject);
var
  str : string;
begin
  str := Edit1.Text;
  if OpenDialog1.Execute then begin
  PosInFile(Str, OpenDialog1.FileName);
  end;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate