Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Dateien / Laufwerke (https://www.delphipraxis.net/41-library-dateien-laufwerke/)
-   -   Delphi Datei mit fester Satzlänge in TStrings laden (https://www.delphipraxis.net/63355-datei-mit-fester-satzlaenge-tstrings-laden.html)

shmia 17. Feb 2006 13:52


Datei mit fester Satzlänge in TStrings laden
 
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]


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz