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 chercher et remplacer mais pas le texte recherché


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Août 2016
    Messages : 29
    Points : 14
    Points
    14
    Par défaut Vbs chercher et remplacer mais pas le texte recherché
    Bonjour,

    N'étant pas trop familiarisé avec le vbs,

    Je souhaite rechercher un texte dans un fichier txt puis remplacer une autre valeur si elle est trouvée sur la même ligne.
    J'ai déjà trouvé ce script sui me permet de remplacer du texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Const ForReading = 1
    Const ForWriting = 2
    Set objFSO = CreateObject("Scripting.FileSystemObject" )
    Set objFile = objFSO.OpenTextFile("CHEMIN\FICHIER.TXT", ForReading)
    strText = objFile.ReadAll
    objFile.Close
    strNewText = Replace(strText, "backup", "OK backup")
    Set objFile = objFSO.OpenTextFile("CHEMIN\FICHIER2.TXT", ForWriting)
    objFile.WriteLine strNewText
    objFile.Close
    dans ce scipt, le mot backup est remplacé par OK backup

    ce que je souhaite faire c'est rechercher le mot success et remplacer le mot backup par OK backup en fonction de la réussite de la recherche du mot success.
    exemple :
    backup xxx success
    backup yyy failed

    après modification :
    OK backup xxx success
    backup yyy failed

    cela fait un moment que je cherche sans trouver.

    Merci d'avance pour votre aide !
    batist3

  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 181
    Points
    17 181
    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
    Const ForReading = 1
    Const ForWriting = 2
    Set objFSO = CreateObject("Scripting.FileSystemObject" )
    Set objFile = objFSO.OpenTextFile("CHEMIN\FICHIER.TXT", ForReading)
    strText = objFile.ReadAll
    objFile.Close
    If InStr(1, strText, "success", vbTextCompare) <> 0 Then 'si une occurrence été trouvée, une position a été retournée
    	strNewText = Replace(strText, "backup", "OK backup")
    	Set objFile = objFSO.OpenTextFile("CHEMIN\FICHIER2.TXT", ForWriting)
    	objFile.WriteLine strNewText
    	objFile.Close
    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 ← ← 👈

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Août 2016
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Merci pour cette réponse rapide

    Cependant, en faisant le test cela ne fonctionne pas.
    voici le test que j'ai fait

    texte du fichier1.txt
    backup success
    backup failed

    contenu du fichier vbs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Const ForReading = 1
    Const ForWriting = 2
    Set objFSO = CreateObject("Scripting.FileSystemObject" )
    Set objFile = objFSO.OpenTextFile("C:\Users\Utilisateur\Desktop\fichier1.txt", ForReading)
    strText = objFile.ReadAll
    objFile.Close
    If InStr(1, strText, "success", vbTextCompare) <> 0 Then 'si une occurrence été trouvée, une position a été retournée
    	strNewText = Replace(strText, "backup", "OK backup")
    	Set objFile = objFSO.OpenTextFile("C:\Users\Utilisateur\Desktop\fichier2.txt", ForWriting)
    	objFile.WriteLine strNewText
    	objFile.Close
    End If
    Résultat du fichier2.txt
    OK backup success
    OK backup failed

    le résultat attendu étant :
    OK backup success
    backup failed

    Je me suis trompé quelque part ?

  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 181
    Points
    17 181
    Par défaut
    Essais, ligne 8, avec ce code légèrement modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        strNewText = Replace(strText, "backup", "OK backup", 1, -1, 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 ← ← 👈

  5. #5
    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 181
    Points
    17 181
    Par défaut
    toujours ligne 8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        strNewText = Replace(strText, "backup", "OK backup", 1, 1, vbTextCompare)
    comme quoi un moins (le signe - du 6° paramètre) te donnais un + dans le remplacement
    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 ← ← 👈

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Août 2016
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Désolé mais cela ne marche toujours pas

    après différents test, ce script permet de vérifier la présence du terme success
    s'i est présent cela modifie toutes les lignes contenant le mot backup
    s'il est absent, le texte n'est pas modifié

    exemple
    fichier1 :
    backup xxx success
    backup yyy failed
    backup zzz success

    vu qu'il y a au moins un success dans le fichier, toutes les lignes seront modifiées avec OK backup
    J'aimerai mettre le OK backup seulement devant les lignes contenant success
    et un autre script avec KO backup failed

    avec tes dernières instructions, cela ne modifie que la première ligne.
    si le texte1 contient :
    backup xxx failed
    backup yyy success

    le résultat sera
    OK backup xxx failed

    Je pense que si il existe une commande pour vérifier ligne par ligne si le terme existe et remplace le mot backup par OK backup, cela fonctionnera
    A priori je vois des références à split mais je ne sais pas si ça a un rapport avec ce que je cherche

    Merci en tout cas de ton intérêt
    je me répète mais je suis novice en vbs.

  7. #7
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    Peut-être avec ce
    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
    Const ForReading = 1
    Const ForWriting = 2
    Set objFSO = CreateObject("Scripting.FileSystemObject" )
    Set objFile = objFSO.OpenTextFile("C:\Users\Utilisateur\Desktop\fichier1.txt", ForReading)
     
        Do While  Not objFile.AtEndOfStream
            strText = objFile.ReadLine
            If InStr(1, LCase(strText), "success", vbTextCompare) <> 0 Then 'si une occurrence été trouvée, une position a été retournée
                strNewText = strNewText & Replace(strText, "backup", "OK backup")  & vbNewLine
            Else
                strNewText = strNewText & strText & vbNewLine
            End If
        Loop
        objFile.Close
     
        Set objFile = objFSO.OpenTextFile("C:\Users\Utilisateur\Desktop\fichier1.txt", ForWriting)
        objFile.Write strNewText
        objFile.Close
    [EDIT] Mais attention, si on ré-exécute le script, on va avoir 'OK OK backup' et à chaque exécution, un autre OK est ajouté.
    Pour y remédier, on doit rajouter une condition sur la ligne lue : La ligne 8 deviendrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If InStr(1, LCase(strText), "success", vbTextCompare) <> 0 And _
                InStr(1, LCase(strText), "ok backup", vbTextCompare) = 0 Then
    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) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  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 181
    Points
    17 181
    Par défaut
    batist3 ton debut de discussion
    ce que je souhaite faire c'est rechercher le mot success et remplacer le mot backup par OK backup en fonction de la réussite de la recherche du mot success.
    exemple :
    backup xxx success
    backup yyy failed

    après modification :
    OK backup xxx success
    backup yyy failed

    cela fait un moment que je cherche sans trouver.

    Merci d'avance pour votre aide !
    batist3
    j'avais compris que le fichier ne contenait que 2 lignes.
    l_autodidacte,, te propose une bonne solution pour un fichier de x nombre de lignes.
    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
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    Désolé , je n'ai vu la remarque concernant le KO qu'après avoir modifié le post
    En somme, voici le script final si j'ose dire :
    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
    Const ForReading = 1
    Const ForWriting = 2
    Set objFSO = CreateObject("Scripting.FileSystemObject" )
    Set objFile = objFSO.OpenTextFile("C:\Users\Utilisateur\Desktop\fichier1.txt", ForReading)
     
        Do While  Not objFile.AtEndOfStream
            strText = objFile.ReadLine
            If InStr(1, LCase(strText), "success", vbTextCompare) <> 0 And _
                InStr(1, LCase(strText), "ok backup", vbTextCompare) = 0 Then 
                strNewText = strNewText & Replace(strText, "backup", "OK backup")  & vbNewLine
            ElseIf InStr(1, LCase(strText), "failed", vbTextCompare) <> 0 And _
                InStr(1, LCase(strText), "ko backup", vbTextCompare) = 0 Then 
                strNewText = strNewText & Replace(strText, "backup", "KO backup")  & vbNewLine
            Else
                strNewText= strNewText & strText & vbNewLine
            End If
        Loop
        objFile.Close
     
        Set objFile = objFSO.OpenTextFile("C:\Users\Utilisateur\Desktop\fichier1.txt", ForWriting)
        objFile.Write strNewText
        objFile.Close
    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) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Août 2016
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Magnifique !!

    Ca fonctionne parfaitement.

    Un grand MERCI à vous deux !

  11. #11
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    Je lance ce script pour les OK Sauvegarde success
    et un autre pour les KO Sauvegarde failed
    Y-a t'il un moyen de fusionner les deux script en un seul ?
    Un peu plus d'explications ou un début de code serait plus explicite...
    S'il s'agit de remplacer Sauvegarde par OK Sauvegarde et/ou KO sauvegarde, il suffit d'ajouter des conditions telles que celles dans le dernier script.
    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) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  12. #12
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Août 2016
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par l_autodidacte Voir le message
    Un peu plus d'explications ou un début de code serait plus explicite...
    S'il s'agit de remplacer Sauvegarde par OK Sauvegarde et/ou KO sauvegarde, il suffit d'ajouter des conditions telles que celles dans le dernier script.
    En fait je cherchais en réalité à ajouter un texte avant le mot backup en fonction du résultat du log de sauvegarde (success ou failed situé à la fin de la ligne)

    Pour mon premier post, je me suis surement mal exprimé.
    de plus, le début de code aurait été très compliqué (pour moi) à expliquer.
    je passe par un batch qui reprend une trentaine de fichier log pour fusionner la première ligne dans un seul fichier puis 2 vbs dont celui ci pour le franciser et le formater au format html et enfin l'envoyer par mail.

    J'essaierai d'être plus précis la prochaine fois.

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

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