Laden einer Variable bringt fehler

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Laden einer Variable bringt fehler

Beitrag von NeoRon »

Hallo,

habe ein problem mit 2 Variablen.
Im laufenden Programm ohne Speichern und laden funktioniert es einbahnfrei. Nach ner bestätigung soll er 2 Variable den Wert 1 zuweisen.
sobald ich aber speicher und dann lade zeigt er mir im debug fenster bei einer plötzlich 0 und bei der anderen 2.
Warum ändert er mir die Werte ab.
Das Programm läuft dann mit den Falchen Werten Fehlerhaft.

Hier mal der Speicher und Lade Code mit denen 2 Variablen:

LADEN:

Code: Alles auswählen

Case #KNOPF_Laden
 #DATEI_REPORT = 1
   .......
     tech1.l
     tech2.l
    ........
If ReadFile(#DATEI_REPORT, "name.txt")
  While Eof(#DATEI_REPORT) = #False
  .......
      tech1 = ReadLong(#DATEI_REPORT)
    tech2 = ReadLong(#DATEI_REPORT)
  ....... 
  Wend
  CloseFile(#DATEI_REPORT)
    MessageRequester("Laden", "geladen") 
spielhauptmenu()
  EndIf
Hier Speichert er:

Code: Alles auswählen

       Case #knopf_Speichern    
    #Datei_Name = 1
    #Datei_Name2 = 1
    #Datei_Name3 = 1
    #Datei_Name4 = 1
    #Datei_Name5 = 1
    #Datei_Name6 = 1
    #Datei_Name7 = 1
    #Datei_Name8 = 1
    #Datei_Name9 = 1
    #Datei_Name10 = 1
    #Datei_Name11 = 1
    #Datei_Name12 = 1
    #Datei_Name13 = 1
    #Datei_Name14 = 1
    #Datei_Name15 = 1
    #Datei_Name16 = 1
    #Datei_Name17 = 1
    #Datei_Name18 = 1
    #Datei_Name19 = 1
    #Datei_Name20 = 1
    #Datei_Name21 = 1
    #Datei_Name22 = 1
    #Datei_Name23 = 1
    #Datei_Name24 = 1
    #Datei_Name25 = 1
    #Datei_Name26 = 1
 
    ..............
    
    tech2.l
    tech1.l
..........
    
If CreateFile(#Datei_Name, "name.txt")
  
  WriteLong(#Datei_Name22, tech2.l)
  WriteLong(#Datei_Name23, tech1.l)
  CloseFile(#Datei_Name)
     MessageRequester("Speichern", "gespeichert") 
  EndIf
Komme einfach net drauf warum er mir die abändert. -_-

Schauts euch mal an.
Danke !

Gruß NeoRon
The World is Cyber
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Laden einer Variable bringt fehler

Beitrag von ts-soft »

Mit dem unvollständigem Code kann man leider nichts anfangen.

Code: Alles auswählen

Define tech2.l, tech1.l

If CreateFile(0, GetTemporaryDirectory() + "name.txt")
  WriteLong(0, 1)
  WriteLong(0, 2)
  CloseFile(0)
EndIf

If ReadFile(0, GetTemporaryDirectory() + "name.txt")
  tech1 = ReadLong(0)
  tech2 = ReadLong(0)
  CloseFile(0)
EndIf

Debug tech1
Debug tech2
So funktioniert es, aber warum Du keine Preferences dafür nutzt ist mir jetzt auch nicht klar.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Laden einer Variable bringt fehler

Beitrag von NicTheQuick »

Also diese ewige Konstantenliste kommt mir auch schon sehr kompliziert gedacht vor...

Code: Alles auswählen

    #Datei_Name = 1
    #Datei_Name2 = 1
    #Datei_Name3 = 1
    #Datei_Name4 = 1
    #Datei_Name5 = 1
    #Datei_Name6 = 1
    #Datei_Name7 = 1
    #Datei_Name8 = 1
    #Datei_Name9 = 1
    #Datei_Name10 = 1
    #Datei_Name11 = 1
    #Datei_Name12 = 1
    #Datei_Name13 = 1
    #Datei_Name14 = 1
    #Datei_Name15 = 1
    #Datei_Name16 = 1
    #Datei_Name17 = 1
    #Datei_Name18 = 1
    #Datei_Name19 = 1
    #Datei_Name20 = 1
    #Datei_Name21 = 1
    #Datei_Name22 = 1
    #Datei_Name23 = 1
    #Datei_Name24 = 1
    #Datei_Name25 = 1
    #Datei_Name26 = 1
Ich wette das kannst du wesentlich eleganter machen.
maupa
Beiträge: 105
Registriert: 12.12.2004 12:17

Re: Laden einer Variable bringt fehler

Beitrag von maupa »

Hi,
wirklich ohne den Rest zu sehen ist es schwer zu verstehen wo dein Fehler ist.

Bei Speichern hast du den beiden Variablen nichts drin

tech2.l <- hat kein wert zugewiesen
tech1.l < hat kein wert zugewiesen

hier werden aber 2* 4 Bits gespeichert
ASCI = "00000000"

Das Speichen und laden funktioniert 1A in deinen Beispiel, daher musst du überprüffen von dem Spieichern, ob in der Variablen das richtige drin ist
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Laden einer Variable bringt fehler

Beitrag von NeoRon »

Hi,

die Variablen sind Globalisiert und beim laden weist er denen die gespeicherten werte zu.

Ich habe es überprüft über den debugger.

Die Variablen sollen den Wert 0 am anfang haben.
Erst im laufenden programm soll der wert dann ab nem bestimmten Ereignis den Wert 1 zugewiesen bekommen.
Vor dem Speichern zeigt er mir die richtigen Werte an die gespeichert werden sollen und zwar bei beiden Variablen mit dem Wert 1.

Wenn ich dann Lade dann zeigt er ir bei einer Variablen 0 und bei der anderen 2 im debugger an und das programm läuft dann fehlerhaft.
The World is Cyber
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Laden einer Variable bringt fehler

Beitrag von NicTheQuick »

Also was mir oben bei deinem Code auffällt ist das hier:

Code: Alles auswählen

If CreateFile(#Datei_Name, "name.txt")
 
  WriteLong(#Datei_Name22, tech2.l)
  WriteLong(#Datei_Name23, tech1.l)
  CloseFile(#Datei_Name)
     MessageRequester("Speichern", "gespeichert")
  EndIf
Du machst 'CreateFile' mit '#Datei_Name', aber dann 'WriteLong' mit '#DateiName_22' und '#DateiName_23'. Auch wenn scheinbar alle diese Konstanten immer 1 sind, macht das alles keinen Sinn. Wieso sind diese ganzen '#Datei_NameXXX' alle 1? Oder sollen das Zukünftig auch mal andere Werte werden?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Laden einer Variable bringt fehler

Beitrag von ts-soft »

Ohne ausführbaren Code, der das Problem nachvollziehbar macht, ist hier alles sinnlos.

Man kann also nur raten, was zwar auch zum Ziel führen könnte, aber nicht sinn der Sache ist.

Aber ein paar mögliche Fehlerquellen kann ich ja noch aufzählen, die hier aber nicht überprüfbar sind:
Die Daten werden in einem Pfad gespeichert, wo die Rechte fehlen, der also von Windows deshalb
virtualisiert wird. Beim wieder einlesen fehlen diese Rechte nicht, es wird also die falsche Datei gelesen.

Es wurde die einzulesende Datei nach dem Schreiben nicht geschlossen.

Der Pfad zur Datei stimmt nicht, da hier auch nicht ersichtlich ist, wer das aktuelle Verzeichnis festgelegt hat

usw., usw.

Es ist grundsätzlich erforderlich, einen auf ein minimum reduzierten Code zu Posten, der das Problem nachvollziehbar
macht. Es macht keinen Sinn, wenn ich oder jemand anders, aus dem von Dir gepostetem Skelett einen ausführbaren
Code bastelt, weil dieser wird aller Wahrscheinlichkeit nach, Deinen gemachten Fehler nicht enthalten und funktionieren.

Wir warten also auf den Code, bzw. vielleicht trifft ja zufällig eine meiner Vermutungen zu.

Eigentlich hatte ich mir ja vorgenommen, auf so unvollständige, nicht beantwortbare Fragen, nicht mehr zu reagieren,
weil irgendwo ist das doch ziemlich ...

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Laden einer Variable bringt fehler

Beitrag von NeoRon »

Ja,
die Variablen sollen sich dann wieder verändern.

Komischerweise bei allen anderen Variablen stimmen die Werte.
The World is Cyber
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Laden einer Variable bringt fehler

Beitrag von NicTheQuick »

NeoRon hat geschrieben:Ja,
die Variablen sollen sich dann wieder verändern.

Komischerweise bei allen anderen Variablen stimmen die Werte.
Zu welcher Frage gehört diese Antwort jetzt? Zu meiner passt es nicht, da ich von Konstanten geredet habe. Ansonsten bin ich hier jetzt auch raus, wenn man von dir nichts zum Testen kriegt.
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Laden einer Variable bringt fehler

Beitrag von NeoRon »

Habs hinbekommen.

Lag an dem Komplizierten Speicher und Lade Code.

Man muss die Konstanten beim Laden genau in der gleichen Reihenfolge setzen wie die beim Speichern.

Ist halt nicht so elegant gelöst :)

Danke bin halt noch nen blutiger anfänger xDD

Grüße Neo Ron
The World is Cyber
Antworten