AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Dynamische Struktur in Typisierter Datei speichern?
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamische Struktur in Typisierter Datei speichern?

Ein Thema von draxo · begonnen am 30. Mär 2008 · letzter Beitrag vom 31. Mär 2008
Antwort Antwort
draxo

Registriert seit: 9. Mär 2007
14 Beiträge
 
Delphi 2007 Enterprise
 
#1

Dynamische Struktur in Typisierter Datei speichern?

  Alt 30. Mär 2008, 13:54
Hallo,

ich habe eine Frage zur typisierten Datei! Ich habe einen "Dateityp" erstellt, der neben ein paar Strings auch 3 Listen enthält. Kann ich diesen Typ "einfach" speichern? Ich hätte dann im Prinzip in der Datei ja nur einen Datensatz. Nach meinen bisherigen Versuchen habe ich die Vermutung, dass ich diese Liste nicht einfach abspeichern kann. Ist dies der Fall? Wenn ja, wie kann ich denn die Listen in der typisierten Datei unterbrigen? Ich kenne das Speichern dynamischer Strukturen nur von Java, hier kann man Objekte speichern. Ich hoffe, dass es in Delphi - auch wenn man das nicht ganz verlgeichen kann - möglich ist, Listen zu speichern.

Bin für jedne Tip dankbar
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Dynamische Struktur in Typisierter Datei speichern?

  Alt 30. Mär 2008, 13:56
Geht nicht so einfach, weil ja die Option der typisierten Datei nicht möglich ist. Man müsste also XML heranziehen.
Markus Kinzler
  Mit Zitat antworten Zitat
draxo

Registriert seit: 9. Mär 2007
14 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Dynamische Struktur in Typisierter Datei speichern?

  Alt 30. Mär 2008, 13:59
Und damit geht es? Du hast nicht zufällig einen Link mit einem Beispiel ?
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#4

Re: Dynamische Struktur in Typisierter Datei speichern?

  Alt 30. Mär 2008, 19:07
ja, du kannst auch in delphi objekte serialisieren (seit TP 5.5). konnte delphi also schon vor java ...

verwendet wird das serialiseren allerdings selten, und noch selterner objektororientierte datenbanken.

der standardweg ist über die normalisierung und dann ab in die zugehörigen tabellen. allternativ kannst du das auch mit 'n flatfile machen und verschiedenen satzarten (oh grauss, wie in den 60'ern)

<HTH> GG
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Dynamische Struktur in Typisierter Datei speichern?

  Alt 30. Mär 2008, 19:48
Hallo,
das ist der klassische Fall für die dpCollection
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Dynamische Struktur in Typisierter Datei speichern?

  Alt 30. Mär 2008, 21:28
Zitat von draxo:
Ich kenne das Speichern dynamischer Strukturen nur von Java, hier kann man Objekte speichern. Ich hoffe, dass es in Delphi - auch wenn man das nicht ganz verlgeichen kann - möglich ist, Listen zu speichern.
Wenn du Java kennst, dann kennst du wohl auch JSON ?
Es gibt auch Delphi Units für JSON, um komplexe Datenstrukturen zu laden und zu speichern.
Diese typisierten Dateien von Pascal sind eine üble Altlast, die man sich nicht antuen sollte.
Du hast bei hierarchischen Daten die Wahl zwischen 3 Formaten:
XML , JSON und das Delphi eigene Objektformat(*) wie es über dpCollection verwendest wird

*) alle Formulare sind in diesem Format gespeichert; gibt's als Binär- und Text-Version
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#7

Re: Dynamische Struktur in Typisierter Datei speichern?

  Alt 31. Mär 2008, 01:55
Ich bin JSON-Neuling und habe mir gerade mal die Unit JSON näher angesehen angesehen. - Ich bin enttäuscht. Bei JSON geht es nicht darum Objekte zu serialisieren, sondern ein bestimmtes Format auszugeben und einzulesen. Alle zu speichernden Werte müssen zunächst separat an die "JSON-Objekte" übergeben werden. Diese kümmern sich dann "nur" darum, das JSON-Format auszugeben und einzulesen. Im Quelltext sieht das dann so aus:

Auszug aus der Unit JSON_Usage:
Delphi-Quellcode:
    my_object := TJsonObject.Create(json_type_object);
    with my_object.AsObject do
    begin
      Put('abc', TJsonObject.Create(12));
      Put('foo', TJsonObject.Create('bar'));
      Put('bool0', TJsonObject.Create(false));
      Put('bool1', TJsonObject.Create(true));
      Put('baz', TJsonObject.Create('bang'));
      Put('baz', TJsonObject.Create('fark'));
      Delete('baz');
      my_array.AddRef; // i will destroy it myself
      Put('arr', my_array);
    end;
    writeln('my_object=');
    if JsonFindFirst(my_object, ite) then
    repeat
      writeln(#9,ite.key,': ', ite.val.AsJson);
    until not JsonFindNext(ite);
    JsonFindClose(ite);
    writeln('my_object.AsJson=', my_object.AsJson);
Gerade selbsterklärend ist das nicht.

Im Vergleich dazu können beim Delphi-Streaming Komponenten einfach gespeichert werden:Stream.WriteComponent(Component); Beide Systeme haben ihre ganz eigenen Beschränkungen. Funktional bietet JSON gegenüber dem Delphi-Streaming jedoch keinen Vorteil, wenn es auf das Format nicht ankommt. Im Gegenteil: Die Typenlosigkeit (keine Typinformationen in den gespeicherten Daten) sehe ich als Manko in vielerlei Hinsicht. Mit dem Delphi-Streaming im Binärformat ließe sich die Eingangsfrage problemlos beantworten (Stichworte: TPersistent- und TComponent-Nachfahren, Published-Eigenschaften, TPersistent.DefineProperties, TReader und TWriter, TStream.WriteComponent und .ReadComponent). Leider sind die Funktionen ObjectBinaryToText (und entsprechend ObjectTextToBinary) nicht in der Lage mit selbsteingebrachten Eigenschaftswerten (DefineProperties) umzugehen. Kurz gesagt: Ein Text-Format dieser Werte ist mit Delphi-Boardmitteln dann nicht mehr möglich (was gerade mein Problem ist (#864216)). Leider kenne ich bisher kein System, welches dazu in der Lage wäre eine Objektliste (oder Komponentenliste) zu speichern und zu laden. Das muss man eben immernoch zu Fuß machen... Bei XML sieht das soweit nicht anders aus. Und für die DPCollection gilt dasselbe wie für das Delphi-Streaming auch, da sie die Delphi-Boardmittel nur kapselt.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Dynamische Struktur in Typisierter Datei speichern?

  Alt 31. Mär 2008, 14:07
Zitat von Panthrax:
... geht es nicht darum Objekte zu serialisieren, sondern ein bestimmtes Format auszugeben und einzulesen...
Ja leider ist das Serialisierungssystem von Delphi ziemlich schwach bzw. unzureichend.
Schade, das ist ein Kernthema jeder höheren Programmiersprache.
Da hat wohl auch damit zu tun, dass (COM-)Interfaces erst später Eingang in Delphi gefunden haben.
In .NET und Java wurde das viel besser gelöst.
Es wird wohl nichts anderes übrig bleiben, als jedes Objekt und jedes Property von Hand zu spichern und zu laden.
Man kann jedes Property,das als published deklariert wurde über die RTTI (Unit TypeInfo) abfragen und setzen, aber das erfordert doch relativ viel Aufwand.
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#9

Re: Dynamische Struktur in Typisierter Datei speichern?

  Alt 31. Mär 2008, 14:14
Zitat von sx2008:
Zitat von Panthrax:
... geht es nicht darum Objekte zu serialisieren, sondern ein bestimmtes Format auszugeben und einzulesen...
Ja leider ist das Serialisierungssystem von Delphi ziemlich schwach bzw. unzureichend.
Ohne noch einmal genauer darauf einzugehen, aber bitte nicht aus dem Kontext reißen:
Zitat von Panthrax:
Bei JSON geht es nicht darum Objekte zu serialisieren, sondern ein bestimmtes Format auszugeben und einzulesen...
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
draxo

Registriert seit: 9. Mär 2007
14 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Dynamische Struktur in Typisierter Datei speichern?

  Alt 31. Mär 2008, 14:17
Vielen Dank für die ganzen Antworten hier. Aber für meine kleine Anwendung ist das glaube ich ein zu großer Aufwand.
Ich nehme es in Kauf ein wenig redundante Daten zu haben, dafür geht es recht schnell
  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 07:57 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