1. #1
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2016
    Messages : 4
    Points : 3
    Points
    3

    Par défaut Modification d'une valeur dans une liste de fichier XML

    Bonjour,

    Je suis à la recherche d'aide pour un script qui me permettrait de changer une valeur par une autre dans une liste de fichier XML.

    Cette liste n'est pas fixe et elle peut varier. Le but serait de dire au script d'analyser tous les fichiers XML d'un répertoire et de changer la valeur voulue.

    Le fichier XML est simple :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
    <schedule evtnextid="5">
        <events>
            <event time="17:23:00/00" class="0" tgtguid="{41C4F899-2416-4117-B3C1-9869B19A5795}" objname="Tsk_Alert_elec_Open" actname="Play" comment="" group="" assvar="" id="2" />
            <event time="17:42:00/00" class="0" tgtguid="{41C4F899-2416-4117-B3C1-9869B19A5795}" objname="Tsk_Alert_elec_Open" actname="Play" comment="" group="" assvar="" id="3" />
            <event time="17:55:00/00" class="0" tgtguid="{41C4F899-2416-4117-B3C1-9869B19A5795}" objname="Tsk_Alert_elec_Open" actname="Play" comment="" group="" assvar="" id="5" />
            <event time="17:23:00/00" class="0" tgtguid="{41C4F899-2416-4117-B3C1-9869B19A5795}" objname="Tsk_Alert_elec_Open" actname="Play" comment="" group="" assvar="" id="6" />
            <event time="17:23:00/00" class="0" tgtguid="{41C4F899-2416-4117-B3C1-9869B19A5795}" objname="Tsk_Alert_elec_Open" actname="Play" comment="" group="" assvar="" id="7" />
        </events>
    </schedule>

    La valeur à changer est "tgtguid".

    Le script serait à lancer sur une machine Windows et je me suis dit qu'en VB ce serait bien non ?

    Si quelqu'un peut m'aider

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 120
    Points : 8 182
    Points
    8 182

    Par défaut

    Salut, bienvenue sur DVP

    J'ai un doute, tu nous dis
    La valeur à changer est "tgtguid".
    la modification à faire est sur le mot tgtguid ou la valeur donnée à cette balise {41C4F899-2416-4117-B3C1-9869B19A5795}
    Si cela est bien sur le mot tgtguid, une simple ouverture du fichier .xml en écriture et la fonction Replace suffit.

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2016
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    C'est effectivement la valeur donnée à la balise que je veux changer. Sachant que j'ai une 40aine de fichier à traiter et cela à n'importe quel moment.
    De plus je n'ai aucune connaissance sur le script VB donc si vous avez des exemples, je suis preneur.

  4. #4
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 120
    Points : 8 182
    Points
    8 182

    Par défaut

    Salut

    Ce code permet de changer la valeur du contenu de la balise tgtguid dans chaque fichier, cette valeur est identique pour chaque tgtguid.
    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
    41
    42
    43
    44
    45
    46
    47
    ScanDossier "C:\PersoFrancis\En VBScript et HTA\ModifPlusieursFichiers\", ".xml"
    MsgBox "FAIT"
     
     
    '--------------------------- Sub et Function ------------------------------------
    Sub ScanDossier(ChemDoss, TypeFilename)
    Dim fso, f, Element, strtext, StrPath, T
    Const ForReading = 1, ForWriting = 2
     
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    'permet de verifier si le dossier est valide ou non
    On Error Resume Next
    T = fso.GetFolder(ChemDoss).Files.Count
    If Err.Number <> 0 Then On Error GoTo 0: Exit Sub
     
    For Each Element In fso.GetFolder(ChemDoss).Files 'parcourir tous les fichiers du dossier
    	StrPath = Split(Element, "\") ' obtient le nom du fichier sans son chemin dossier
    	If InStr(1, Element.Name, TypeFilename) Then 'l'extension est bien celle voulue
    		Set f = fso.OpenTextFile(Element.Path, ForReading) 'ouvre en lecture
    		strtext = f.readAll: f.Close ' récupère le contenu du fichier puis le ferme
    		'--- appel la fonction qui va faire le remplacement ---
    		strtext = remplacer(strtext, "ABCDEFGHIJKLM", "tgtguid=" & Chr(34) & "{", "}")
    		If strtext <> "" Then ' Ok pas de problème, les balise début et fin ont été trouvé
    			Set f = fso.OpenTextFile(Element.Path, ForWriting) 'ouvre le fichier en écriture
    			f.Write strtext: f.Close ' remplace le contenu modifié du fichier puis le ferme
    		End If
    		Set f = Nothing
        End If
    Next
    Set fso = Nothing
    End Sub
     
    Function remplacer(RechDans, MotDeRemplacement, BaliseDeb, BaliseFin)
    Dim pos, posdeb, motrecupe
    pos = 0: remplacer = ""
    pos = InStr(pos + 1, RechDans, BaliseDeb, vbTextCompare) 'recherche de la position de la balise de début
    If pos <> 0 Then 'la balise debut a été trouvé
        posdeb = pos + Len(BaliseDeb) 'calage au debut du mot à remplacer
        pos = InStr(posdeb, RechDans, BaliseFin, vbTextCompare) 'recherche de la position de la balise de fin
        If pos <> 0 Then 'la balise fin a été trouvé
            motrecupe = Mid(RechDans, posdeb, pos - posdeb)'extraction du mot à remplacer
            'effectue le remplacement de tous les motrecupe par MotDeRemplacement
    		remplacer = Replace(RechDans, motrecupe, MotDeRemplacement, 1, -1, vbTextCompare)
        End If
    End If
    End Function
    Ligne 1, changer le chemin du dossier ou sont les fichiers .xml par ton propre chemin.
    Ligne 23, strtext = remplacer(strtext, "ABCDEFGHIJKLM", "tgtguid=" & Chr(34) & "{", "}") ABCDEFGHIJKLM est le mot de remplacement de la balise tgtguid, "tgtguid=" & Chr(34) & "{" et le début qui précède le mot à remplacer, "}" est le caractère suivant le mot à remplacer.



    S'il ne s'agit que de remplacer le nom de la balise tgtguid
    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
    ScanDossier "C:\PersoFrancis\En VBScript et HTA\ModifPlusieursFichiers\", ".xml"
    MsgBox "FAIT"
     
     
    '--------------------------- 1 seule Sub ------------------------------------
    Sub ScanDossier(ChemDoss, TypeFilename)
    Dim fso, f, Element, strtext, StrPath, T
    Const ForReading = 1, ForWriting = 2
     
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    'permet de verifier si le dossier est valide ou non
    On Error Resume Next
    T = fso.GetFolder(ChemDoss).Files.Count
    If Err.Number <> 0 Then On Error GoTo 0: Exit Sub
     
    For Each Element In fso.GetFolder(ChemDoss).Files 'parcourir tous les fichiers du dossier
    	StrPath = Split(Element, "\") ' obtient le nom du fichier sans son chemin dossier
    	If InStr(1, Element.Name, TypeFilename) Then 'l'extension est bien celle voulue
    		Set f = fso.OpenTextFile(Element.Path, ForReading) 'ouvre en lecture
    		strtext = f.readAll: f.Close ' récupère le contenu du fichier puis le ferme
    		'--- appel la fonction qui va faire le remplacement ---
    		strtext = Replace(strtext, "tgtguid", "NouveauNom", 1, -1, vbTextCompare)
    		Set f = fso.OpenTextFile(Element.Path, ForWriting) 'ouvre le fichier en écriture
    		f.Write strtext: f.Close ' remplace le contenu modifié du fichier puis le ferme
    		Set f = Nothing
        End If
    Next
    Set fso = Nothing
    End Sub
    Toujours modifier la ligne 1.
    Ligne 23, strtext = Replace(strtext, "tgtguid", "NouveauNom", 1, -1, vbTextCompare) tgtguid est le mot à rechercher, NouveauNom est le mot de remplacement.

  5. #5
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2016
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    WOW

    Merci je test ca tout de suite et je vais analyser le script pour mieux comprendre

    Je te confirme que c'est bien la valeur après la balise que j'ai besoin de changer.

    Je te tiens au courant.

    Merci

  6. #6
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2016
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    Testé et approuvé !

    J'ai mis en place une petite routine qui déplace les fichiers du server main vers le server backup et qui change la valeur du tgtguid de tous les fichiers et ca marche au top !

    MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/03/2016, 14h14
  2. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Réponses: 2
    Dernier message: 04/03/2007, 16h59
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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