Folgende Procedure lädt eine Datei mit fester Satzlänge in ein
TStrings - Objekt.
Falls man die Satzlänge mit 0 angibt, wird davon ausgegangen, dass die Zeilen keine feste Satzlänge
haben, sondern mit CR/LF getrennt sind.
Für optimale Performance sollte man
TStringList verwenden. Andere von TStrings abgeleitete Klassen
wie z.B.
TMemoStrings sind teilweise bis zu 100-fach langsamer.
Delphi-Quellcode:
procedure LoadFixedRecordStream(list: TStrings; stream: TStream; reclen: Integer);
var
buffer : string;
begin
if reclen = 0 then
begin
// Datei hat variable Satzlänge
// jeder Satz ist mit CR-LF abgeschlossen
list.LoadFromStream(stream);
end
else
begin
// Datei hat feste Satzlänge
list.Clear;
SetLength(buffer, reclen); // Speicher für einen Datensatz besorgen
list.BeginUpdate;
try
// vorab Speicher in Stringliste reservieren
// dies verbessert die Performance
list.Capacity := ((stream.Size-stream.Position) div reclen) +1;
while stream.Position < stream.Size-reclen do
begin
// Record einlesen
stream.ReadBuffer(buffer[1], reclen);
// und an Stringliste anhängen
list.Add(buffer);
end;
finally
list.EndUpdate;
end;
end;
end;
procedure LoadFixedRecordFile(list: TStrings; const filename: string; reclen: Integer);
var
stream : TStream;
begin
stream := TFileStream.Create(filename, fmOpenRead or fmShareDenyWrite);
try
LoadFixedRecordStream(list, stream, reclen);
finally
stream.Free;
end;
end;
[edit=Chakotay1308]Aktualisierten Code von shmia eingefügt. Mfg, Chakotay1308[/edit]