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"
le code :
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=
avant de placer cet exemple dans la toutes les remarques sont bienvenues
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
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)
Partager