Ok, im Anhang ein ausführlicheres Beispiel der Datensätze (Daten sind angepasst, Originaldaten kann ich leider nicht veröffentlichen).
Zu Testzwecken (ich hatte in etwa an den von HalloDu beschriebenen Ansatz gedacht, also erstmal Feldnamen holen und dann Daten zuordnen) habe ich
TATStreamSearch verwendet, nur um mal einen Eindruck zubekommen wie lange das dauern könnte. Ausserdem wollte ich den jeweils kompletten Feldnamen haben und die Möglichkeit eine RegEx-Suche durchzuführen erschien mir aufgrund der gegebenen unterschiedlichen Feldnamen angebracht.
Hier der verwendete erste Versuch (angepasst aus dem o.g. TATStreamSearch-Demo):
Delphi-Quellcode:
function TfrmMain.Find(AFindFirst: Boolean):Boolean;
var
OK: Boolean;
begin
Result := False;
OK := False;
try
if AFindFirst
then
begin
try
strsrch_Main.FileName := FFileName;
except
Application.MessageBox('
Cannot open filename specified', '
Error', MB_OK
or MB_ICONERROR);
Exit;
end;
OK := strsrch_Main.FindFirst('
(\w*): ', 0, FEncoding, FOptions);
end
else
begin
OK := strsrch_Main.FindNext;
end;
except
on E:
Exception do
if E.
Message <> '
'
then
begin
Application.MessageBox(PChar(E.
Message), '
Search failed', MB_OK
or MB_ICONERROR);
Exit;
end;
end;
if OK
then
begin
bh_Main.SetSelection(strsrch_Main.FoundStart, strsrch_Main.FoundLength, True);
Inc(FRecordCount);
memUC_Main.Lines.Add(bh_Main.SelText);
edOffset.Text := IntToStr(strsrch_Main.FoundStart);
edCount.Text := IntToStr(FRecordCount);
pb1.Position := strsrch_Main.FoundStart * 100
div FFileSize;
end
else
Application.MessageBox('
Search string not found', '
Search failed', MB_OK
or MB_ICONERROR);
//
Application.ProcessMessages;
result := OK;
end;
Der Aufruf erfolgt durch:
Delphi-Quellcode:
procedure TfrmMain.btnUC_GetKeysClick(Sender: TObject);
var
OK:Boolean;
begin
FAbort := False;
FEncoding := vencANSI;
FOptions := [];
FRecordCount := 0;
Include(FOptions, asoRegEx);
if Find(True) then
repeat
OK := Find(False);
until (not OK) or FAbort;
FAbort := False;
end;
Wie gesagt, das war erst einmal nur ein Test um ein Gefühl für die Zeit zu bekommen, die das Auslesen benötigen könnte.