In my above post I ment Seek not FileSeek.

Here is an example of a custom data structure used to store data - along with the binary search funtion - note the data must be inserted in alphabetical order.

I cannot get times for the search - I've tried files up to 200000 records and all searches give me 0 millisend response times....

[pascal]unit QuickDB;

interface

Uses
SysUtils;

Type
TDataRecord = Record
Name : String[100];
Data : Array[1..4] of String [255];
End;

Procedure MakeData(FileName : String; NumOfRecord : Integer);
Function GetRecord(FileName : String; inName : String) : TDataRecord;

implementation

Procedure MakeData(FileName : String; NumOfRecord : Integer);
Var
I : Integer;
F : File of TDataRecord;
DR : TDataRecord;
Begin
AssignFile(F,FileName);
Rewrite(F);
For I := 0 to NumOfRecord-1 do
Begin
DR.Name := 'Rec'+FormatFloat('000000000',I);
DR.Data[1] := 'Data1';
DR.Data[2] := 'Data2';
DR.Data[3] := 'Data3';
DR.Data[4] := 'Data4';
Write(F,DR);
End;
CloseFile(F);
End;
Function GetRecord(FileName : String; inName : String) : TDataRecord;
Var
I,H,L,M : Integer;
F : File of TDataRecord;
DR : TDataRecord;
Begin
L := 0;
AssignFile(F,FileName);
Reset(F);
H := FileSize(F)-1;
M := (H+L) div 2;
Seek(F,M);
Read(F,DR);
While (DR.Name <> inName) and (L<>H) do
Begin
if DR.Name > inName then
Begin
H := M-1;
End
else
Begin
L := M+1;
End;
M := (H+L) div 2;
Seek(F,M);
Read(F,DR);
End;
CloseFile(F);
Result := DR;
End;

end.
[/pascal]