Wie speichert man dauerhaft Zahlenwerte?

Anfängerfragen zum Programmieren mit PureBasic.
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Wie speichert man dauerhaft Zahlenwerte?

Beitrag von Re42 »

Hallo, wie erreicht man, daß Zahlenwerte für ein Programm gespeichert bleiben, auch wenn man den Computer zwischendurch ausschaltet? Mit IncludeBinary weiß ich nicht, wie das geht. Oder evtl. wie sonst noch. Danke für Info.
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Wie speichert man dauerhaft Zahlenwerte?

Beitrag von jacdelad »

Auf deine Frage gibt es viel Antworten, sie ist etwas unkonkret:

Mit IncludeBinary kannst du eine Datei direkt in dein Programm einbinden. Schreib die Werte in die Datei und binde sie ein.

Du kannst auch Konstanten definieren. Wenn es dir nur um ein paar werte geht, solltest du Konstanten nehmen.

Wenn die Werte innerhalb des Programms durch Berechnung oder Benutzereingabe erstellt, so kannst du sie in einer Datei oder der Registry (nur Windows) speichern.

...wie gesagt, ich finde deine Frage etwas unspezifisch. Wenn du es genauer definierst, können wir dir auch genauer helfen.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Re: Wie speichert man dauerhaft Zahlenwerte?

Beitrag von Re42 »

bitte löschen, wenn man das selber schon nicht länger als 5 oder 10 Minuten machen kann. Beitrag ist überholt. Danke Mod.
Zuletzt geändert von Re42 am 27.11.2023 15:02, insgesamt 2-mal geändert.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Wie speichert man dauerhaft Zahlenwerte?

Beitrag von H.Brill »

Dazu müssen wir wissen, ob die Zahlen schon vor dem Compilieren bekannt sind.
Wenn es erst im Programmlauf sein muß (hier mit aktuellem, heutigen Datum) :

Code: Alles auswählen

; schreiben in Datei
If CreateFile(0, "Text.txt", #PB_Ascii)
    WriteString(0, FormatDate("%dd.%mm.%YYYY", Date()), #PB_Ascii)
  CloseFile(0)
EndIf  
;Lesen von Datei
If ReadFile(0, "Text.txt", #PB_Ascii)
  Debug ReadString(0)
  CloseFile(0)
EndIf 
Bei mehreren Werten halt mit WriteStingN() und Auslesen in einer Schleife (siehe ReadFile() )
Aber da würde ich die Prefernces vorziehen.
Hier etwas kleines :

Code: Alles auswählen

CreatePreferences("Spieler.pref")
  
  ; Erstellt 2 Gruppen mit  Spieler-Namen. Darin wiederum Datum, Bahn-Nr. und Punktestand.
  PreferenceGroup("Willi")
  WritePreferenceString("Datum", FormatDate("%dd.%mm.%YYYY", Date())) 
    WritePreferenceLong ("Bahn", 1)
    WritePreferenceLong ("Punkte", 100)     ; Punkte = 100
  PreferenceGroup("Maria")
  WritePreferenceString("Datum", FormatDate("%dd.%mm.%YYYY", Date())) 
    WritePreferenceLong ("Bahn", 5)
    WritePreferenceLong ("Punkte", 80)     ; Punkte = 80
  ; Schließt die Preference-Datei
    ClosePreferences()
    
    If OpenPreferences("Spieler.pref")
       ExaminePreferenceGroups()
       While NextPreferenceGroup()
         texte$ = texte$ + PreferenceGroupName() + #LF$
         ExaminePreferenceKeys()
         While  NextPreferenceKey()                          
           texte$ = texte$ + PreferenceKeyName() + " = " + PreferenceKeyValue() + #LF$
         Wend
         texte$ = texte$ +  #LF$
       Wend
       Debug texte$
       ClosePreferences()
    EndIf
    
Nur mal so ein kleiner Tip :
Wenn du als PreferenceGroup statt für "Willi" fortlaufende Nummern ("1") , "Maria ("2") vergibst , kannst du sogar eine kleine
Datenbank erstellen. Der Willi und die Maria kommen dann unten hin, genau so, wie das Datum.
Die Anzahl der Datensätze schreibst du in eine ExtraGruppe ("Datensätze"). Wenn ein Datensatz hinzu kommt, erhöhst du
auch einfach die Anzahl. Die kommt auch in die Gruppe Datensätze. Die fortlaufenden Zahlen sind ja eindeutig. Somit hast du
auch immer die Anzahl DS im Blick und kannst durchiterieren. Macht natürlich nur Sinn, wenn du jetzt keine Tausende Datensätze hast.
Für ein paar Hundert ist das auch noch geeignet, bzw. schnell genug. Der Vorteil ist, daß vorhandene Einträge leicht geändert und somit überschrieben werden können.


Hatte ich früher oft mit den .INI - Dateien so gemacht.
Zuletzt geändert von H.Brill am 27.11.2023 15:43, insgesamt 1-mal geändert.
PB 6.10
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Re: Wie speichert man dauerhaft Zahlenwerte?

Beitrag von Re42 »

Danke, aber wenn ich den Code so übernehme, ist die Konstante nicht definiert. Welchen Wert hat die denn? Ich brauche auch nicht das Format von Tag Monat und Jahr, sondern einfach nur die nackte Sekundenzahl die seit dem 1.1.1970 vergangen ist. Die möchte ich gerne speichern können und dann zur weiteren Verarbeitung auch wieder aufrufen können, nachdem ich z.B. meinen Rechner aus- und wieder eingeschaltet habe. Ich habe das bis jetzt nicht angepackt, weil ich genau wusste, welche Probleme das gibt. Warum geht das denn nicht einfach so?

Code: Alles auswählen

date = Date()
date$ = Str(date)
date = CreateFile(0,date$)
CloseFile()

ergebnis = OpenFile(0,date$)
CloseFile(0)
Debug ergebnis
Als Ergebnis kommen dann nur vierstellige Zahlen raus. Bitte um weitere Hilfe.
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: Wie speichert man dauerhaft Zahlenwerte?

Beitrag von NicTheQuick »

Warum es nicht einfach so geht? Weil du einfach nur eine Datei erstellst, die als Dateinamen die Sekunden seit dem 1.1.1970 benutzt. Wie willst du die Datei denn wiederfinden? Das ergibt ja keinen Sinn. Du kennst dich doch mit Dateien aus. Dateien haben in der Regel einen Dateinamen, den man wiederfinden kann. Und in der Datei steht dann der eigentlich Inhalt. Du erstellst die Datei aber nur mit CreateFile und schließt sie direkt wieder, ohne etwas reinzuschreiben.
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Wie speichert man dauerhaft Zahlenwerte?

Beitrag von jacdelad »

Code: Alles auswählen

If CreateFile(0,"D:\MeineDatei.txt")
  Date=Date()
  WriteStringN(0,Str(Date))
  CloseFile(0)
  Debug "Geschriebener Wert: "+Str(Date)+" ("+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss",Date)+")"
  Debug "Aktuelle Zeit: "+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss",Date())
Else
  Debug "Fehler beim Erzeugen der Datei!"
EndIf

Delay(5000);5 Sekunden warten
Date=0;Date zurücksetzen, nur zur Demonstration

If ReadFile(0,"D:\MeineDatei.txt")
  Date=Val(ReadString(0))
  CloseFile(0)
  Debug "Gelesener Wert: "+Str(Date)+" ("+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss",Date)+")"
  Debug "Aktuelle Zeit: "+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss",Date())
Else
  Debug "Fehler beim Öffnen der Datei!"
EndIf
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Re: Wie speichert man dauerhaft Zahlenwerte?

Beitrag von Re42 »

Danke, aber das nutzt mir alles nichts. Ich brauche auf gar keinen Fall Tag, Monat und Jahr und auch nicht WriteStringN und auch keine Schleifen.

Ich möchte einfach nur die Zahl, die Date() liefert, in einer einzigen Sekunde abspeichern und dann diesen Wert auch nach dem Aus- und Wiedereinschalten des Laptops wiederverwenden können. Ich will einfach nur wissen, wie diese Wissenschaft mit Datei-Speichern geht, nur darum geht es mir jetzt. Mit WriteString() hatte ich es versucht und ging auch nicht.

IncludeBinary() habe ich schonmal gemacht und das kriege ich dann hoffentlich selber hin.
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Wie speichert man dauerhaft Zahlenwerte?

Beitrag von jacdelad »

Du musst aber auch mal richtig lesen. IncludeBinary hilft dir hierbei überhaupt nicht. Und mein Beispiel macht exakt das, was du willst. Es Schreibt den Zeitpunkt in eine Datei und liest ihn wieder aus. Tag, Monat, Jahr etc. sind nur zu Demozwecken drin, weil niemand im Kopf den Wert umrechnen kann.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Re: Wie speichert man dauerhaft Zahlenwerte?

Beitrag von Re42 »

Eben habe ich festgestellt, daß hier auf dem Laptop in meiner Zweitwohnung sogar auch PB drauf ist (war nicht so mein Tag heute) und nun konnte ich den Code sehr wohl ausprobieren: SUPER Jacdelad :allright: Später, wenn ich wieder mehr Zeit habe, werde ich meine eigenen Code-Versuche mit deinem funktionierenden vergleichen und dann sehen, was mein Hauptfehler war. DANKE!
Zuletzt geändert von Re42 am 27.11.2023 18:04, insgesamt 2-mal geändert.
Antworten