La fonction Basic “ProfileString” permet d’écrire la configuration d’un programme dans la base de registre de Windows, ce qui permet de mémoriser à la fermeture d’un programme ses variables d’utilisation, pour les reprendre “par défaut” à la prochaine ouverture.
- Ici nous ne faisons pas appel à la Base de Registre mais à un fichier INI plus souple et dont chaque ligne comporte un renseignent sous la forme d’un binôme VARIABLE,VALEUR correspondant au code “KEY=VALUE” et qui rappelle le ValueListEditor de Delphi.
En B4A la liste des binôme Key,Value s’appelle MAP
MAP KEY1=VALUE1 KEY2=VALUE2 KEY3=VALUE3 etc.
- Une valeur s’enregistre avec la fonction PUT
Map1.Put(Key,VAlue)
- Et il suffit d’appeler la Clef avec la fonction GET pour avoir sa Valeur
Value = Map1.Get(Key)
- Si la Clef est manquante Get retourne la Valeur “NULL”, ce qui est fâcheux. Il vaut donc mieux tester si la clef existe avant d’interroger la liste
If Map1.ContainsKey(Key) Then Value = Map1.Get(Key) Else Value = Default
Ecriture de la fonction SaveSTR qui enregistre une donnée dans le fichier INI
SYNTAXE
- SaveSTR (Key, Value, IniFileName)
EXEMPLE
SaveSTR("HAUTEUR" , EditText1.Text, "CONFIG.INI")
CODE
Sub SaveSTR (Key As String, Value As String, IniFile As String) 'Sauvegarde la valeur d'une clef dans le fichier de configuration Private Map1 As Map Map1.Initialize Map1.Put(Key, Value) File.WriteMap(File.DirInternal, IniFile, Map1) Map1.clear End Sub
- Ou inifile est une chaine qui correspond au nom du fichier INI
Ecriture de la fonction GetSTR qui lit une donnée dans le fichier INI à partir de sa clef
SYNTAXE :
- Valeur = GetSTR(Key, IniFileName, Valeur_défaut)
EXEMPLE :
- EditText.Text = GetSTR(“HAUTEUR”, “CONFIG.INI”, “40”)
CODE :
Sub GetSTR (Key As String, IniFile As String, Default As String) As String Private Map1 As Map ' ValueList : Key->Value Private Value As String Map1.Initialize 'Creation de l'objet ' TESTE si le fichier existe : sinon Erreur I/O If File.Exists(File.DirInternal, IniFile) Then ' CHARGE le contenu du fichier sous la forme Key=Value Map1 = File.ReadMap(File.DirInternal, IniFile) ' Lit la valeur correspondant à la clef If Map1.ContainsKey(Key) Then Value = Map1.Get(Key) Else Value = Default ' Log ("GestSTR 1 = " & Value) End If Map1.clear ' Restitue les ressources 'Log ("GestSTR 2 = " & Value) Return Value ' Retourne la Valeur End Sub
- Comme il est hasardeux de tenter de lire quelque chose qui n’existe pas , il est prudent de tester :
- si le fichier INI existe “File.Exists” (sinon erreur I/O)
- Et si la clef existe dans ce fichier “ContainsKey” (sinon valeur = Null)
Le conseil sera ensuite de créer une bibliothèque à partir de ces fonctions car elle pourront être réutilisées dans pratiquement tous les projets. (Voir comment faire ici)
Image par Werner Moser de Pixabay