Seite 1 von 1
Array in Datei speichern
Verfasst: 29.04.2006 14:21
von Norbie
Hallo,
ich will ein Array einer datei speichern und auch wieder laden. Aktuell mach ich das so:
Code: Alles auswählen
Structure WELTSTRUC
inhalt.l
nachrichten.l[#nachrichten]
EndStructure
Dim welt.WELTSTRUC(#weltx,#welty)
....
WriteData(@welt(),(#weltx+1)*(#welty+1)*SizeOf(WELTSTRUC))
....
ReadData(@welt(),(#weltx+1)*(#welty+1)*SizeOf(WELTSTRUC))
...
Das Array geht dabei irgendwie kaputt, wird umgeordnet.
Mach ich etwas falsch?Ich benutz die Version 3.94!
Thx schonmal!
Verfasst: 30.04.2006 14:32
von Icke
Also ich mach sowas gerne mit LL und mit Writestring anstelle von Writedata, mal nen Beispiel:
Code: Alles auswählen
Structure nachrichten
nummer.l
datum$
inhalt$
EndStructure
NewList heute.nachrichten()
For u=1 To 10
AddElement(heute())
heute()\nummer=u
heute()\datum$=FormatDate("%yyyy/%mm/%dd", Date())
heute()\inhalt$="inhalt"
Next u
CreateFile(0,"d:\nachrichten.txt")
ForEach heute()
WriteStringN(Str(heute()\nummer)+";"+heute()\datum$+";"+heute()\inhalt$)
Next
CloseFile(0)
Man muss dabei berücksichtigen das kein CR oder LF in den Feldern steckt, dann funktioniert das ganze soi nicht mehr. Außerdem berücksichtigen das man eine Begrenzung der Strings hat...
Verfasst: 30.04.2006 15:14
von Norbie
Das ist viel zu langsam!
Nagut. Trozdem danke für eine Hilfe!
Verfasst: 04.05.2006 19:47
von Kaeru Gaman
du kannst dein array mit schleifen und WriteLong() speichern:
Code: Alles auswählen
For t=0 to #welty
For n=0 to #weltx
WriteLong(welt(n,t)\inhalt)
WriteLong(welt(n,t)\nachrichten)
Next
Next
analog dann mit ReadLong() lesen.
mit Read/WriteData hab ich nicht so die erfahrung, könnte sein, dass du ein negatives offset brauchst beim lesen oder schreiben.
änder notfalls mal den titel des thread in "Frage zu Read/WriteData"
..und bitte beim posten von code auch code-tags benutzen...
Verfasst: 04.05.2006 23:34
von mk-soft
Hi,
Habs mal ausprobiert und bei mir funktioniert es.
Code: Alles auswählen
xx = 10
yy = 10
Structure udtDaten
Index.l
dat.l[999]
EndStructure
Dim tab.udtDaten(xx, yy)
Dim tab2.udtDaten(xx, yy)
size = (xx + 1) * (yy + 1) * SizeOf(udtDaten)
Debug size
adr = @tab()
adr2 = @tab2()
i = 0
For y = 0 To yy
For x = 0 To xx
i + 1
tab(x,y)\index = i
Next x
Next y
If CreateFile(0, "ArrayData.dat")
WriteData(adr, size)
CloseFile(0)
EndIf
If OpenFile(0, "ArrayData.dat")
ReadData(adr2, size)
CloseFile(0)
EndIf
For i = 0 To xx
Debug Str(tab(i,i)\Index) + " | " + Str(tab2(i,i)\Index)
Next i
FF
