![]() |
Dynamische Struktur in Typisierter Datei speichern?
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 :) |
Re: Dynamische Struktur in Typisierter Datei speichern?
Geht nicht so einfach, weil ja die Option der typisierten Datei nicht möglich ist. Man müsste also XML heranziehen.
|
Re: Dynamische Struktur in Typisierter Datei speichern?
Und damit geht es? Du hast nicht zufällig einen Link mit einem Beispiel :) ?
|
Re: Dynamische Struktur in Typisierter Datei speichern?
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 |
Re: Dynamische Struktur in Typisierter Datei speichern?
|
Re: Dynamische Struktur in Typisierter Datei speichern?
Zitat:
![]() 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 |
Re: Dynamische Struktur in Typisierter Datei speichern?
Ich bin JSON-Neuling und habe mir gerade mal die
![]() Auszug aus der Unit JSON_Usage:
Delphi-Quellcode:
Gerade selbsterklärend ist das nicht.
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); Im Vergleich dazu können beim Delphi-Streaming Komponenten einfach gespeichert werden:
Delphi-Quellcode:
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 (
Stream.WriteComponent(Component);
![]() |
Re: Dynamische Struktur in Typisierter Datei speichern?
Zitat:
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. |
Re: Dynamische Struktur in Typisierter Datei speichern?
Zitat:
Zitat:
|
Re: Dynamische Struktur in Typisierter Datei speichern?
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 :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 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