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 - 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

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 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)