save/load-Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

C64-Flo

Betreff: save/load-Problem

BeitragMi, Nov 29, 2006 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich programmiere nur so ein bisserl nebenebei und möchte gerade einen Adventskalender für meine Liebste schreiben...
damit siche dieser auch "merkt" welche Türchen schon geöffnet wurden, brauche ich eine gaaanz einfache save/load-routine (die sich im Grunde nur eine einzige Variable merkt)

Nachdem ich in Robs tutorial eigentlich die richtigen Befehle gefunden habe

Code: [AUSKLAPPEN]

stream = ReadFile("save.txt")
tage=readbyte(stream)
closefile stream


und

Code: [AUSKLAPPEN]

stream = WriteFile("save.txt")
writeshort stream,tage
closefile stream


fördert mir das Programm aber seltsame Werte beim laden zutage -
"50" anstatt "2" bzw "51" anstatt 3 usw....

woran liegt das?

Question
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.)

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Nov 29, 2006 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz einfach, du speicherst die Variable als Short(2 Byte) und liest aber nur 1 Byte aus!

Code: [AUSKLAPPEN]
stream = ReadFile("save.txt")
tage=readbyte(stream)
closefile stream
;....
;...
stream = WriteFile("save.txt")
writebyte stream,tage
closefile stream
[BB2D | BB3D | BB+]

C64-Flo

BeitragMi, Nov 29, 2006 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach >hust< ...mein fehler, das war noch von gestern Abend - hab da ein bisschen rumprobiert -

also mit

Code: [AUSKLAPPEN]

stream = ReadFile("save.txt")
tage=readbyte(stream)
closefile stream

und
Code: [AUSKLAPPEN]

stream = WriteFile("save.txt")
writebyte stream,tage
closefile stream
end


habe ich dasselbe Problem -

konkret gesagt:
In der textdatei ist die Zahl "2" gespreichert, in BB hat die geladenen Variable "tage" den Wert "50"
Rolling Eyes

...hmm hat das vlt mit ASCII code zu tun?
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.)

BladeRunner

Moderator

BeitragMi, Nov 29, 2006 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hast Du schlau erkannt, die ASCIIs sind schuld.
Wenn es ganz einfach sein soll, speicher Deine offenen Tage per writeline
und lese sie mit int(readline()) aus. Wär zwar normalerweise Platzverschwendung aber für eine Zahl kann man das durchaus tolerieren Wink
Ansonsten kämst du natürlich mit ql:CHR() an die passenden Zahlwerte.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

5k41

BeitragMi, Nov 29, 2006 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
poste doch mal den gesamten code, oder guck selbst ob du die Variable viellicht irgendwo änderst Wink, sonst kanns eigentlich nicht sein.

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

BladeRunner

Moderator

BeitragMi, Nov 29, 2006 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach ja, Du könntest auch einfach in deinem Programm mittels ql:currentdate$ überprüfen welches Datum ist und anhand dessen die Türchen aufmachen, dann musst Du auch nix speichern.
Wär auch sinniger, sonst könnte deine Freundin einfach das Programm 24 mal starten...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

C64-Flo

BeitragMi, Nov 29, 2006 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Klasse!

Mit Chr() hab ichs gut hinbekommen ohne viel verändern zu müssen, und
CurrentDate$ ist ja natürlich genial -
kann ich mit dem so ermittelten Datum mit gewöhnlichen Operatoren jonglieren?

so was wie

Code: [AUSKLAPPEN]

if currentdate$< 24 dec 2006 then irgendwas
Question
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.)

BladeRunner

Moderator

BeitragMi, Nov 29, 2006 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst den string den dir die Funktion zurückgibt zerlegen um damit zu arbeiten, was allerdings nicht schwer ist, da das Format ja festgelegt ist: DDMMMYYYY
Du kannst mittels ql:mid und ql:int alle infos rausholen die Du brauchst.
(Prüfe ob "Dec" und "2006" drin sind und dann verzweige anhand des Tages.)
(wobei ich auch alle "kleineren" Daten freischalten würde, damit sie sich vergangene nochmal angucken kann).
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

C64-Flo

BeitragMi, Nov 29, 2006 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Super!

Danke für die schnelle Hilfe, jetzt klappt alles soweit ^^
Very Happy
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group