Array in Datei Speichern?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

SupeRalF

Betreff: Array in Datei Speichern?

BeitragMi, Jan 30, 2008 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte (mit so wenig Aufwand wie möglich) eine Array-Variable in eine Datei speichern und anschließend wieder auslesen. geht das einfach so? mit google bin ich nur auf ein Toturial gestößen, wie man werte in eine txt speichert, nicht ganze Arrays.
 

ChristianK

BeitragMi, Jan 30, 2008 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
mit google bin ich nur auf ein Toturial gestößen, wie man werte in eine txt speichert, nicht ganze Arrays.

Arrays sind auch "Werte" ( Variablen ). Die speicherst du genau auf die gleiche Art und Weise.

Code: [AUSKLAPPEN]
Local array:Int[] = [ 1, 2, 3, 4 ]
Local stream:TStream = WriteStream( "MeineDatei.txt" )

For Local I:Int = 0 To array.length - 1
   WriteLine stream, array[ I ]
Next

CloseStream stream
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

d-bug

BeitragMi, Jan 30, 2008 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Öffne mit WriteFile einen Stream, schreib die Array-Länge als erstes mit WriteInt rein, dann ließ jeden Eintrag in dem Array aus und schreib auch den in das File.

Kleines Beispiel zum schreiben eines Integer-Arrays in eine Datei:
Code: [AUSKLAPPEN]
Local Stream:TStream = WriteFile ("DeinPfad")
Stream.WriteInt (Array.Length)
For Local i:Int = EachIn Array
    Stream.WriteInt (Array[i])
Next
Stream.Close ()


Das auslesen funktioniert so ähnlich:
Code: [AUSKLAPPEN]
Local Stream:TStream = ReadFile ("DeinPfad")
Array = Array[..Stream.ReadInt ()]
For Local i:Int = Array.Length
    Array[i] = Stream.ReadInt ()
Next
Stream.Close ()


cheers
 

c64

BeitragMi, Jan 30, 2008 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Code: [AUSKLAPPEN]

 LoadByteArray
 SaveByteArray


allerdings nur ByteArrays, sollte aber kein problem sein sich die daten aufzubereiten.
Betreten verboten! Kinder haften für ihre Eltern!

SupeRalF

BeitragMi, Jan 30, 2008 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank für eure antworten, aber irgendwie glaub ich, trifft das nicht das, was ich machen will.
in der Praxis habe ich einen Editor für ein Spiel, bei dem man die felder in einem Rastermuster editieren kann. ganz oben hab ich deshalb stehen:
Code: [AUSKLAPPEN]
Global level [100,100]

zum test (ging schneller) steht da drunter nun:
Code: [AUSKLAPPEN]

level[0,0]=1
level[1,1]=1
level[2,2]=2
level[3,3]=2
level[4,4]=1
level[5,5]=1

das ist also mein spielfeld. nun will ich diesen array mit allen darin vorhandenen integern speichern. aber WIE?

EDIT:
ich habs geschafft!!!
einfach mit einer doppelten for schleife... halt so:

Code: [AUSKLAPPEN]
Local stream:TStream = WriteStream( "D:/MeineDatei.txt" )

For Local a:Int = 0 To 99
   For Local i:Int = 0 To 99
      WriteLine stream, level[i,a]
   Next
Next
 

ChristianK

BeitragMi, Jan 30, 2008 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
So, wie es oben beschrieben wurde, nur mit einer weiteren Schleife.

Code: [AUSKLAPPEN]
For Local I:Int = 0 To 99
   For Local J:Int = 0 To 99
      WriteInt datei, level[ I, J ]
   Next
Next
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

SupeRalF

BeitragDo, Jan 31, 2008 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für eure Hilfe! klappt bisher alles wunderbar. Smile

jetzt muss ich nur noch die datei wieder in einen array umwandeln, also wieder laden. mit dem code von d-bug kann man leider nur 1-dimensionale arrays auslesen, ein rumexperimentieren mit readline brachte mir immer einen fehler hervor... wie kann ich meinen 2-d array wieder laden?

Suco-X

Betreff: .....

BeitragDo, Jan 31, 2008 12:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hiho
Die Daten im Array sind vom Datentyp int, du solltest also auch WriteInt fürs schreiben der Datei benutzen. Auslesen geht genauso wie das schreiben, nur ReadInt verwenden. Ich denke du solltest dir zum Thema Datentypen noch ein wenig Hintergrundwissen aneignen.
Mfg
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group