Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Vos Contributions VBScript Discussion :

Ecrire la valeur d'une clé d'un fichier "INI"


Sujet :

Vos Contributions VBScript

  1. #1
    Rédacteur

    Ecrire la valeur d'une clé d'un fichier "INI"
    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
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  2. #2
    Expert confirmé
    Le script conserve t'il les commentaires placés sur les lignes modifiées ?
    Il peut m'arriver que je souhaite que le caractère ";" fasse parti de ma valeur, est ce possible ?

  3. #3
    Rédacteur

    Le script conserve t'il les commentaires placés sur les lignes modifiées ?
    oui, avec la réserve que les espaces situés entre la valeur de clé et le caractère ';' ne sont pas conservés

    Il peut m'arriver que je souhaite que le caractère ";" fasse parti de ma valeur, est ce possible ?

    non, puisque le caractère ';' est interprété comme la balise de début de commentaires.
    il faudrait écrire une variante avec un pattern distinct pour accepter le caractère ';' dans la valeur de clé
    mais cela implique la perte du support des trailing comments
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp