1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    août 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : août 2017
    Messages : 9
    Points : 6
    Points
    6

    Par défaut Remplacement d'une chaîne de caractères dans plusieurs fichiers txt

    Bonjour a tous

    Je suis un peu novice dans le domaine de VBS et je sollicite donc vos lumières .

    Voila mon problème, j'ai plusieurs fichier .txt qui contiennent les ventes de la semaine de nos boutiques (je travaille de la distribution textile). A l’intérieur de ces fichiers (dont le nombre est variable d'une semaine a l'autre) il y a des codes de boutiques avec la syntaxe suivante :

    ;82;
    ;83;
    ;86;

    Ces codes ne sont pas exploitable par notre logiciel tel quel et je dois les modifier manuellement un à un avec la syntaxe suivante :

    ;082;
    ;083;
    ;086;

    J'aurai besoin de votre aide pour créer une boucle qui test tout les fichiers d'un dossier (ex: C:\test) et qui remplace les anciens codes boutiques par ceux désirés.

    J'espere que ma demande est claire.

    Merci d'avance pour l'aide que vous pourriez m'apporter .

  2. #2
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 066
    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 066
    Points : 8 071
    Points
    8 071

    Par défaut

    Salut
    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
    Sub ModifFichier(CheminNomFichier)
            Const ForReading = 1
            Const ForWriting = 2
            Dim objFSO, F
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            Dim TblLignesLut, T, RecupChiffre
    	TblLignesLut = Split(objFSO.OpenTextFile(CheminNomFichier, ForReading).ReadAll, vbNewLine)
     
            For T = 0 To UBound(TblLignesLut)
                    RecupChiffre = Cint(replace(TblLignesLut(T),";",""))
                    TblLignesLut(T)= ";" & String(3-Len(RecupChiffre),"0") & RecupChiffre & ";"
            next
            Set F = objFSO.OpenTextFile(CheminNomFichier, ForWriting, True)
            F.Write Join(TblLignesLut,vbNewLine)
            F.Close
            Set F = Nothing
            Set TblLignesLut = Nothing
            Set objFSO = Nothing
     
     End Sub
     
     ModifFichier "C:\Provisoir\Test.txt"
     ModifFichier "C:\Provisoir\Test2.txt"
    ' ModifFichier "C:\Provisoir\............"
    MsgBox "Fait", vbInformation
    En appelant la sub ModifFichier tu peux donc boucler pour chacun des fichiers.
    Reste à savoir s'il n'est pas dommageable d'écraser le fichier source? car le fichier est sauvegardé sous le même nom.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    août 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : août 2017
    Messages : 9
    Points : 6
    Points
    6

    Par défaut

    Merci ProgElecT pour ta réponse j'ai parcouru ton code apparemment il fait une recherche sur le caractère ";" si j'ai bien compris (j'ai peut être mal compris aussi ).
    Le problème c'est que ce caractère est présent sur la totalité du document (c'est un délimiteur), donc si je l'applique tel quel je pense qu'il va me mettre des 0 partout.

    Merci encore une fois pour ton aide

    PS : Pourrai tu m'expliquer pas a pas le fonctionnement du code et merci encore une fois

  4. #4
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 066
    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 066
    Points : 8 071
    Points
    8 071

    Par défaut

    Re

    Dans le fichier test.txt avant modification
    ;82;
    ;83;
    ;86;
    ;6;
    ;123;
    Après
    ;082;
    ;083;
    ;086;
    ;006;
    ;123;
    Essais le programme , en désignant le bon chemin/nom de fichier.

    PS : Pourrai tu m'expliquer pas a pas le fonctionnement du code et merci encore une fois
    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
    'ouvre en lecture le fichier en récupérant chaque lignes qui sont mises dans la variable tableau TblLignesLut
    TblLignesLut = Split(objFSO.OpenTextFile(CheminNomFichier, ForReading).ReadAll, vbNewLine)
     
    'parcours tout le tableau
    For T = 0 To UBound(TblLignesLut)
    	'recupére chaque chiffre en supprimant les ; (replace par rien)
    	RecupChiffre = Cint(replace(TblLignesLut(T),";",""))
    	'modifie chaque variable tableau en lui ajoutant le nombre de zéros voulus pour former un mot de 3 caractères
    	' plus le caractère ; de chaques cotés
    	TblLignesLut(T)= ";" & String(3-Len(RecupChiffre),"0") & RecupChiffre & ";"
    next
    'ouvre le même fichier en écriture
    Set F = objFSO.OpenTextFile(CheminNomFichier, ForWriting, True)
    'écrit la concaténation du tableau TblLignesLut en séparent chacune des variables par un saut de ligne
    F.Write Join(TblLignesLut,vbNewLine)
    'ferme le fichier
    F.Close

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    août 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : août 2017
    Messages : 9
    Points : 6
    Points
    6

    Par défaut

    Bon j'ai essayé le code en remplaçant le chemin par le miens :

    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
    Sub ModifFichier("C:\Users\b.mehdi\Desktop\TR290817\IBT")
            Const ForReading = 1
            Const ForWriting = 2
            Dim objFSO, F
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            Dim TblLignesLut, T, RecupChiffre
    	TblLignesLut = Split(objFSO.OpenTextFile("C:\Users\b.mehdi\Desktop\TR290817\IBT", ForReading).ReadAll, vbNewLine)
     
            For T = 0 To UBound(TblLignesLut)
                    RecupChiffre = Cint(replace(TblLignesLut(T),";",""))
                    TblLignesLut(T)= ";" & String(3-Len(RecupChiffre),"0") & RecupChiffre & ";"
            next
            Set F = objFSO.OpenTextFile("C:\Users\b.mehdi\Desktop\TR290817\IBT", ForWriting, True)
            F.Write Join(TblLignesLut,vbNewLine)
            F.Close
            Set F = Nothing
            Set TblLignesLut = Nothing
            Set objFSO = Nothing
     
     End Sub
    Mais j'ai le message d'erreur suivant :

    Nom : Sans titre.jpg
Affichages : 33
Taille : 39,0 Ko

  6. #6
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 066
    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 066
    Points : 8 071
    Points
    8 071

    Par défaut

    L'appel de la sub se fait comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ModifFichier "C:\Provisoir\Test.txt"
    A la place de "C:\Provisoir\Test.txt" tu dois mettre "C:\Users\b.mehdi\Desktop\TR290817\IBT"
    Ton Chemin nom de fichier se termine par IBT, étonnant car en général le fichier devrait se terminer par .TXT comme tu l'indiques dans ton premier message.
    Donc tu ne modifies pas cette partie du
    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
    Sub ModifFichier(CheminNomFichier)
            Const ForReading = 1
            Const ForWriting = 2
            Dim objFSO, F
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            Dim TblLignesLut, T, RecupChiffre
    	TblLignesLut = Split(objFSO.OpenTextFile(CheminNomFichier, ForReading).ReadAll, vbNewLine)
     
            For T = 0 To UBound(TblLignesLut)
                    RecupChiffre = Cint(replace(TblLignesLut(T),";",""))
                    TblLignesLut(T)= ";" & String(3-Len(RecupChiffre),"0") & RecupChiffre & ";"
            next
            Set F = objFSO.OpenTextFile(CheminNomFichier, ForWriting, True)
            F.Write Join(TblLignesLut,vbNewLine)
            F.Close
            Set F = Nothing
            Set TblLignesLut = Nothing
            Set objFSO = Nothing
     
     End Sub
    Tu adaptes pour ton chemin nom de fichier comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ModifFichier "C:\Users\b.mehdi\Desktop\TR290817\IBT.txt"
    MsgBox "Fait", vbInformation

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    août 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : août 2017
    Messages : 9
    Points : 6
    Points
    6

    Par défaut

    Merci pour tout ProgElecT mon problème est résolu

  8. #8
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    1 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 998
    Points : 4 543
    Points
    4 543

    Par défaut

    Salut à vous deux et aux autres ;

    Heureux que ce soit résolu.

    J'aurais une proposition qui donnerait le résultat escompté(un peu plus longue) si chaque ligne contient un seul "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
    29
    30
    31
    32
    33
    Option Explicit 
     
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Dim fso, Fich1, Fich2, Ret, TBLigneLue, Ind, K, SousChaine, Recherche
     
    Set fso = CreateObject("Scripting.FileSystemObject") 
     
    Set fich1 = fso.OpenTextFile("Ventes.txt", ForReading, False) ' Adapter le chemin
    Set fich2 = fso.OpenTextFile("VentesAfter.txt", ForAppending, True) ' Nouveau fichier pour ne pas toucher à l'original
    Ret = fich1.ReadALL
    fich1.Close
    TBLigneLue = Split(Ret, vbNewLine, -1, vbTextCompare)
    For K = 0 To Ubound(TBLigneLue)
        Ret = TBLigneLue(K)
        Ind = 0
        Recherche = ""
        Do
           Ind = Ind + 1
           SousChaine = SousChaine & Mid(Ret, Ind, 1)
           If Asc(Mid(Ret, Ind, 1)) >= 48 And Asc(Mid(Ret, Ind, 1)) <= 57 Then 
              Recherche = Recherche & Mid(Ret, Ind, 1)
           End If
        Loop Until Ind >= Len(Ret)
    '    MsgBox Recherche ' Juste pour le test
        SousChaine = Replace(SousChaine, Recherche, Right("00" & Recherche, 3))
        Fich2.Write SousChaine & vbNewLine
        Recherche = "" : SousChaine = ""
    Next
    Fich2.Close
    ' Nettoyage
    Set fich1 = Nothing
    Set fich2 = Nothing
    Set fso = Nothing
    Tu peux construire une procédure Sub à partir de ce code puis l'appeler avec le nom complet du fichier à traiter
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

+ 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: 11
    Dernier message: 15/07/2014, 09h52
  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. Rechercher/remplacer une chaine de caractères dans plusieurs fichiers
    Par _shuriken_ dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 31/07/2011, 20h06
  5. 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