JSON ou Preference ?

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

JSON ou Preference ?

Message par falsam »

Deux méthodes pour sauvegarder les paramètres d'une application.

La méthode traditionnelle utilisant la bibliothéque Preference.
:arrow: http://www.purebasic.com/french/documen ... FileName.s = GetCurrentDirectory() + "Preferences.prefs"

;Définaition des paramétres
ApplicationName.s = "Test"
Version.s = "1.00"
WindowX = 100
WindowY = 100
WindowW = 800
WindowH = 400

;-Sauvegarde des paramétres
If CreatePreferences(GetTemporaryDirectory()+"Preferences.prefs")
WritePreferenceString("ApplicationName", ApplicationName)
WritePreferenceString("Version", Version)
WritePreferenceLong ("WindowX", WindowX)
WritePreferenceLong ("WindowY", WindowY)
WritePreferenceFloat("WindowW", WindowZ)
WritePreferenceFloat("WindowH", WindowH)
ClosePreferences()
EndIf

;-Lecture de la configuration
If OpenPreferences(GetTemporaryDirectory()+"Preferences.prefs")
ApplicationName.s = ReadPreferenceString("ApplicationName", "")
Version.s = ReadPreferenceString("Version", "")
WindowX = ReadPreferenceLong ("WindowX", 0)
WindowY = ReadPreferenceLong ("WindowY", 0)
WindowW = ReadPreferenceFloat("WindowW", 0)
WindowH = ReadPreferenceFloat("WindowH", 0)
ClosePreferences()
EndIf

;Controle
Debug ApplicationName.s
Debug Version
Debug WindowX
Debug WindowY
Debug WindowW
Debug WindowH[/code]

■ La méthode utilisant la bibliothéque JSON
:arrow: http://www.purebasic.com/french/documen ... ]#JSONFile = 0

FileName.s = GetCurrentDirectory() + "Preferences.prefs"

Structure Param
ApplicationName.s
Version.s
WindowX.i
WindowY.i
WindowW.i
WindowH.i
EndStructure
Setup.Param

;Définaition des paramétres
With Setup
\ApplicationName.s = "Test"
\Version.s = "1.00"
\WindowX = 100
\WindowY = 100
\WindowW = 800
\WindowH = 400
EndWith

;-Sauvegarde des paramétres
CreateJSON(#JSONFile)
InsertJSONStructure(JSONValue(#JSONFile), @Setup, Param)
SaveJSON(#JSONFile, FileName, #PB_JSON_PrettyPrint)

;-Lecture de la configuration
LoadJSON(#JSONFile, FileName, #PB_JSON_NoCase)
ExtractJSONStructure(JSONValue(#JSONFile), @Setup, Param)

;Controle
With Setup
Debug \ApplicationName.s
Debug \Version
Debug \WindowX
Debug \WindowY
Debug \WindowW
Debug \WindowH
EndWith
[/code]
Enregistrer ces deux codes dans un dossier.

J'ai une préférence pour la méthode JSON que je trouve plus sexy.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: JSON ou Preference ?

Message par Ar-S »

C'est vrai que plus les données à sauvées seront consequentes, plus le Json sera intéressant (niveau place).
Par contre je trouve que le débutant aura plus d'affinités avec la lib preferences().
Je trouve

Code : Tout sélectionner

InsertJSONStructure(JSONValue(#JSONFile), @Setup, Param)
assez austère pour le néophyte. Surtout qu'il faut qu'il ait des notions de structures et pointeurs.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Re: JSON ou Preference ?

Message par Fred »

La méthode JSON (ou XML, car il existe la meme fonction pour le XML) a l'avantage de ne plus avoir à se soucier du code de sauvegarde si on ajoute des champs dans la structure (avec les prefs il faut manuellement ajouter le Read/WritePreference() correspondant aux nouveaux champs). De plus si la structure contient des objets complexes (list, tableaux, maps) ils seront recursivement sauvegardés. Les prefs ont l'avantage d’être un format facile à éditer à la main et "connu" (c'est des .ini).
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: JSON ou Preference ?

Message par falsam »

Ar-S a écrit :Par contre je trouve que le débutant aura plus d'affinités avec la lib preferences().
Pour le débutant
:arrow: http://www.purebasic.fr/french/viewtopi ... 21&t=14511
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: JSON ou Preference ?

Message par blendman »

Merci, c'est super intéressant !

Je ne connaissais pas ce format Json, mais on peut même s'en servir en tant que format de fichier (par exemple si on crée une application pour sauvegarder notre document!)
La méthode Json est vraiment intéressante car on ne doit pas tout noter à la main lors de la sauvegarde.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: JSON ou Preference ?

Message par falsam »

blendman a écrit :La méthode Json est vraiment intéressante car on ne doit pas tout noter à la main lors de la sauvegarde.
Exactement

Tu peux sauvegarder des tableaux, des maps ou liste chaînées complexes comme un contexte de jeu par exemple. Tu peux changer ensuite la structure sans que ça soit destructeur de données.

Tu peux aussi te servir de JSON pour une liste de contacts par exemple.
Une fois que tu as enregistré plusieurs noms, ajoute un champ supplémentaire : Par exemple son adresse.

Relance le code et tu verras que tu n'as pas perdu tes contacts précédents.

:arrow: http://www.purebasic.fr/french/viewtopi ... =6&t=15202
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre