B4A: Lire et écrire un Fichier de configuration

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 :
    1. si le fichier INI existe “File.Exists” (sinon erreur I/O)
    2. 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

Laisser un commentaire