Dateien schreiben

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

burri

Betreff: Dateien schreiben

BeitragMi, Jul 01, 2009 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich möchte Werte für Kacheln (Koordinaten, Kachelart) in einer Datei abspeichern.
Wie erreiche ich dass die Daten dabei nicht überschrieben werden, sondern sich anhängen?

Mit dem Write-Befehl bin ich in die Schleife in der auch das Array tiles_map eingelesen wird.
Ich möchte ein Tile-based Leveleditor bauen.

grüße, von burri

Code: [AUSKLAPPEN]
For a=1 To itemmax
If KeyHit(a+1) Then tile=LoadImage("item\player"+a+".bmp"):itemmax=itemmax+1
Next

tiles_map(write_num,1) = (xwert/50)*50+ax
tiles_map(write_num,2) = (ywert/50)*50+ay
tiles_map(write_num,3) = tile
fileout = WriteFile("levels\mydata.dat")
WriteInt( fileout, tiles_map(write_num,1) )
WriteInt( fileout, tiles_map(write_num,2) )
WriteInt( fileout, tiles_map(write_num,3) )

CloseFile( fileout )

Tankbuster

BeitragMi, Jul 01, 2009 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Erst schaun, wie groß die Datei ist, und dann mit SeekFile ans Ende springen bevor du irgendwas reinschreibst Wink
Twitter
Download Jewel Snake!
Windows|Android
 

burri

BeitragMi, Jul 01, 2009 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo tankbuster,

wenn ich dich richtig verstanden habe, füge ich z.B. "seekfile filout,10"
ein, danach wird jeder neue Datensatz mit einem Offset von 10 Byte nach rechts in die Datei eingefügt.
Leider steht wieder nur ein Datensatz in der Datei.
Kannst du mir ein Beispiel posten?

viele Grüße, burri

Code: [AUSKLAPPEN]
For a=1 To itemmax
If KeyHit(a+1) Then tile=LoadImage("item\player"+a+".bmp"):itemmax=itemmax+1
Next

tiles_map(write_num,1) = (xwert/50)*50+ax
tiles_map(write_num,2) = (ywert/50)*50+ay
tiles_map(write_num,3) = tile
fileout = WriteFile("levels\mydata.dat")

WriteInt( fileout, tiles_map(write_num,1) )

WriteInt( fileout, tiles_map(write_num,2) )

WriteInt( fileout, tiles_map(write_num,3) )

SeekFile fileout ,10


CloseFile( fileout )


Leider hat es nicht funktioniert, es steht wieder nur ein Datensatz in der Datei.

[/code]

Nicdel

BeitragMi, Jul 01, 2009 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

file = ReadFile("bla.txt")
size = FileSize("bla.txt")
SeekFile file, size


So in etwa...
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Xeres

Moderator

BeitragMi, Jul 01, 2009 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum 10 Byte? Eine Integer ist 4 Byte groß -> Datentypen
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

burri

BeitragMi, Jul 01, 2009 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank,

für eure Antworten.

Es genügt also für einen Integer-Wert den Seekfile-Befehl so zu schreiben:
seekFile fileout,4
für einen String kommt es auf die Länge des Strings an.

Wieso aber habe ich nur den Datensatz der letzten Kachel in der Datei stehen?

Wenn ich hundert Kacheln setze, müsste ich hintereinander auch hundert Datensätze (x-Koordinate,y-Koordinate,Kachelart) in der Datei stehen haben.

Das Beispiel von Nicdel habe ich eingefügt, leider ohne Erfolg.

Es würde mir helfen wenn ich ein lauffähiges Code-Beispiel bekommen könnte.

Danke, und viele Grüße

von burri

skey-z

BeitragMi, Jul 01, 2009 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
könnte vielleicht daran liegen, dass die geladene Datei immer die gleiche größe hat, wie beim öffnen und ersomit immer wieder an die gleiche Stelle springt, und erst beim schließen die neue Größe schreibt.

Da gibt es 2 herangehensweisen.
1. nach jedem schreiben direkt wieder schließen.
2. alles in einer Schleife in die Datei schreiben
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

burri

BeitragDo, Jul 02, 2009 7:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo skey-z,

ich werd es mal mit deinem zweiten Vorschlag versuchen.

Danke, burri

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group