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

  1. #1
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    février 2006
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 221
    Points : 3 312
    Points
    3 312

    Par défaut 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
    Membre expert

    Homme Profil pro
    Responsable déploiement (SCCM, AirWatch, AMP)
    Inscrit en
    juillet 2014
    Messages
    1 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, AirWatch, AMP)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 1 640
    Points : 3 073
    Points
    3 073

    Par défaut

    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
    Avatar de omen999
    Profil pro
    Inscrit en
    février 2006
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 221
    Points : 3 312
    Points
    3 312

    Par défaut

    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

Discussions similaires

  1. Ecrire la valeur d'une textbox dans une cellule avec le format désiré
    Par Kirgerad dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/09/2010, 08h41
  2. Réponses: 5
    Dernier message: 11/06/2008, 15h40
  3. Réponses: 2
    Dernier message: 26/08/2006, 12h56
  4. Macro - Ecrire des valeurs dans une table
    Par gojaru dans le forum Access
    Réponses: 2
    Dernier message: 17/08/2006, 13h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo