[VBS]Récupérer le texte derrière un caractère

Résolu
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   -  
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Voilà je cherche à récupérer dans un fichier texte le contenu présent après une chaine de caractères définie.

Contenu de mon fichier.txt

Name="Toto"
Version="2.4.0"

Je souhaite que mon .vbs m'affiche :

Toto
2.4.0

J'ai trouvé la fonction qui permet de lire un fichier ligne par ligne, mais je ne vois pas quelle fonctionne permet de récupérer le contenu présent après une chaine de caractères passée en paramètre.

Faisable ?

8 réponses

  1. Heremion Messages postés 564 Statut Membre 102
     
    Bonjour Bezourox,

    Je ne connais pas le VBS, mais pourquoi ne chercherais-tu pas la position du =, ou de ton premier et dernier " pour récupérer ce qu'il y a entre?
    0
  2. bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
     
    C'est exactement ce que je cherche à faire :-)
    C'est juste que je ne trouve pas la fonction qui permet de faire ça, et idem pour moi je ne connais quasiment pas le vbs
    0
  3. Heremion Messages postés 564 Statut Membre 102
     
    Si tu réussis à récupérer ligne par ligne les informations de ton fichier, tu peux peut-être utiliser la fonction InStr([start, ]string1, string2[, compare]):integer

    Elle renvoie la position de ton string2 dans ton string1, en partant de la position start (le premier caractère est à 1), et compare permet de personnaliser la recherche selon la valeur :
    -1 : Effectue une comparaison à l'aide de la valeur de l'instruction Option Compare.
    0 :Effectue une comparaison binaire.
    1 :Effectue une comparaison textuelle.
    2 :Réservée à Microsoft Access. Effectue une comparaison basée sur les informations de votre base de données.

    La position de ton premier " serait PosGuillemet = InStr(1,TaLigne,""",0)
    Je te suggère de stocker ta ligne dans une variable temporaire car, une fois que tu as récupéré la position du premier guillemet, il te faut récupérer le second.
    Pour faire cela, j'ai procédé de cette façon :

    - Je crée une variable sTemp dans laquelle je mets le contenu de la ligne
    - Je récupère la position du premier guillemet
    - Je stocke dans la variable sTemp la chaine depuis la position du guillemet récupérée +1
    - Je récupère à nouveau la position du premier guillemet rencontré (qui est en fait le deuxième du coup)
    - Je copie dans une variable sResultat, la chaine partant de 1 jusqu'à la position du guillemet -1

    Au besoin, j'ai fait un fichier Excel rempli de macros, si tu as besoin d'aides, je peux te donner quelques astuces...
    0
  4. bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
     
    Salut et merci pour les infos.
    Je vais regarder ça cet aprem mais je pense avoir compris le concept.
    Me reste plus qu'à retranscrire ça en vbs.

    Snin pour ton fichier excel blindé de macros, oui je suis preneur :)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Heremion Messages postés 564 Statut Membre 102
     
    Voilà le fichier en question. Il ne fonctionnera pas, à moins de faire quelques manip, dans ton environnement mais tu peux au moins voir les macros.

    http://www.cijoint.fr/cjlink.php?file=cj201109/cija2uGxyZ.xlsm

    Si vraiment tu veux voir comment fonctionne le fichier, dis-le moi ;)
    0
  7. Utilisateur anonyme
     
    Bonjour,

    Exemple Type :

    À adapter selon vos besoin :-)

    '--------------------------------------------------------------------- 
    ' Fichier .vbs 
    
      Const ctePourLecture = 1 
      Const cteRapport = "Resultat.txt" 
    
      Dim objFSO, objFichier, varNomFic, Texte, Message 
      Dim Chaine, Position 
    
      Set objFSO = CreateObject("Scripting.FileSystemObject") 
    
      ' Localisation du script et du fichier à lire 
      varNomFic = WScript.ScriptFullName 
      varNomFic = Left(varNomFic, InStrRev(varNomFic, "\")) 
      varNomFic = varNomFic & cteRapport 
    
      If ( objFSO.FileExists(varNomFic) ) Then 
    
        Set objFichier = objFSO.OpenTextFile(varNomFic, ctePourLecture) 
    
        While Not objFichier.AtEndOfStream 
            Texte = objFichier.ReadLine 
     Position = InStr(1, Texte, "=", 1) 
     Texte = Mid(Texte,(Position + 2)) 
     Texte = Mid(Texte, 1, (Len(Texte) - 2)) 
            Message = Message & vbCrLf & Texte 
        Wend 
    
        objFichier.Close 
    
        Set objFichier = Nothing 
    
        WScript.Echo Message 
    
      Else 
    
        WScript.Echo "Fichier absent" 
    
      End If 
    
      Set objFSO = Nothing 
    
    
    WScript.Quit(0) 
    ' 
    '--------------------------------------------------------------------- 
    


    Cdt

    Lupin
    0
    1. bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
       
      Sans commentaires ni explications, un peu complexe :)
      0
  8. Utilisateur anonyme
     
    re:

    Tout d'abord :

    Instruction [InStr]
    https://www.microsoft.com/en-us/download/details.aspx?id=55984

    Instruction [Mid]
    https://docs.microsoft.com/fr-fr/dotnet/visual-basic/language-reference/statements/mid-statement

    Le code avec des commentaires :

     
    '--------------------------------------------------------------------- 
    ' Fichier .vbs 
    
      Const ctePourLecture = 1 
      ' Nom du fichier à lire 
      Const cteRapport = "Resultat.txt" 
    
      Dim objFSO, objFichier, varNomFic, Texte, Message 
      Dim Chaine, Position 
    
     ' Création d'on objet pour l'accès au système de fichier 
      Set objFSO = CreateObject("Scripting.FileSystemObject") 
    
      ' Localisation du script et du fichier à lire 
      ' Capture du nom complet du script 
      varNomFic = WScript.ScriptFullName 
      ' Suppression du nom pur afin de conserver le chamin d'accès 
      varNomFic = Left(varNomFic, InStrRev(varNomFic, "\")) 
      ' Ajout du nom du fichier à lire 
      varNomFic = varNomFic & cteRapport 
    
     ' Si fichier existe 
      If ( objFSO.FileExists(varNomFic) ) Then 
    
      ' Création d'un objet fichier pour accès au fichier, et ouverture 
        Set objFichier = objFSO.OpenTextFile(varNomFic, ctePourLecture) 
    
      ' Tant que fichier n'est pas terminé 
        While Not objFichier.AtEndOfStream 
          ' Lire une ligne 
            Texte = objFichier.ReadLine 
            ' Recherche la position de caractère [=] 
            ' InStr(1, Texte, "=", 1) 
            ' 1 = À partir du premier caractère 
            ' Texte = texte dans lequel la recherche s'effectue 
            ' "=" = Caractère recherché 
            ' 1 = Méthode de comparaison en texte  
            Position = InStr(1, Texte, "=", 1) 
            ' Capture le texte 2 caractère plus loin 
            ' donc après le [="] 
            Texte = Mid(Texte,(Position + 2)) 
            ' Enlève les 2 derniers caractères, 
            ' le caractère de saut de ligne et les guillemets 
            Texte = Mid(Texte, 1, (Len(Texte) - 2)) 
            ' Ajoute le texte trouvé avec un saut de ligne [vbCrLf] 
            Message = Message & vbCrLf & Texte 
        Wend 
    
         ' Ferme le fichier 
        objFichier.Close 
    
         ' Libère l'objet Fichier 
        Set objFichier = Nothing 
    
         ' Affiche à l'écran 
        WScript.Echo Message 
    
      Else 
    
         ' Affiche à l'écran 
        WScript.Echo "Fichier absent" 
    
      End If 
    
       ' Libère l'objet du système de fichier 
      Set objFSO = Nothing 
    
    ' Quitte le script avec [0] comme paramètre 
    ' pour signaler "Aucune erreur" 
    WScript.Quit(0) 
    ' 
    '---------------------------------------------------------------------
    


    Cdt

    Lupin
    0
  9. bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
     
    Ok merci super !
    0