The function below returns position of substring in file, or -1 if such substring can not be found.
Better: use the Boyer-Moore algorithm. There's a Pascal implementation at
http://www.dcc.uchile.cl/~rbaeza/handbook/algs/7/713b.srch.p.html.
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);
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;