Lire la valeur d'une clé d'un fichier "INI"
bonjour,
la lecture d'un message récent et un besoin personnel à résoudre m'ont amené à me pencher sur la lecture et l'écriture
des clés de fichiers INI toujours présents sur nos machines notamment en raison de la portabilité qu'ils procurent
je croyais - naïvement :aie: - trouver sur le net un exemple tout fait de
lecture/écriture de ces clés avec les expressions régulières dans une syntaxe compatible vbs : nada
dans un premier temps j'ai écris la fonction ReadIni dont la logique de lecture tient en 2 lignes :yaisse2:
la fonction respecte les normes de format windows :
- indifférence à la casse
- nom de clé unique dans une même section (la valeur des clés suivantes de même nom sera ignorée)
j'y ai juste ajouté le support des commentaires de fin de ligne
le fichier test.ini à placer dans le répertoire "Mes documents"
Code:
1 2 3 4 5 6 7 8
| [UserHome]
Name=
Handy=21/10/2016 ;ceci est la clé recherchée
WWW=
[UserBusiness]
Name=
Handy=02/02/2015 ;pas celle-ci
WWW= |
le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Set fso = CreateObject("Scripting.FileSystemObject")
Set wshell = CreateObject("WScript.Shell")
Set tfg = fso.OpenTextFile(wshell.SpecialFolders("MyDocuments") & "\test.ini",1)
Msgbox ReadIni(tfg,"UserHome","Handy")
Function ReadIni(iniFile,section,key)
' renvoie la valeur de la clé <key> de la section <section> de l'objet fichier <iniFile> ouvert en lecture
Dim iniText
' Initialisation des objets regexp
' peut être déplacé dans le code principal en cas d'appels successifs
Set reg = New RegExp
Set regSub = New RegExp
reg.IgnoreCase = True
regSub.IgnoreCase = True
' lecture du fichier ini et fermeture
iniText = iniFile.ReadAll
iniFile.Close
' lecture de la clé spécifique de la section
reg.Pattern = "\[" & section & "\]([^\[]+)":regSub.Pattern = "\b" & key & " *= *([^;\f\n\r\t\v]+)"
On Error Resume Next
ReadIni = regSub.Execute(reg.Execute(iniText).Item(0).SubMatches(0)).Item(0).SubMatches(0)
If Err.Number = 5 then ReadIni = False
End Function |
avant de placer cet exemple dans la :faq: toutes les remarques sont bienvenues
l'écriture des clés au prochain épisode
edit : ajout gestion section/clé absentes ou clé vide renvoie la valeur booléenne Faux
edit2 : suppression du bug des espaces dans les valeurs de clé (voir ci-dessous)