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 :

Extraction de chaines précises


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Par défaut Extraction de chaines précises
    Bonjour à tous,

    Je dois créer un script vbs (language tout nouveau pour moi) afin d'extraire des information pour un report.
    Le script récupère des informations des "Event log" sur des Event précis puis en extrait certaines informations essentielles pour le report.

    Pour ce qui est de la récupération des "Event log" et de l'extraction du l'event qui m'interesse, j'ai reussi à me débrouiller.
    Par contre, je bloque désespérement sur l'extraction de certaines informations du message d'event.

    Un exemple du message d'event rangé dans une chaine est le suivant :
    A broken connection event has occurred on Session Id 13. The DomainName was TOMOO and the UserName was TOTOLITOTO. The ClientName was BOBBY and the ClientAddress was 10.18.18.18. The broken connection event source was 2 and event reason was 1.

    J'ai besoin d'extraire le DomainName (i.e.: TOMOO), le UserName (i.e.: TOTOLITOTO) et le ClientName (i.e.: BOBBY), ces 3 valeurs pouvant être de longueur différentes à chaque message.
    Le chiffre suivant la chaine "Session Id" peut lui aussi varier, modifiant ainsi la longueur du message.


    Si quelqu'un à la solution ou un début de solution, je lui en serais très reconnaissant !

  2. #2
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    bonjour,
    en supposant que chaque ligne du fichier log se présente comme dans ton exemple, la solution bourrin...
    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
    Dim Items(2)
    sLine = "A broken connection event has occurred on Session Id 13. The DomainName was TOMOO and the UserName was TOTOLITOTO. The ClientName was BOBBY and the ClientAddress was 10.18.18.18. The broken connection event source was 2 and event reason was 1."
    iDeb = 1
    iFin = 1
    i = 0
    Do 
      iDeb=InStr(iDeb,sLine,"was ")
      iDeb = iDeb + 4
      iFin=InStr(iDeb,sLine," ")
      If Mid(sLine,iFin - 1,1) = "." Then iFin = iFin - 1
      Items(i) = Mid(sLine,iDeb,iFin - iDeb)
      i = i + 1 
    Loop Until i = 3
     
    MsgBox Items(0) & "  " & Items(1) & "  " & Items(2)
    et sinon il y a les expressions régulières (objet RegExp) mais bon...
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Par défaut
    Merci beaucoup Omen999, réponse rapide et efficace !

    J't'en dois une

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Par défaut
    Une alternative, un collègue m'a proposé ceci (le message étant bien entendu dans le objItem.Message) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    arrReturn = Split(objItem.Message, "was ")
    strDomain = left(arrReturn(1),Len(ArrReturn(1)) - 17)
    strUserLogon = UCase(Left(arrReturn(2),Len(ArrReturn(2)) - 19))   
    strUserClient = Left(arrReturn(3),Len(ArrReturn(3)) - 23)

    C'est plus court mais impose le calcul manuel des caractères.

  5. #5
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    ces 3 valeurs pouvant être de longueur différentes à chaque message.
    mais impose le calcul manuel des caractères.
    c'est curieux mais j'ai comme dans l'idée que tu auras un problème
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  6. #6
    Membre Expert
    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
    Par défaut
    salut,

    une autre variante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    msg = "A broken connection event has occurred on Session Id 13. The DomainName was TOMOO and the UserName was TOTOLITOTO. The ClientName was BOBBY and the ClientAddress was 10.18.18.18. The broken connection event source was 2 and event reason was 1."
     
    MsgBox GetInfo(msg)
     
    Function GetInfo(String)
       Dim rex : Set rex = New RegExp 
       rex.Pattern="was\s*([a-z_]+)\s*"
       rex.Global=True
       rex.IgnoreCase=True
       For Each data in rex.Execute(string)
         GetInfo=GetInfo & rex.replace(data.Value,"$1") & vbcrlf
       Next
    End Function

    Citation Envoyé par Beuns Voir le message
    Bonjour à tous,
    Je dois créer un script vbs (language tout nouveau pour moi)
    Si tu veux apprendre un nouveau langage je te conseille PowerShell qui est plus puissant et surtout que Vbscript n'est plus le chouchou de MS et sera selon quelques rumeur dans un futur proche un composant à télécharger...

  7. #7
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    héhé, l'objet regexp est difficile à vendre...
    une petite explication sur la définition du pattern serait
    la bienvenue pour tous ceux qui nous lisent
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  8. #8
    Membre Expert
    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
    Par défaut
    salut omen999


    was
    chaine litterale 'was'
    \s*
    zero ou plusieurs espaces
    (
    ouvrir les parenhèses pour capturer le bloc
    [a-z_]+
    composé de toute lettre ou du caractère underscore répéter une ou plusieurs fois
    )
    fermer les parenthèses pour la fin de la capture
    \s*
    zero ou plusieurs espaces

    je ne connais pas bien les RegExp's du moteur vbscript mais je crois qu'il sont limités et ne supportent ni les assertions, ni les les exceptions dans les rangées,.....en plus il y a beaucoup de bug avec..

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Par défaut
    c'est curieux mais j'ai comme dans l'idée que tu auras un problème
    Je te rassure Omen999, je me suis dit la même chose et j'ai gardé ta méthode qui me semblait plus "solide".

    Si tu veux apprendre un nouveau langage je te conseille PowerShell qui est plus puissant et surtout que Vbscript n'est plus le chouchou de MS et sera selon quelques rumeur dans un futur proche un composant à télécharger
    Merci pour l'info I'm_HERE. Pour l'instant je n'ai pas trop le choix sur le language, c'est le standard du client mais je vais jeter un coup d'oeil sur PowerShell, histoire de voir ce que ca donne.

  10. #10
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    je ne connais pas bien les RegExp's du moteur vbscript mais je crois qu'il sont limités et ne supportent ni les assertions, ni les les exceptions dans les rangées
    pour les assertions, je confirme, ni avant ni arrière

    en revanche, en quoi consiste les exceptions dans les rangées ?
    en plus il y a beaucoup de bug avec..
    jamais observé mais le contraire serait étonnant
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  11. #11
    Membre Expert
    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
    Par défaut
    Salut,


    Citation Envoyé par omen999 Voir le message
    en revanche, en quoi consiste les exceptions dans les rangées ?
    c'est pour faciliter l'utilisation des numeric/letter range:

    exemple:

    Matcher les consonnes d'une chaine de caractères:

    cette regexp va matcher toutes les lettres puis va exclure du resultat obtenu les voyelles YOUAIE

    c'est l'equivalent de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /[bcdfghjklmnpqrstvwxz]/i

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

Discussions similaires

  1. Extraction de chaine de caractères
    Par asterix76-rouen dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2006, 23h17
  2. Extraction de chaine
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 6
    Dernier message: 14/02/2006, 09h01
  3. Requete avec extraction de chaine
    Par bestall666 dans le forum Access
    Réponses: 8
    Dernier message: 04/02/2006, 18h17
  4. [String]Extraction de chaîne
    Par sangei dans le forum Langage
    Réponses: 6
    Dernier message: 19/12/2005, 11h25
  5. [XSLT] Extraction de chaine de caractere
    Par Hugo001 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 28/10/2004, 08h27

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