Variable zahl wird nicht in datei gespeichert

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Raiden93

Betreff: Variable zahl wird nicht in datei gespeichert

BeitragDo, Apr 01, 2010 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ich habe das Problem das wenn ich Pfeiltaste nach Oben Drücke und meine Variable um 1 erhöht wird und dann das Programm schliese und neu starte das es nicht gespeichert wird.
Code: [AUSKLAPPEN]

Graphics 800,600,32,0
SetBuffer BackBuffer()

Global tester= 123

Repeat
fileout = WriteFile ("mydata.dat")

WriteByte fileout,tester
WriteFloat fileout,123.456
WriteInt fileout,12345678
WriteLine fileout,"Hallo"
WriteShort fileout,12345
WriteString fileout,"Super"

CloseFile fileout


filein = ReadFile ("mydata.dat")

wert1 = ReadByte (filein)
wert2# = ReadFloat (filein)
wert3 = ReadInt (filein)
wert4$ = ReadLine$ (filein)
wert5 = ReadShort (filein)
wert6$ = ReadString$ (filein)

CloseFile filein

Text 400,300, "Byte: " +wert1
Text 400,325, "Float: " +wert2
Text 400,350, "Int: " +wert3
Text 400,375, "Line: " +wert4
Text 400,400, "Short: " +wert5
Text 400,425, "String: " +wert6

If KeyHit (200) Then
  tester = tester +1
End If

Flip
Cls
Until KeyHit(1)
End

TimBo

BeitragDo, Apr 01, 2010 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
au backe , du lädst öffnest und schließt die Datei in jedem Frame erneut. Das ist nicht gut, da dadurch dein Programm arsch langsam wird.

Und deine Variable test musst du noch in die Datei schreiben, du erhöst sie nur , sagst aber nirgends, dass du sie speichern möchtest.
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Raiden93

BeitragDo, Apr 01, 2010 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ja ich verstehe das einfach nicht mit der datei ^^ sitze schon viele tage an diese Funktion aber verstehe es nicht wirklich ...

Raiden93

BeitragDo, Apr 01, 2010 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
wie speichere ich denn am Besten Variablen?

TimBo

BeitragDo, Apr 01, 2010 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
also am Anfang (vor der Mainschleife) öffnest du eine Datei mit OpenFile

Mit OpenFile bekommst du ein Handle zurück.

Dann nimmste die Read bzw Write Anweisungen um was zu schreiben oder auszulesen.

Mit SeekFile springst du in der Datei rum.
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Thunder

BeitragDo, Apr 01, 2010 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Problem ist, dass du willst, dass die Werte auch nach einem Neustart da sind. Allerdings hast du vergessen, dass du am Anfang der Schleife alle Werte speicherst. D.h. Wenn du das Programm neustartest werden wieder alle Standardwerte in die Datei gespeichert.

An deiner Stelle würde ich mir ein Tutorial durchlesen und es später neu versuchen und nicht auf diesem Programm herumhacken.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Pummelie

BeitragDo, Apr 01, 2010 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit den schreiben/lesen von daten ist am Anfang kein leichtes thema, schau dir das Programm hier genau an, es entspricht deinem.
Sollte ich tippfehler haben tut mir das leid, schreibe nicht so gern im browser.
BlitzBasic: [AUSKLAPPEN]

Graphics 800,600,32,0
SetBuffer BackBuffer()

If FileType("mydata.dat") = 0 Then
fileout = WriteFile ("mydata.dat")
WriteByte fileout,123
WriteFloat fileout,123.456
WriteInt fileout,12345678
WriteLine fileout,"Hallo"
WriteShort fileout,12345
WriteString fileout,"Super"
CloseFile(fileout)
Else
file=ReadFile("mydata.dat")
tester=ReadByte(file)
wert1 = ReadByte (file)
wert2# = ReadFloat (file)
wert3 = ReadInt (file)
wert4$ = ReadLine$ (file)
wert5 = ReadShort (file)
wert6$ = ReadString$ (file)
CloseFile(file)
EndIf

Repeat
If KeyHit (200) Then
tester = tester +1
filein=OpenFile("mydata.dat")
WriteByte filein,tester
wert2# = ReadFloat (filein)
wert3 = ReadInt (filein)
wert4$ = ReadLine$ (filein)
wert5 = ReadShort (filein)
wert6$ = ReadString$ (filein)
CloseFile(filein)
Cls
Text 400,300, "Byte: " +wert1
Text 400,325, "Float: " +wert2
Text 400,350, "Int: " +wert3
Text 400,375, "Line: " +wert4
Text 400,400, "Short: " +wert5
Text 400,425, "String: " +wert6
Text(400,475,"Maustaste drücken zum weitermachen!"
Flip
MouseWait()
FlushMouse()
End If
Until KeyHit(1)
End
It's done when it's done.
  • Zuletzt bearbeitet von Pummelie am Do, Apr 01, 2010 19:15, insgesamt einmal bearbeitet

Raiden93

BeitragDo, Apr 01, 2010 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok das Hilft mir schonmal gut weiter nur weiß ich nicht wie der Code so aussieht um mir vor zu stellen wie es geht währe nett wenn du mir ein Beispiel Posten könntest sagen wir mal meine Variable heißt.
Code: [AUSKLAPPEN]

Global Level = 1


und ich möchte das die Variable gespeichert wird und beim öffnen des Programmes wieder geöffnet wird.

Danke im vor raus.

Thunder

BeitragDo, Apr 01, 2010 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann solltest du die Routine zum Speichern ans Ende der Datei setzen.


BlitzBasic: [AUSKLAPPEN]
Const filename$="test.txt"
Local datei%
Global Level=1

If FileType(filename)=1 Then
datei=ReadFile(filename)
Print ReadInt(datei)
CloseFile datei
EndIf
datei=WriteFile(filename)
WriteInt datei,Level
CloseFile datei
End
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
  • Zuletzt bearbeitet von Thunder am Do, Apr 01, 2010 19:16, insgesamt einmal bearbeitet

Pummelie

BeitragDo, Apr 01, 2010 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
so hier mal ein einfaches beispiel:

BlitzBasic: [AUSKLAPPEN]
If FileType("mydata.dat") = 0 Then ;wenn die datei nicht existiert, schreibe eine mit den standart werten
file=WriteFile("mydata.dat") ;datei schrieben (nur schreiben, gleiche daten werden gelöscht)
WriteLine(file,"1") ;den Wert 1 abspeichern, mit writeline (writeline find ich immernoch am besten)
CloseFile(file) ;datei abschließen (Wichtig: ab hier werden von Windows erst die daten in die datei geschrieben)
wert=1 ;die variable wert manuel einen wert geben, da hier nur geschrieben und nicht gelesen wurde
Else ;wenn die datei bereit existiert
file=ReadFile("mydata.dat") ;datei lesen (nur lesen, damit kann man keine write befehle ausführen)
wert=ReadLine(file) ;den wert auslesen (wichtig: wir wissen, das der wert eine zahl ist, ist das nicht bewusst muss man Readline$(file) nutzen)
CloseFile(file) ;datei wieder schließen (Wichtig: muss man einfach machen, wenn man es nicht macht ist es so, als ob man sich nicht die hände wäscht, irrgendwann kommt es auf einen zurück)
EndIf

Graphics(640,480,16,2) ;grafik zeichnen
SetBuffer(BackBuffer())

Text(0,0,wert) ;den ausgelesen wert malen
Flip ;bild aktualisieren
WaitKey ;warten, bis eine taste gedrückt wird
End ;beenden
It's done when it's done.
  • Zuletzt bearbeitet von Pummelie am Do, Apr 01, 2010 19:27, insgesamt einmal bearbeitet

Raiden93

BeitragDo, Apr 01, 2010 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich danke dir mit deinem Post.So habe ein versuch gemacht aber bei betätigen der Pfeil Oben taste wird meine variable im Programm nicht erhöht.

hmm..
Code: [AUSKLAPPEN]

Graphics 800,600,32,0
SetBuffer BackBuffer()

Const filename$="test.txt"
Local datei%
Global Level=1


Repeat
Cls
If FileType(filename)=1 Then
   datei=ReadFile(filename)
   Text 400,300, ReadInt(datei)
   CloseFile datei
EndIf
datei=WriteFile(filename)
WriteInt datei,Level
CloseFile datei

If KeyHit (200)
  Level = Level +1
End If
 
Until KeyHit(1)
End


EDIT: Sry habe den code vergessen^^

TimBo

BeitragDo, Apr 01, 2010 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
soo

ich gebe dir aber den Tipp, dass du dich mit dem Code auseinandersetzen solltest, bevor du ihn komplett übernimmst.

BlitzBasic: [AUSKLAPPEN]
;Verbessert

Graphics 1024,768,32,2
SetBuffer BackBuffer()
Local timer=CreateTimer(60)


Local SpeicherDatei = OpenFile("name.ini")
Global Level%=LadeVar(SpeicherDatei, 0)


Repeat
Text 0,0,Level

If KeyHit(200)
Level=Level+1
SpeicherVar(SpeicherDatei, 0, Level)
EndIf

WaitTimer(timer)
Flip(0):Cls
Until KeyHit(1)

Function SpeicherVar(File, Position, Wert)
SeekFile File,Position
WriteInt File,Wert
End Function

Function LadeVar(File, Position)
SeekFile File,Position
Return ReadInt(File)
End Function
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
  • Zuletzt bearbeitet von TimBo am Do, Apr 01, 2010 20:00, insgesamt einmal bearbeitet

Raiden93

BeitragDo, Apr 01, 2010 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir kommt der Fehler Memory access violation

EDIT:

OK habe es jetzt musste die datei selber erstellen
  • Zuletzt bearbeitet von Raiden93 am Do, Apr 01, 2010 19:54, insgesamt einmal bearbeitet

Thunder

BeitragDo, Apr 01, 2010 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
OpenFile
Auszug aus der BB-Hilfe hat Folgendes geschrieben:
Achtung! Falls diese Ausgabedatei noch nicht existiert, dann kommt es bei einem Schreib-/Leseversuch zu einem Fehler. OpenFile ist darum besonders für Änderungen gut geeignet. Neue Dateien können sofort mit WriteFile geschrieben werden.


Mein Tipp sind Tutorials. Du hast selber gesagt, du verstehst es nicht. Wenn du dann im Tutorial was nicht verstehst, kannst du ja fragen, aber es gibt durchaus gute.


mfg Thunder

TimBo

BeitragDo, Apr 01, 2010 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
hast du die Datei name.ini angelegt ?
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Raiden93

BeitragDo, Apr 01, 2010 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
der Code von Timbo ist gut und funktioniert einwandfrei nur habe ich nun noch ein par fragen zum Code:

Was bedeutet die 0 in diesem code und warum kann ich mit einem ":" das Cls nutzen?
Code: [AUSKLAPPEN]

Graphics 1024,768,32,2
SetBuffer BackBuffer()
Local timer=CreateTimer(60)


Local SpeicherDatei = OpenFile("name.ini")
Global Level%=LadeVar(SpeicherDatei, 0)


Repeat
   Text 10,10,Level
   
   If KeyHit(200)
      Level=Level+1
      SpeicherVar(SpeicherDatei, 0, Level)
   EndIf
   
   WaitTimer(timer)
   Flip(0):Cls
Until KeyHit(1)

Function SpeicherVar(File, Position, Wert)
   SeekFile File,0
   WriteInt File,Wert
End Function

Function LadeVar(File, Position)
   SeekFile File,0
   Return ReadInt(File)
End Function

TimBo

BeitragDo, Apr 01, 2010 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
entschuldigung, habe einen Fehler gemacht , der neue Code ist oben reineditiert.
Code: [AUSKLAPPEN]
SeekFile File,0

wurde durch
Code: [AUSKLAPPEN]
SeekFile File,Position

ersetzt

: ist eine Alternative zum Zeilenumbruch
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
  • Zuletzt bearbeitet von TimBo am Do, Apr 01, 2010 20:01, insgesamt einmal bearbeitet

Thunder

BeitragDo, Apr 01, 2010 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Die 0 wird von seinen Funktionen verwendet um an die jeweilige Position zu springen. In dem Fall also 0 (=Anfang der Datei).

Der ":" ist in BB ein Ersatz für den Zeilenumbruch. D.h. Du könntest statt dem Doppelpunkt einfach einen Zeilenumbruch hineinschreiben - Das hat denselben Affekt.


mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Nicdel

BeitragDo, Apr 01, 2010 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Das sagt viel. Schalt den Debugger ein und gib die genaue Zeile und den richtigen Fehlernamen.

Edit: Wieso kommt das erst so spät an Shocked
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

Raiden93

BeitragDo, Apr 01, 2010 23:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ist es möglich die ini so zu machen das ich Lesen kann was in der Ini steht damit ich verstehe wie es in der ini aussieht?

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group