Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi dynamische Arrays in typitisierten Dateien speichern (https://www.delphipraxis.net/147443-dynamische-arrays-typitisierten-dateien-speichern.html)

KahPee 8. Feb 2010 20:06


dynamische Arrays in typitisierten Dateien speichern
 
Hallo,

ich habe ein Programm bei dem verschiedene Daten anfallen. Es handelt sich dabei um eine Art MSPaint-Klon. Wenn dort ein Objekt erzeugt wird (z.B. eine Linie) soll er alle Daten die nötig sind für diese Linie speichern (Anfangsposition, Endposition, Stiftdicke etc.) Mit der Zeit werden so verschiedene Objekte erstellt, die alle in einer Liste gepeichert werden.
Delphi-Quellcode:
type Bild=record
        objectscount: integer
        objectlist: array of Tobjects; //enthält obengenannte Informationen
       //....
       end;

var Bild1: Tbild;
    datei1: file of Tbild;
In dem Fall das es sich bei dem Objekt um eine Freihandzeichnung handelt, werden von JEDEM gezeichneten Pixel die Koordinaten gespeichert. D.H. in dem Fall enthält Tobjects einen dynamischen Array Pixels.

Wie speicher ich nun den record "Bild" am besten ab?
Ich hatte da an typistisierte Dateien gedacht (keine Datenbank nötig).
Delphi-Quellcode:
write(datei1, Bild1)//Bild1 in Datei1 speichern
Könnte es dabei besondere Probleme geben weil dieser Record dynamische Arrays enthält? Wenn ja wie löse ich die?
Würde auslesen über
Delphi-Quellcode:
read(datei1,Bild1)//Datei auslesen und in Bild1 speichern
funktionieren?

Vielen Dank für die antworten.

mfg KahPee

mkinzler 8. Feb 2010 20:10

Re: dynamische Arrays in typitisierten Dateien speichern
 
Zitat:

Könnte es dabei besondere Probleme geben weil dieser Record dynamische Arrays enthält?
Ja. Es wird so nicht gehen, weil eine typisierte Datei einen festen Aufbau eines Datensatzes voraussetzt
Zitat:

Wenn ja wie löse ich die?
Eine andere Form der Speicherung wählen. Z.B. XML

himitsu 8. Feb 2010 20:12

Re: dynamische Arrays in typitisierten Dateien speichern
 
dynamische Arrays, Strings, Interfaces und Objekte sind innerhalb des Records nur Pointer auf ihre Daten.

Heißt: Du mußt den Inhalt des Arrays manuell speichern, welches in solch einer typisierten Datei nicht geht.

[add]
Selbst wenn du einen derartigen Record und den zugehörigen Array-Inhalt in einer Datei speicherst,
wirst du beim auslesen des Records, aus der Datei, am Speichermanagement des Arrays rumspielen müssen, da hierbei ein ungültiger "Array-Zeiger" im Record enthalten sein wird.

KahPee 8. Feb 2010 20:22

Re: dynamische Arrays in typitisierten Dateien speichern
 
Ok, ich werde mich dann mal daran machen das mit dem vorgeschlagenen XML zu realisieren. Dazu noch ein paar Fragen:
1.) muss ich bei Weitergabe des Programms neben der .exe noch andere Dateien weitergeben? (Hab da mal was in Richtung Datenbanken gehört)
2.) muss jeder Wert einzelnd eingschrieben werden oder kann man das ganze automatisieren? (Im worstcase würd ich wohl schleifen programmieren müssen.
3.) Ist XML halbwegs erlernbar :P?

mfg KahPee

mkinzler 8. Feb 2010 20:28

Re: dynamische Arrays in typitisierten Dateien speichern
 
zu 1.) Je nach verwendeten XML-Parser ist dieser mitzuliefern ( Z.B. bei MSXML). Eine Datenbank wäre natürlich eine weitere Option
zu 2.) Automatisch wird es wohl nicht gehen
zu 3.) XML ist eng mit HTML; also eine Markup Language
http://de.wikipedia.org/wiki/Extensible_Markup_Language

KahPee 8. Feb 2010 20:31

Re: dynamische Arrays in typitisierten Dateien speichern
 
Hier Wird in der .pdf beschrieben wie man bestimmte Units einbindet in das Projekt. Werden in dem Fall weitere Dateien benötigt?
Und noch ne Frage ist mir gekommen. Ist XML halbweges (!) schnell?
Außerdem: werden alle Daten in der xml-Datei als string gespeichert oder immer in dem entsprechenden Format? (sind also keine Formatierungen von integers in Strings und beim Auslesen umgekehrt, nötig?)

daywalker9 8. Feb 2010 20:52

Re: dynamische Arrays in typitisierten Dateien speichern
 
es kommt auf den parser an. zB MSXML ist einer der schnellsten die ich kenne. dort werden beim auslesen die daten im OleVariant geliefert, d.h. du brauchst dich eigentlich nicht um das konvertieren kümmern

himitsu 8. Feb 2010 21:23

Re: dynamische Arrays in typitisierten Dateien speichern
 
XML kann schnell sein oder auch nicht ... je nach Art und Menge der Daten und vorallem je nach verwendeter XML-Lib.

Langsamer als eine komplett binäre Variante, wie z.B. eine typisierte Datei, ist es schon etwas.

Was das Speichern/Auslesen betrifft, da gibt es für verschiedenste Dinge passende Serialisierungen.


Wobei MSXML einer der Langsamsten und Speicherhungrigsten, welche ich kenne.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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