Variablen reseten

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Purebasium
Beiträge: 74
Registriert: 05.02.2014 22:08
Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte
Wohnort: Mars, Kraterstr. 57b, Apartment 7

Variablen reseten

Beitrag von Purebasium »

Gibt es eine Möglichkeit, mitten im Programm alle bisher definierten Variablen zu reseten, ohne das man alle einzeln auf null stellt?
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Variablen reseten

Beitrag von RSBasic »

Du kannst deine einmalige Variablenliste in einer Include einfügen. Diese Include-Datei rufst du erneut auf, wenn du sie resetten möchtest.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Purebasium
Beiträge: 74
Registriert: 05.02.2014 22:08
Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte
Wohnort: Mars, Kraterstr. 57b, Apartment 7

Re: Variablen reseten

Beitrag von Purebasium »

es gibt ja unter Werkzeuge->variablenliste eine liste aller variablen.
Kann man die irgendwie speichern/kopieren?
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Variablen reseten

Beitrag von RSBasic »

Nein direkt nicht. Du kannst natürlich ein Werkzeug erstellen und automatisiert vor dem Kompilieren die Variablen ermitteln und resetten, aber das ist viel zu aufwändig.
Die einfachste Möglichkeit ist eine separate Include-Datei für deine Variablen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Purebasium
Beiträge: 74
Registriert: 05.02.2014 22:08
Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte
Wohnort: Mars, Kraterstr. 57b, Apartment 7

Re: Variablen reseten

Beitrag von Purebasium »

ok
(Bin schon beim abschreiben der variablen :cry: )
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Variablen reseten

Beitrag von RSBasic »

Wenn du EnableExplicit verwendest und oben eine Variablenliste besitzt, dann musst du nichts abschreiben, sondern nur auslagern.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
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: Variablen reseten

Beitrag von NicTheQuick »

Eine zweite Möglichkeit wäre eine Macro. Einfach in dem Makro alle Variablen mit Initialwert auflisten und dann an beliebigen Stellen aufrufen. Das braucht nicht unbedingt dann eine extra Include.
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Variablen reseten

Beitrag von _sivizius »

Code: Alles auswählen

;1. Eine Struktur mit allen Variablen
Structure vTable
  EinInteger.i
  EinByte.b
  EinString.s
  ;...
EndStructure
;2a. Wir können alle Variablen im Programm speichern
DataSection
  variablen:
  Data.i 1337
  Data.b 23
  Data.i @"Hallo Welt!"
EndDataSection
*versionA.vTable = ?variablen
;2b oder Allozieren und zuweisen. Verschwendet unnötig Speicher!
*versionB.vTable = AllocateMemory(SizeOf(vTable))
*versionB\EinInteger = 0815
*versionB\EinByte = 42
*versionB\EinString = "Stringtheorie!"
;3. beide Versionen lassen sich aber gleich setzen
*versionA\EinInteger = 1234567
*versionB\EinString = "PureBasic!"
;4. und aufrufen
Debug *versionA\EinString
Debug *versionB\EinByte
;5. alle Werte auf einen bestimmten Wert setzen geht auch:
FillMemory(*versionA, SizeOf(vTable), 23)
Debug *versionA\EinByte ; Vorsicht mit Strings!!!
FillMemory(*versionB, SizeOf(vTable), 42)
Debug *versionB\EinByte ; Das geht sonst schief!
;6. und auch problemlos Speichern.
file = OpenFile(-1, GetCurrentDirectory()+"vTable.dat")
If IsFile(file)
  WriteData(file, *versionA, SizeOf(vTable))
  CloseFile(file)
EndIf
;7. und auch problemlos wieder Laden.
file = OpenFile(-1, GetCurrentDirectory()+"vTable.dat")
If IsFile(file)
  ReadData(file, *versionB, SizeOf(vTable))
  CloseFile(file)
EndIf
;8. man kann auch eine Variablen-Liste verdoppeln
*versionC.vTable = 0
CopyMemory(*versionA, *versionC, SizeOf(vTable))
;9. und sogar vergleichen!
Debug CompareMemory(*versionA, *versionC, SizeOf(vTable))
;gleiche Strings, aber mit unterschiedlicher Adresse sind verschieden :/
;man kann aber Variable für Variable vergleichen!
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: Variablen reseten

Beitrag von ts-soft »

@_sivizius

Code: Alles auswählen

GetCurrentDirectory() <> GetPathPart(ProgramFilename())
CurrentDirectory, ist das Directory, welches vom starter des Processes übergeben wurde, also nicht unbedingt das Verzeichnis der Exe!
Bei Aufruf per Shell wird im allg. kein "Ausführungsverzeichnis (CurrentDir)" übergeben, so das dies meist auf den Systemordner verweist.

GetCurrentDirectory() ist nur sinnvoll, wenn man den Ordner selber per SetCurrentDirectory() gesetzt hat.
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
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Variablen reseten

Beitrag von _sivizius »

oder man es eben in der IDE ausführt und vorher irgendwo gespeichert hat.
In der shell ist auch das Debug nicht mehr so sinnvoll :P.
Aber das ist hier nicht der Punkt.
Antworten