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