Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Größe von TStrings in Byte ermitteln (https://www.delphipraxis.net/159499-groesse-von-tstrings-byte-ermitteln.html)

devidespe 30. Mär 2011 16:06

Delphi-Version: XE

Größe von TStrings in Byte ermitteln
 
Hallo,

ich lese eine Datendatei zur schnelleren Bearbeitung in eine Stringliste vom Typ TStrings ein und möchte gerne anhand der Stringliste erfahren, wie groß die eingelesene Datei in Byte ist.

Leider definiert die Stringlist-Klasse keine entsprechende Funktion und ich habe nur Funktionen gefunden, um die Anzahl der Strings auszulesen. Habe ich da etwas übersehen oder muss ich wirlich für jeden Eintrag in der Stringlist die Länge bestimmen und diese zu einer Größenvariable addieren?

Danke schon mal für die Hilfe.

Luckie 30. Mär 2011 16:08

AW: Größe von TStrings in Byte ermitteln
 
Anzahl der enthaltenen Zeichenketten mal Länge der Zeichenketten.

Nachtrag: Und eventuell noch die Anzahl der Zeilenumbrüche (Linefeed, Carriagereturn) dazu addieren.

DeddyH 30. Mär 2011 16:14

AW: Größe von TStrings in Byte ermitteln
 
Und das Ganze mit SizeOf(Char) multiplizieren, sonst kommt bei Unicode ein falsches Ergebnis raus.

[edit] Müsste doch auch mit Length(Stringlist.Text) * SizeOf(Char) zu machen sein, das wäre zumindest einfacher. [/edit]

Luckie 30. Mär 2011 16:16

AW: Größe von TStrings in Byte ermitteln
 
Stimmt ich habe die Text Eigenschaft vergessen.

p80286 30. Mär 2011 16:58

AW: Größe von TStrings in Byte ermitteln
 
Und was spricht gegen filesize ?
Gruß
K-H

Christian Seehase 30. Mär 2011 17:07

AW: Größe von TStrings in Byte ermitteln
 
Zitat:

Zitat von DeddyH (Beitrag 1092058)
[edit] Müsste doch auch mit Length(Stringlist.Text) * SizeOf(Char) zu machen sein, das wäre zumindest einfacher. [/edit]

Das funktioniert nur bedingt, nämlich dann, wenn die Zeilen #13#10 als Zeilenvorschub haben, und die letzte Zeile mit #13#10 abgeschlossen wird.
Wenn man die Eigenschaft Text verwendet werden alle Zeilenvorschübe auf #13#10 angepasst (auch, wenn in der Datei evtl. nur #10 verwendet wird), und die letzte Zeile wird auch mit #13#10 beendet (auch wenn die Datei am letzten Zeichen der letzten Zeile ohne weiteren Zeilenvorschub endet.)

Beispiel:


Delphi-Quellcode:
const
  _sContent = 'Zeile1'#10'Zeile2'#10'Zeile3';

var
  sl : TStringList;

begin
  sl := TStringList.Create;
  try
    ShowMessage(IntToStr(Length(_sContent)));
    sl.Text := _sContent;
    ShowMessage(IntToStr(Length(sl.Text)));
  finally
    sl.Free;
  end;
end;
Erste Ausgabe 20, zweite 24.
Das gilt auch, wenn man die Daten aus einer Datei einliest.
Deswegen kann man mit TStringList auch so schön Dateien mit die #10 als Zeilenvorschub haben durch laden und speichern mit #13#10 versehen :wink:

himitsu 30. Mär 2011 17:30

AW: Größe von TStrings in Byte ermitteln
 
Und nicht zu vergessen die Zeichenkodierung der Datei.
Also nein, du kannst nicht Anhand der StringList auf die Größe der Datei zurückschließen.

DeddyH 31. Mär 2011 08:18

AW: Größe von TStrings in Byte ermitteln
 
Wobei p80286 schon Recht hat, wozu mit TStringlist rumhantieren, wenn das über FileSize einfacher geht? Oder von hinten durch die Brust ins Auge: einen Stream erstellen, Datei laden und Stream.Size auslesen :stupid:

devidespe 31. Mär 2011 10:12

AW: Größe von TStrings in Byte ermitteln
 
FileSize geht leider nicht, da es sich um eine verschlüsselte Datei handelt, die entschlüsselt und dann ins StringList eingelesen wird. Die Dateigrößen zwischen verschlüsselter und entschlüsselter Datei sind nicht gleich.

Sobald die Datei entschlüsselt ist, steht in ihr die entschlüsselte Dateigröße, die ich mit der tatsächlichen gegenprüfen muss. Deswegen meine Frage nach der Größe...

Was ich auch ausschließen kann ist Unicode, jedes Zeichen ist also als AnsiChar codiert. Insofern werde ich wohl die Anzahl der StringList-Einträge und die jeweiligen Zeichenlängen durchgehen müssen. Hätte ja sein können, dass es einfacher geht.

DeddyH 31. Mär 2011 10:15

AW: Größe von TStrings in Byte ermitteln
 
Aber auch damit bekommst Du u.U. nicht die exakte Dateigröße, wie oben bereits demonstriert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:06 Uhr.
Seite 1 von 3  1 23      

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