IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

VBScript Discussion :

[VBS] Script - Remplacement d'une chaîne de caractères dans un fichier txt


Sujet :

VBScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 30
    Points
    30
    Par défaut [VBS] Script - Remplacement d'une chaîne de caractères dans un fichier txt
    Bonjour le forum,

    J'ai un fichier txt (Directories pour lancement d'un application) dans lequel se trouve des chemins d'accès à des repertoires, du type "W:\XXX09\11-7-2014\Data".

    Mon but est de changer la date (ici "11-7-2014") par la date du jour.
    Le "W:\XXX09\" ne change pas.

    J'imaginais chercher la chaîne "W:\XXX09\" puis capturer la chaine qui suit jusqu'au prochain "\" et la remplacer par la fonction "Date". Seulement mes connaissance en VBS sont plus que limitées.

    Merci pour votre aide.

    @ plus

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 188
    Points
    17 188
    Par défaut
    Salut, bienvenue sur DVP
    Une solution parmi d'autres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim PhraseSoumise
    PhraseSoumise = "W:\XXX09\11-7-2014\Data"
    PhraseSoumise = Replace(PhraseSoumise, Split(PhraseSoumise, "\", , vbTextCompare)(2), Date, , , vbTextCompare)
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 30
    Points
    30
    Par défaut
    Salut ProgElect!

    Merci pour ta réponse.
    Le truc c'est que la chaîne de caractère que je veux remplacer (ici "11-7-2014") n'est pas fixe. Elle va changer au fil de mes modifications puisque je vais la changer tous les jours.
    Je peux juste me fier à "W:\XXX09\" qui lui est invariant.

    Je ne sais pas si je me fais bien comprendre...

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

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 188
    Points
    17 188
    Par défaut
    As tu fais l'essai ?
    Mis à part PhraseSoumise que tu dois remplir avec l'extrait de ton fichier, le code n'utilise pas la valeur du champs N°3 (index 2 du Split), il remplace ce champs par la date du jour en cours.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 30
    Points
    30
    Par défaut
    Non je n'ai pas fait l'essai. J'ai avancé sur ce code:
    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
    Dim Position, Position2, Texte, objFSO, objFile
     
    Const ForReading = 1 
    Const ForWriting = 2 
     
    Set objFSO = CreateObject("Scripting.FileSystemObject" ) 
    Set objFile = objFSO.OpenTextFile("C:\bvsys\TurnoutView3.7.2\Parameter\Directories.var", ForReading) 
     
    ' Tant que fichier n'est pas terminé 
        While Not objFile.AtEndOfStream 
          ' Lire une ligne 
            Texte = objFile.ReadLine 
            ' Recherche la position de caractère [W:\SIM09\]  
            Position = InStr(1, Texte, "W:\SIM09\", 1) 
            ' Capture le texte 1 caractère plus loin 
            Texte = Mid(Texte,(Position + 1)) 
    	Position2 = InStrRev(1, Texte, "\", 1)
    	Texte = Mid(Texte,1, (Len(Texte)-Position2))
    	strNewText = Replace(strText, Texte, Date)
        Wend
    objFile.Close  
     
    Set objFile = objFSO.OpenTextFile("C:\bvsys\TurnoutView3.7.2\Parameter\Directories.var", ForWriting) 
     
    objFile.WriteLine strNewText 
    objFile.Close
     
    msgbox("Le fichier Directories a été modifié.")
    Mais j'ai une erreur sur le InstrRev. Incompatibilité entre mon "\" et un string attendu..

    Est ce que ce code a des chances de fonctionner?

  6. #6
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 188
    Points
    17 188
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        While Not objFile.AtEndOfStream
          ' Lire une ligne
            Texte = objFile.ReadLine
            ' Recherche la position de caractère [W:\SIM09\]
            'Position = InStr(1, Texte, "W:\SIM09\", 1)
            ' Capture le texte 1 caractère plus loin
            'Texte = Mid(Texte, (Position + 1))
            'Position2 = InStrRev(1, Texte, "\", 1)
            'Texte = Mid(Texte, 1, (Len(Texte) - Position2))
            'strNewText = Replace(strText, Texte, Date)
            strNewText = Replace(Texte, Split(Texte, "\", , vbTextCompare)(2), Date, , , vbTextCompare)
        Wend
    objFile.Close
    La seule condition, que chaque phrase soit de la même structure, contenu de la date égal troisième information de la phrase et séparateur de ces informations égal à "\".
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 30
    Points
    30
    Par défaut
    Justement toutes les phrases de sont pas de la même structure. Voici mon fichier, pour que ce soit plus clair:
    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
    Structure Directory settings Directory settings
    BEGIN
       001, Path Relative Dictionary Database = "Dictionary.mdb"                    
       009, Path Relative Translation Database = "Translation.mdb"                 
       010, Path Relative User Database = "Benutzer.mdb"                           
       002, List<String> Database Dir List[5]                   
          [0] = "e:\data"
          [1] = "f:\data"
          [2] = "G:\data"
          [3] = "C:\Data"
          [4] = "W:\SIM09\Chaîne_à_modifier\Data"
       003, List<String> Rawdata Dir List[5]                    
          [0] = "e:\Rawdata"
          [1] = "f:\Rawdata"
          [2] = "G:\Rawdata"
          [3] = "C:\RawData"
          [4] = "W:\SIM09\Chaîne_à_modifier\RawData"
       004, List<String> TGM Dir List[5]                       
          [0] = "e:\tgm"
          [1] = "f:\tgm"
          [2] = "G:\tgm"
          [3] = "C:\tgm"
          [4] = "W:\SIM09\Chaîne_à_modifier\TGM"
       005, Structure  WayAssignment Directories
       BEGIN
          001, String Base directory = "e:\Wegzuordnung"                           
          002, Path Relative CoursePlanDir = "Ablaufdateien"                       
          003, Path Relative DayTripDir = "Tagesdateien"                            
          004, Path Relative WalkPlanDir = "WalkPlan"
       END
    END
    Je veux remplacer la chaîne "Chaîne_à_modifier" par la date du jour. Elle apparaît trois fois dans le fichier, je veux la remplacer à chaque fois.

    Est ce que cela est plus clair? Je sais que c'est souvent difficile à se faire comprendre sans un minimum d'information. J'espère en avoir donné assez.

    Merci pour ton aide.

  8. #8
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 188
    Points
    17 188
    Par défaut
    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
    Dim Texte, strNewText, objFSO, objFile
     
    Const ForReading = 1
    Const ForWriting = 2
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("C:\bvsys\TurnoutView3.7.2\Parameter\Directories.var", ForReading)
     
    ' Tant que fichier n'est pas terminé
        While Not objFile.AtEndOfStream
          ' Lire une ligne
            Texte = objFile.ReadLine
            ' vérifier si le texte contient "W:\SIM09\"
            If InStr(1, Texte, "W:\SIM09\", vbTextCompare) <> 0 Then
                strNewText = strNewText & Replace(Texte, Split(Texte, "\", , vbTextCompare)(2), Date, , , vbTextCompare)
                Else
                strNewText = strNewText & Texte
            End If
        Wend
    objFile.Close
     
    Set objFile = objFSO.OpenTextFile("C:\bvsys\TurnoutView3.7.2\Parameter\Directories.var", ForWriting)
     
    objFile.WriteLine strNewText
    objFile.Close
     
    MsgBox ("Le fichier Directories a été modifié.")
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 30
    Points
    30
    Par défaut
    Super merci ProgElect.
    J'ai qd même une erreur sur la ligne 15, cara 13. "Type incompatible".

    Ca fonctionne chez toi?

  10. #10
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 188
    Points
    17 188
    Par défaut
    Ca fonctionne chez toi?
    Non mais en VB6 oui
    Code corrigé, validé pour VBScript.
    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
    Dim Texte, strNewText, Tbl, objFSO, objFile
     
    Const ForReading = 1
    Const ForWriting = 2
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("C:\bvsys\TurnoutView3.7.2\Parameter\Directories.var", ForReading)
     
    ' Tant que fichier n'est pas terminé
        While Not objFile.AtEndOfStream
          ' Lire une ligne
            Texte = objFile.ReadLine
            ' vérifier si le texte contient "W:\SIM09\"
            If InStr(1, Texte, "W:\SIM09\", vbTextCompare) <> 0 Then
    			Tbl = Split(Texte, "\",-1 , vbTextCompare)
                strNewText = strNewText & Replace(Texte, Tbl(2), cstr(Date))
                Else
                strNewText = strNewText & Texte
            End If
        Wend
    objFile.Close
     
    Set objFile = objFSO.OpenTextFile("C:\bvsys\TurnoutView3.7.2\Parameter\Directories.var", ForWriting)
     
    objFile.WriteLine strNewText
    objFile.Close
     
    MsgBox ("Le fichier Directories a été modifié.")

    Motif de l'édit:
    En vbscript dans une sub ou une function, un paramètre optionnel précédant doit être renseigné si on veut renseigner le suivant

    Dans le code proposé plus haut, La variable Tbl peut être éliminée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            If InStr(1, Texte, "W:\SIM09\", vbTextCompare) <> 0 Then
                strNewText = strNewText & Replace(Texte,(Split(Texte, "\", -1, vbTextCompare))(2), Date)
                Else
                strNewText = strNewText & Texte
            End If
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  11. #11
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    une autre méthode:
    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
     
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    path = "C:\bvsys\TurnoutView3.7.2\Parameter\Directories.var"
     
    Function repl(m,p,s)
        repl =  "W:\SIM09\" & Date 
    End Function 
    content = fso.OpenTextFile(path,1).ReadAll
    With New RegExp 
            .Global = True
            .Pattern = "W:\\SIM09\\[^\\]+"
            srepl = .Replace(content, GetRef("repl"))
    End With 
    fso.CreateTextFile(path,True).Write srepl
    EDIT: le fichier sera chargé entier dans la mémoire si tu as un gros fichier tu peux lire par ligne.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 30
    Points
    30
    Par défaut
    Merci à tous les deux pour votre aide!!
    Les deux méthodes fonctionnent.

    @ plus!

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

Discussions similaires

  1. [Python 3.X] Script modifiant une chaîne de caractères dans plusieurs fichiers.
    Par Julien698 dans le forum Général Python
    Réponses: 4
    Dernier message: 09/09/2014, 13h41
  2. Réponses: 0
    Dernier message: 02/09/2014, 12h20
  3. Remplacer une chaîne de caractères dans un fichier
    Par pol2095 dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 26/03/2014, 07h35
  4. Réponses: 0
    Dernier message: 19/01/2009, 10h00

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