Autor Beitrag
MrFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 208

WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
BeitragVerfasst: Mi 18.01.06 20:48 
Hi Leute,

Der Titel verrät bereits meine Frage.
Ich habe einige dyn. Arrays und möchte diese nun in eine Datei speichern.
Da ich mit sowas nicht so viel Erfahrung habe, hab ich mir gedacht ich frag mal hier, wie ihr das machen würdet.

Meine Idee war es alle Arrays zu Eigenschaften eines Records zu machen und diesen dann über einen FileStream in eine Datei "einzuschleusen".

_________________
Das Leben auf der Erde mag zwar teuer sein, aber eine jährliche Rundreise um die Sonne ist gratis mit dabei.
Calyptus
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 386

Win Xp Prof
D3, D6 Pers, D7 Ent
BeitragVerfasst: Mi 18.01.06 21:01 
Eigentlich müsste XML doch wunderbar dafür geeignet sein oder?

Suche in der Entwickler-Ecke XML

_________________
Luft- und Raumfahrtechnik an der Uni Stuttgart
MrFox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 208

WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
BeitragVerfasst: Mi 18.01.06 21:18 
Ohlala, XML, das ist für mich absolutes Neuland. Ich wusste gar nicht, dass man in XML Dateien sowas speichern kann. Ich hab immer gedacht das wäre nur für Text.

Da müsste ich mir mal ein Tutorial durcharbeiten.

_________________
Das Leben auf der Erde mag zwar teuer sein, aber eine jährliche Rundreise um die Sonne ist gratis mit dabei.
Calyptus
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 386

Win Xp Prof
D3, D6 Pers, D7 Ent
BeitragVerfasst: Mi 18.01.06 21:31 
Dieses Tutorial hat mir sehr geholfen, bzw XML beigebracht:

www.delphipraxis.net/download.php?id=1811
(ich hoff mal dass es ok ist wenn ich hier Links zur DP Poste)

_________________
Luft- und Raumfahrtechnik an der Uni Stuttgart
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 18.01.06 21:34 
Records mit dynamischen Arrays lassen sich nicht ohne weiteres einfach so abspeichern (Dynamische Arrays sind Pointers).
XML ist nur bedingt geeignet. Wofür brauchst du es?
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 18.01.06 21:40 
Nimm doch einfach einen Stream: Ein dynamisches Array ist ein zusammenhängender Speicherbereich. Zum Speichern musst Du nur 2 Dinge speichern: Die Anzahl der Elemente und die Elemente selbst, z.B. so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
Procedure WriteDynamicArray (aStream : TStream; anArray : Array Of TUserType);
Var
  n : Cardinal;

Begin
  n := Length (anArray)
  aStream.Write (n, SizeOf (Cardinal));          // Anzahl der Elemente schreiben
  aStream.Write (anArray[0}, n*SizeOf (anArray[0]));  // n * Größe eines Elementes schreiben
End;

Procedure ReadDynamicArray (aStream : TStream; Var anArray : Array Of TUserType);
Var
  n : Cardinal;

Begin
  n := aStream.Read (SizeOf (Cardinal));        // Anzahl der Elemente lesen
  SetLength (anArray, n);
  aStream.ReadBuffer (anArray[0}, n*SizeOf (anArray[0]));  // n * Größe eines Elementes lesen
End;

_________________
Na denn, dann. Bis dann, denn.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mi 18.01.06 21:50 
user profile icondelfiphan hat folgendes geschrieben:
XML ist nur bedingt geeignet. Wofür brauchst du es?

Ich finde XML ist dafür eigentlich perfekt geeignet, z.B. würde folgende XML-Struktur ziemlich leicht zu speichern und auszulesen sein:
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<root>
  <array count="2">
    <element>test</element>
    <element>test</element>
  </array>
  <array count="3">
    <element>test</element>
    <element>test</element>
    <element>test</element>
  </array>
</root>

Außerdem hättest Du dann weniger Probleme damit, dass Du Deine eigene Dateidefinition speichern müsstest und entsprechende aufwändige Prozeduren zu schreiben. Solche Dinge speichere ich inzwischen immer in XML. Vorteil ist auch, dass Du einfach Änderungen auch außerhalb der Anwendung vornehmen kannst und dies nicht mit Deiner Prozedur neu schreiben musst.

Du musst Dir nur überlegen, wie dynamisch das alles sein soll.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 19.01.06 01:40 
UGrohne: Ich dachte nicht an ein array of String sondern eher an ein array of was anderes (statt array of String würde man in den meisten Fällen eine TStringList nehmen).

Bei einem array of Integer wäre eine binäre Datei extrem viel eifacher zu implementieren, viel schneller und die Dateigrösse viel kleiner. Ich hätte vielleicht meine Aussage begründen sollen ;)
Eine XML-Datei ist dafür platformunabhängig (Endianness) und Human-Readable. Allerdings wäre mir persönlich der Aufwand zu gross, die XML-Daten wieder in ein array of sowieso zu bringen. Auch wenn du einen Parser hättest müsstest du vermutlich einige für einen Anfänger nicht so simpe Zeilen coden, um das geparste wieder in das array zu bringen. Das ganze wäre auch mit einem grösseren Memory-Aufwand verbunden. Ausserdem muss man sich etwas mit der Materie beschäftigen (utf-8, Speichern von Daten via Parameter vs. nested Tags).

Kurz: XML ist ein Luxus und ist mit höherem Speicher-, Geschwindigkeit- und Entwicklungsaufwand verbunden. In der Theorie ist es ganz nett, in einigen praktischen Fällen (kleine private Projekte) lohnt es sich aber einfach nicht.

alzaimar: Yep, was aber noch wichtig ist: "TUserType" darf keine Variablen enthalten, die eine "Finalization" brauchen. Das heisst: TUserType darf weder Strings noch weitere dynamische Arrays beinhalten (sonst wird lediglich der Pointer zu den Stringdaten/Arraydaten gespeichert, die nach dem Laden keine Gültigkeit mehr hätten).
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 19.01.06 04:52 
Du hast völlig recht, ich hatte jetzt mehr an ein Gemisch aus verschiedenen Datentypen wie Strings und Arrays gedacht. Da auch der Begriff Records fiel, ging ich z.B. von Dateinformationen aus (nur als Beispiel). Und dafür sind XML-Dateien sehr geschickt. Meiner Meinung nach eben, weil ich hab mich früher extrem mit diesen verdammten (un-)typisierten Dateien rumgeschlagen und mich meistens geärgert. XML hat mir die Sache trotz des größeren Speicheraufwands sehr vereinfacht. Und wenn man sich den Aufwand für das erstmalige Lernen und spätere Zeitsparen aufgrund von weniger Implementationsaufwand und einfacherer Handhabung (IMHO) entgegenstellt, dann gewinnen bei mir auf jeden Fall die XML-Dateien.

Wenn es sich natürlich nur um ein kleines Projekt mit 4-5 Integer-Arrays handelt, lohnt es sich natürlich nicht, aber sobald Strings hinzukommen ist gelinde gesagt "pain-in-the-ass".