Hallo,
ich möchte ein Programm schreiben, welches ich bisher in AutoHotkey
entwickelt habe. Dort verwende ich eine .ini Datei zur Speicherung
der Optionen.
PB bietet ja eine JSON Implementierung an und von daher würde
ich das Format wohl wechseln.
Ich habe in den verschiedenen Funktionen in AHK Zugriff auf ein
globales (mehrdimensionales) array, das ich mit den Daten aus
der .ini Datei füttere.
Was ist denn der beste Weg in PB, um Konfigurationsoptionen
global in Prozeduren zur Verfügung zu stellen, wenn ich sie
aus einer JSON Datei ausgelesen habe? Einige Prozeduren
werden natürlich auch wiederum Änderungen an der
Konfiguration vornehmen...
JSON + globale Konfigurationsoptionen?
Re: JSON + globale Konfigurationsoptionen?
Am einfachsten ist es, wenn du eine Structure anlegst, wo du alles ablegst und es dann in eine globale Variable packst.
edit: Du kannst auch mit ComposeJSON() und ParseJSON() arbeiten, wenn du ohne buffer es machen willst.
Code: Alles auswählen
Structure config
option1.i
option2.i
name.s
Array values.i(10,10)
EndStructure
Global config.config
config\option1=2
config\option2=3
config\name="Hallo"
For i=0 To 9
For a=0 To 9
config\values(i,a)=i*100+a
Next
Next
js=CreateJSON(#PB_Any)
InsertJSONStructure( JSONValue(js), @config, config)
size=ExportJSONSize(js)
*buffer=AllocateMemory(size+1);zero-string
If ExportJSON(js,*buffer,size)=0
Debug "Error"
End
EndIf
Debug PeekS(*buffer,-1,#PB_UTF8)
FreeJSON(js)
;- load config from *buffer, size
newconfig.config
jsout=CatchJSON(#PB_Any,*buffer,size)
ExtractJSONStructure(JSONValue(jsout), @newconfig, config)
Debug newconfig\name
Debug newconfig\option1
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Re: JSON + globale Konfigurationsoptionen?
Vielen lieben Dank, GPI!
- TroaX
- Beiträge: 661
- Registriert: 08.03.2013 14:27
- Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
- Wohnort: NRW
- Kontaktdaten:
Re: JSON + globale Konfigurationsoptionen?
Oder du benutzt einfach die Ini-Datei mit der Preference-Bibliothek. Denn so lange du auf Eigenschaften von JSON nicht angewiesen bist, kannste auch die Ini nehmen.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Re: JSON + globale Konfigurationsoptionen?
Relativ, Felder lassen sich nicht wirklich gut abdecken. Und es kann auch umfangreicher sein.TroaX hat geschrieben:Oder du benutzt einfach die Ini-Datei mit der Preference-Bibliothek. Denn so lange du auf Eigenschaften von JSON nicht angewiesen bist, kannste auch die Ini nehmen.
siehe hier:
Code: Alles auswählen
Structure config
option1.i
option2.i
name.s
Array values.i(10,10)
EndStructure
Global config.config
Procedure SaveConfig(*config.config,file.s,flag=#PB_JSON_PrettyPrint)
Protected js,ret
js=CreateJSON(#PB_Any)
If js
InsertJSONStructure( JSONValue(js), *config, config)
ret=SaveJSON(js,file,flag)
FreeJSON(js)
EndIf
ProcedureReturn ret
EndProcedure
Procedure LoadConfig(*config.config,file.s)
Protected js,ret
js=LoadJSON(#PB_Any,file)
If js
ExtractJSONStructure(JSONValue(js), *config, config)
ret=#True
FreeJSON(js)
EndIf
ProcedureReturn ret
EndProcedure
config\option1=2
config\option2=3
config\name="Hallo"
For i=0 To 10
For a=0 To 10
config\values(i,a)=i*100+a
Next
Next
SaveConfig(config,"config.json")
newconfig.config
LoadConfig(newconfig,"config.json")
Debug newconfig\name
Debug newconfig\option1
Bei bei der Preference-Bibliothek musst du unter speichern und laden nahezu den gleichen Quellcode angeben. Ist auch fehleranfälliger, wenn du dich da verschreibst. Das kann hier nicht passieren, die Structur verhindert schreibfehler. Auch kann man so sehr schnell feststellen, was alles gespeichert wird. Simpel alles in der Config-Structure.
Edit: Den einzigen wirklich großen Nachteil seh ich aktuell, das ExtractJSONStructure die Structure immer löscht.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Re: JSON + globale Konfigurationsoptionen?
Ich hab mal hier http://www.purebasic.fr/german/viewtopi ... =8&t=30299 ein Include gepostet, die komfortable JSON-Config ermöglicht - mit Defaultwerten.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Re: JSON + globale Konfigurationsoptionen?
Vielen Dank für all eure Antworten hier!