Delphi .NET (2) Database (71) Delphi IDE (90) Network (39) Printing (3) Strings (12) VCL (83) Windows with Delphi (280)
Exchange Links About this site Links to us 
|
Fastest way to search a string in a file
4 comments. Current rating: (3 votes). Leave comments and/ or rate it.
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; | |  | |  |
Comments:
|
|
|
|
|
|
|
|
|
can you explain this code or translate this code in c/c++,vb
|
|
|
|
|
Can you explain the processes?... whats going on at each process?
I program in DirectX and would like to know whats going on at each step so I can
translate it into my code. -thx
|
|
|
|
|
Nice trick thnx alot.
|
|