Array in Datei speichern

Anfängerfragen zum Programmieren mit PureBasic.
Norbie
Beiträge: 134
Registriert: 29.08.2004 12:45
Wohnort: Chemnitz
Kontaktdaten:

Array in Datei speichern

Beitrag 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!
http://www.nevu.de/ Künstliche Intelligenz, die letzte Herausforderung!
Icke
Beiträge: 143
Registriert: 08.09.2004 13:19

Beitrag 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...
Norbie
Beiträge: 134
Registriert: 29.08.2004 12:45
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von Norbie »

Das ist viel zu langsam!
Nagut. Trozdem danke für eine Hilfe!
http://www.nevu.de/ Künstliche Intelligenz, die letzte Herausforderung!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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 :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten