Fastest way to search a string in a file (Views: 28)
Problem/Question/Abstract: Fastest way to search a string in a file Answer: The function below returns position of substring in file, or -1 if such substring can not be found. 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; |