AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi dynamische Arrays in typitisierten Dateien speichern
Thema durchsuchen
Ansicht
Themen-Optionen

dynamische Arrays in typitisierten Dateien speichern

Ein Thema von KahPee · begonnen am 8. Feb 2010 · letzter Beitrag vom 8. Feb 2010
Antwort Antwort
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#1

dynamische Arrays in typitisierten Dateien speichern

  Alt 8. Feb 2010, 20:06
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).
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
read(datei1,Bild1)//Datei auslesen und in Bild1 speichern funktionieren?

Vielen Dank für die antworten.

mfg KahPee
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: dynamische Arrays in typitisierten Dateien speichern

  Alt 8. Feb 2010, 20:10
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
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#3

Re: dynamische Arrays in typitisierten Dateien speichern

  Alt 8. Feb 2010, 20:12
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: dynamische Arrays in typitisierten Dateien speichern

  Alt 8. Feb 2010, 20:22
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 ?

mfg KahPee
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: dynamische Arrays in typitisierten Dateien speichern

  Alt 8. Feb 2010, 20:28
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
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: dynamische Arrays in typitisierten Dateien speichern

  Alt 8. Feb 2010, 20:31
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?)
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#7

Re: dynamische Arrays in typitisierten Dateien speichern

  Alt 8. Feb 2010, 20:52
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
Lars
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#8

Re: dynamische Arrays in typitisierten Dateien speichern

  Alt 8. Feb 2010, 21:23
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 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