![]() |
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:
[edit=Chakotay1308]Aktualisierten Code von shmia eingefügt. Mfg, Chakotay1308[/edit]
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz