bonjour,

le deuxième épisode :

l'écriture d'une clé dans un fichier INI en utilisant les expressions régulières

le fichier test.ini à placer dans le répertoire Mes Documents :

[UserHome]
Name=
Handy=21/10/2016 ;ceci est la clé recherchée
WWW=ancienne valeur ;comment
[UserBusiness]
Name=
Handy=02/02/2015 ;pas celle-ci
WWW=0HJU10101
le code (un peu plus touffu car il fallait gérer la création des sections/clés absentes du fichier) :
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Set fso = CreateObject("Scripting.FileSystemObject")
Set wshell = CreateObject("WScript.Shell")
Set oFile = fso.GetFile(wshell.SpecialFolders("MyDocuments") & "\test.ini")
rep = WriteIni(oFile,"UserHome","WWW","nouvelle valeur de clé")
 
Function WriteIni(oFile,section,key,value)
' écrit ou met à jour la clé <key> de section <section> de l'objet fichier oFile avec la valeur <value>
' si la section et/ou la clé n'existent pas elles seront créées
' renvoie toujours vrai
Dim oText,iniText,sectText,newSectText,keyText
' 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
	Set oText = oFile.OpenAsTextStream(1,0)
	iniText = oText.ReadAll
	oText.Close
	'extraction du contenu de la bonne section et remplacement de la valeur
	reg.Pattern = "\[" & section & "\]([^\[]+)":regSub.Pattern = "\b" & key & " *= *([^;\f\n\r\t\v]*)"
	On Error Resume Next
	sectText = reg.Execute(iniText).Item(0).SubMatches(0)
	If Err.Number = 5 Then ' section inconnue
		iniText = iniText & vbCrLf & "[" & section & "]" & vbCrLf & key & "=" & value
	Else
		newSectText = regSub.Replace(sectText,key & "=" & value)
		If newSectText = sectText Then ' clé inconnue
			If Right(sectText,2) = vbCrLf Then keyText = key & "=" & value & vbCrLf Else keyText = vbCrLf & key & "=" & value & vbCrLf
			newSectText = sectText & keyText
		End If
		iniText = reg.Replace(iniText,"[" & section & "]" & newSectText)
	End If
	' écriture du fichier
	Set oText = oFile.OpenAsTextStream(2,0)
	oText.Write iniText
	oText.Close
	WriteIni = True
End Function
avant de placer cet exemple dans la toutes les remarques sont bienvenues