Seite 1 von 1

Struktur/Liste in Datei speichern und lesen ?

Verfasst: 05.08.2011 13:41
von Darky
Ist es möglich eine ganze struktur zu speichern und zu lesen zbs mit :

Code: Alles auswählen

structure test
 a.s
 b.l
 c.b
endstructure 

global newlist t.test()
addelement(t())
t()\a="Das ist ein test"
t()\b=9999
t()\c=1

;==== GEHT SOWAS ???? ====
openfile(1,"test.txt")
writedata(1,@t(),sizeof(test))
closefile(1)
Meine bisherigen versuche speichern zwar angeblich lesen aber nichtmehr aus ...

ist sowas oder sowas änliches möglich ?

danke für antworten

Re: Struktur/Liste in Datei speichern und lesen ?

Verfasst: 05.08.2011 13:49
von STARGÅTE
In diesem Fall nicht.

Es ist nur möglich Strukturen ohne Strings mit einem "rutsch" zu lesen/schreiben.
Wenn du die Länge deiner Strings kennst bzw. begrenzen kannst, kannst du Fix-Strings nehmen, dann kannst du auch so schreiben wie du es im Code machst.

Code: Alles auswählen

structure test
  a.s{255} ; String mit maximal 255 Zeichen
  b.l
  c.b
endstructure 
Ansonsten musst du selbst die Strings speichern.
ZB mit WriteString(File, String) und einem WriteCharacter(File, 0) damit der String endet.

Re: Struktur/Liste in Datei speichern und lesen ?

Verfasst: 05.08.2011 13:53
von Darky
Supi danke :D :lurk: :lurk: < für dich !

und wie würde das nun aussehen wenn ich eine linkedlist speichern will ? Sagen wir mit fixstrings :)

Gruß Darky

P.s.: Wäre die Monkey Community mal so toll wie die von Purebasic =( Da wartet man tage auf antworten !!! echt lob an diese community ! :D

Re: Struktur/Liste in Datei speichern und lesen ?

Verfasst: 05.08.2011 14:04
von STARGÅTE
Derzeit bietet PureBasic noch nicht die Möglichkeit solche Sachen "mit einer" Funktion zu Speichern/Laden.

Das heißt bei Listen müsstest du auch selber einmal die Anzahl der Elemente speichern und dann nacheinander die Elemente selbst:

Code: Alles auswählen

WriteLong(File, ListSize(Liste()))
ForEach Liste()
	WriteData(); ...
Next
und beim lesen.

Code: Alles auswählen

anzahl = ReadLong(File)
For N = 1 to Anzahl
 	AddElement(Liste())
	ReadData(File, @Liste(), ...) 
Next

Re: Struktur/Liste in Datei speichern und lesen ?

Verfasst: 15.08.2011 07:12
von GPI
Liegt daran, das linkedList in Speicher nicht an einen Stück stehen müssen, sondern Kreuz und Quer verteilt sein können. Ich glaub nicht, das da so schnell was kommt.

Re: Struktur/Liste in Datei speichern und lesen ?

Verfasst: 15.08.2011 07:56
von Hoessi666
Falls man in der Datei nur die Liste spreichert, oder die Liste am Ende der Datei ist, könnte man beim Laden abfragen, ob das Ende des Files erreicht ist ("Eof()"-Befehl) oder nicht.
Wenn nicht lädt man einen weiteren Listeneintrag, ansonsten springt man aus der Schleife raus.

Code: Alles auswählen

While Eof()<>0
AddElement(Liste())
;DatenLaden und zuordnen
wend
Beim Erstellen könnte man dann analog die Liste mit "NextElement()" durchlaufen und Stück für Stück speichern.

Code: Alles auswählen

While NextElement()
;Daten schreiben
Wend
Spart zwar nur ein paar Byte in der Datei, aber ist eine nette Alternative... :)

Re: Struktur/Liste in Datei speichern und lesen ?

Verfasst: 15.08.2011 09:22
von GPI

Code: Alles auswählen

While NextElement()
;Daten schreiben
Wend
Gefährlich - da fehlt ein ResetList()

Re: Struktur/Liste in Datei speichern und lesen ?

Verfasst: 15.08.2011 11:38
von Hoessi666
GPI hat geschrieben:

Code: Alles auswählen

While NextElement()
;Daten schreiben
Wend
Gefährlich - da fehlt ein ResetList()
Erbsenzähler 8)
Dass man an den Anfang der Liste geht setze ich mal voraus. Ausserdem würde er die Schleife ja nicht durchlaufen, wenn man ohne ResetList() das nächste Element versucht aufzurufen und gelichzeitig am Ende der Kette steht!

Gänzlich ungefährlich ist´s per Foreach Liste().

Re: Struktur/Liste in Datei speichern und lesen ?

Verfasst: 15.08.2011 12:07
von GPI
Wenn das am Ende der Liste steht, dann hat man ja noch Glück und merkt es, weil halt nichts gespeichert wird. Blöd ist, wenn man an Element 4 von 100 ist und sich wundert, woher der Datenverlust kommt.

Foreach ist hier in der Tat sowohl die kürzere als auch die sichere Lösung.