Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateigröße bei Array of String[255]; (https://www.delphipraxis.net/11759-dateigroesse-bei-array-string%5B255%5D%3B.html)

Hazardos 13. Nov 2003 12:10


Dateigröße bei Array of String[255];
 
Hallo,
ich habe ein Programm geschrieben, welches eine Datei einliest mit einem Array[0..1000] of String [255]
Ich möchte, dass sich die Länge der Strings automatisch einstellt, um die Datei kleiner zu machen. Die Länge sollte aber auch maximal werden können.

mfg Hazardos

OLLI_T 13. Nov 2003 12:55

Re: Dateigröße bei Array of String[255];
 
Hallo Hazardos!

Sofern die Datei nur Text und keine anderen Daten beinhaltet, verwende doch einfach TStringlist (Methoden:LoadFromFile, SaveToFile). Falls Du NonVCL würd ich mir die VCL Implementierung mal anschauen. Ist nämlich gut gelöst von den Borländern.

Viele Grüsse

OLLI

Luckie 13. Nov 2003 15:15

Re: Dateigröße bei Array of String[255];
 
Wie wäre es mit AssigneFile, Reset, und Readln? :roll:

Minz 16. Nov 2003 23:35

Re: Dateigröße bei Array of String[255];
 
und ähm

...array of string; //[255] weglassen

Hazardos 17. Nov 2003 08:48

Re: Dateigröße bei Array of String[255];
 
Den teil brauche ich um eine datei diesen typs zu speichern.... deswegen auch
Delphi-Quellcode:
array[0..1000] of string[255]

neolithos 17. Nov 2003 19:02

Re: Dateigröße bei Array of String[255];
 
Ich würde das so machen! [Nicht verpflichtend]

Delphi-Quellcode:
?? = record
  dwLength : Cardinal; // Anzahl der Zeichen
  fStrs : array [0..0] of String;
end;
Einfache währe eine TStringList nachkomme!

In die Datei wird dann gespeichert:

4 Byte - Anzahl der Strings

für jeden Eintrag
4 Byte - Länge des Strings
n Byte - Daten des Textes

Christian Seehase 17. Nov 2003 20:08

Re: Dateigröße bei Array of String[255];
 
Moin Neolithos,

wenn Du versuchst einen Record einzulesen, der so aufgebaut ist, wirst Du aber nicht das Gewünschte erhalten.
Ein String ist schliesslich erst einmal nur ein Pointer, dass heisst der Record, den Du da deklariert hast, hat eine Länge von 8 Byte.

Das beschriebene Prinzip (Länge + n Byte Daten) ist natürlich richtig, aber so einen Record kannst Du leider nicht dafür verwenden.

neolithos 18. Nov 2003 11:05

Re: Dateigröße bei Array of String[255];
 
Warum nicht???

Mein Bsp. ausführlicher (nur einlesen):

BlockRead-> ersten 4 Bytes in dwLength
GetMem(fData, 4 * dwLength + 4) <- obwohl ich mir an dieser Stelle nicht sicher bin ob ich Delphi mit seiner String-Verarbeitung durcheinander bringe (deshalb verwende ich meistens PChar's, die sind eindeutig)

fData.dwLength := dwLength;

Und dann für jeden Eintrag:

Länge via. BlockRead
Einlesen der String-Daten

String -> SetLength(fData.fStr[I], Länge)
PChar -> GetMem(fData.fStr[I], Länge + 1)

------

* vorsicht nicht getestet, nur aus dem gedächtnis notiert *

Christian Seehase 18. Nov 2003 20:13

Re: Dateigröße bei Array of String[255];
 
Moin Neolithos,

so ginge das natürlich.
Ich meinte, dass man nicht einfach einen Record so definieren kann, wie Du es getan hast, und direkt in diesen Einlesen, ohne Speicher zu reservieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 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 by Thomas Breitkreuz