2007. október 2., kedd
Fastest way to search a string in a file
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;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése