![]() |
Dyn Array mit Werten aus Datei füllen
Hallo,
ich möchte eine untypisierte Datei in ein dynamisches Array einlesen. Ich bekam nach einiger Zeit immer Speicherprobleme. Laut diesen Textes hier ![]() sollte man in Delphi die Länge des dynamischen Array nicht in einer Schleife, sondern wenn möglich schon vorher setzen. Da ich die Dateigröße habe und auch die Größe des Records, sollte das kein Problem sein... dachte ich :lol: Aber wie genau ermittle ich die Größe, die das Array haben muss ? Ein SizeOf(f) wird nicht reichen, oder ? Hier die Details:
Delphi-Quellcode:
type
rMyRecord= record TimeStamp : String; WerteID : String; Wert : String; end; var DatenArray : array of rMyRecord; f : File; SetLength(DatenArray,????); |
Re: Dyn Array mit Werten aus Datei füllen
Zitat:
|
Re: Dyn Array mit Werten aus Datei füllen
Du öffenest den Filestream, setzt die länge des arrays auf Filestream.size DIV sizeof(record) und kannst dann die einträge einlesen.
|
Re: Dyn Array mit Werten aus Datei füllen
Hallo,
ich denke das -> Zitat:
mfg DerDan |
Re: Dyn Array mit Werten aus Datei füllen
Hi,
ich kann die Strings zwar begrenzen...
Delphi-Quellcode:
... Das Problem ist dennoch, dass die Größe der Sätze in meiner Datei durchaus unterschedlich ausfallen können.
rMyRecord= record
TimeStamp : String[25]; WerteID : String[10]; Wert : String[255]; end; Dass heißt, ich kann die Gesamtgröße der Datei nicht einfach durch die Größe des Records (wäre dann jetzt 290) teilen... oder Doch ? :gruebel: |
Re: Dyn Array mit Werten aus Datei füllen
Also so wie ich das sehe, muss ich vom Worstcase ausgehen. Das Wäre dann Filesize div 3. Weil im ungünstigsten Fall in jedem
Recordelement nur ein Zeichen drinstehen könnte. Das wäre dann beim Beispiel von einer 1000 Byte großen Datei 334 Elemente im Array. Würde ich die Dateigröße nur durch die Recordgröße dividieren bekäme ich in diesem Beispiel einen Wert von aufgerundet 4 Array-Elementen. Aber wie gesagt, die Sätze sehen von ihrer Größe in der Datei äußerst unterschiedlich aus. |
Re: Dyn Array mit Werten aus Datei füllen
Hast Du das mal ausprobiert? AFAIK wird immer SizeOf(Record) * Anzahl_Records in die Datei geschrieben, unabhängig davon, wieviel Speicher im jeweiligen Record tatsächlich benutzt wird.
|
Re: Dyn Array mit Werten aus Datei füllen
Ich schreibe in eine "untypisierte" Datei. Also nicht Record- sondern Byteweise. Das heißt so gesehen stehen
keine Records in der Datei, sondern eine riesige Zeichenkette, die ich erst beim Auslesen in eine Struktur bringe. |
Re: Dyn Array mit Werten aus Datei füllen
Achso, dann ist das was anderes.
|
Re: Dyn Array mit Werten aus Datei füllen
Zitat:
Falls XML für dich zu viel Overhead bedeutet, dann gäbe es da auch noch ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 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