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 chaine de caractère entre deux balises.


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Extraction chaine de caractère entre deux balises.
    Bonjour,

    J’ai une tache planifiée qui lance une requête de 10 pings sur une adresse IP toutes les minutes et qui génère un fichier log.
    J’aimerais récupérer la date et l’heure des requêtes qui ont un maximum de 100 MS.

    Voici à quoi ressemble le fichier de log :

    =============START===============
    09/10/2017 12:10:00,96

    Envoi d'une requˆte 'Ping' 192.168.141.10 avec 32 octets de donn‚esÿ:
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128

    Statistiques Ping pour 192.168.141.10:
    Paquetsÿ: envoy‚s = 10, re‡us = 10, perdus = 0 (perte 0%),
    Dur‚e approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms
    ==============END==============
    =============START===============
    09/10/2017 12:11:59,01

    Envoi d'une requˆte 'Ping' 192.168.141.10 avec 32 octets de donn‚esÿ:
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128

    Statistiques Ping pour 192.168.141.10:
    Paquetsÿ: envoy‚s = 10, re‡us = 10, perdus = 0 (perte 0%),
    Dur‚e approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms
    ==============END==============
    Voici ce que j’ai tenté :

    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
    OPTION Explicit
     
    Dim fichier_lecture_1, fichier_lecture_2
    Dim BaliseDebut, BaliseFin
    Dim DebutOu, FinOu
    Dim chaine
    Dim fso
     
    fichier_lecture_1 = "latence.log"
     
    BaliseDebut = "Maximum = "
    BaliseFin = ", Moyenne"
     
    DebutOu = 1
     
    Set fso = CreateObject("Scripting.FileSystemObject") 
    set fichier_lecture_2 = fso.opentextfile(fichier_lecture_1, 1, true)
     
    do until fichier_lecture_2.atendofstream 
    	chaine = fichier_lecture_2.readline()
    	if InStr(DebutOu, chaine, BaliseDebut) > 0 Then
    		DebutOu = DebutOu + Len(BaliseDebut)
    		FinOu = DebutOu
    		FinOu = InStr(FinOu, chaine, BaliseFin)
    	end if
    Loop
     
    fichier_lecture_2.close 
    set fichier_lecture_2 = nothing
    set fso = nothing 
     
    MsgBox Mid(chaine, DebutOu, FinOu - DebutOu)
    Pour le moment j’ai un message box vide !

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

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 127
    Par défaut
    Salut
    Une façon de procéder
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Dim fichier_lecture_1, fichier_lecture_2
    Dim BaliseDebut, BaliseFin
    Dim DebutOu, FinOu
    Dim chaine
    Dim fso
    fichier_lecture_1 = "latence.log"
     
    BaliseDebut = "Maximum = "
    BaliseFin = ", Moyenne"
     
    DebutOu = 1
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fichier_lecture_2 = fso.opentextfile(fichier_lecture_1, 1)
     
    Dim CtnFichier, TblChapitre, TblLgn, Recup, T
    CtnFichier = fichier_lecture_2.ReadAll
    fichier_lecture_2.Close
    Set fichier_lecture_2 = Nothing
    Set fso = Nothing
    TblChapitre = Split(CtnFichier, "==============END==============", -1, vbTextCompare) ' découpe en un tableau de chaque Ping
    'MsgBox TblChapitre(0) 'partie d'1 Ping
    For T = 0 To UBound(TblChapitre) - 1
        DebutOu = InStr(1, TblChapitre(T), BaliseDebut)
        If DebutOu > 0 Then ' DebutOu a été trouvé
            DebutOu = DebutOu + Len(BaliseDebut)
            FinOu = DebutOu
            FinOu = InStr(FinOu, TblChapitre(T), BaliseFin)
            Recup = Mid(TblChapitre(T), DebutOu, (FinOu-2) - DebutOu) 'récupération du chiffre (tempo Maximum) pour ce Ping
            If Recup >= 100 Then
                TblLgn = Split(TblChapitre(T), vbNewLine, -1, vbTextCompare) ' découpe en un tableau de chaque ligne du chapitre d'1 Ping
                If chaine <> "" Then chaine = chaine & "--------------------------------" & vbNewLine
                chaine = chaine & TblLgn(2) & vbNewLine & _
                                  TblLgn(16) & vbNewLine & _
                                  TblLgn(17) & vbNewLine & _
                                  TblLgn(19)
            End If
        End If
     
    Next
    'Do Until fichier_lecture_2.atendofstream
    '    chaine = fichier_lecture_2.readline()
    '    If InStr(DebutOu, chaine, BaliseDebut) > 0 Then
    '        DebutOu = DebutOu + Len(BaliseDebut)
    '        FinOu = DebutOu
    '        FinOu = InStr(FinOu, chaine, BaliseFin)
    '    End If
    'Loop
     
    'fichier_lecture_2.Close
    'Set fichier_lecture_2 = Nothing
    'Set fso = Nothing
    'MsgBox Mid(chaine, DebutOu, FinOu - DebutOu)
    MsgBox chaine
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci ProgElecT
    Dans l’état actuel le code me retourne un MsgBox Vide.

    En activant le MsgBox TblChapitre(0) ligne 22 j’ai bien le tableau d’un sicle de ping.

    En Ajoutant un MsgBox Recup ligne 38 j’obtiens bien la durée Maximum des boucles en millisecondes.

    En passant une valeur Maximum a plus de 100MS dans le fichier de log, j’ai le message suivant :
    Paquetsÿ: envoy‚s = 10, re‡us = 10, perdus = 0 (perte 0%),
    Dur‚e approximative des boucles en millisecondes :

    Peut on essayer de reprendre l’heure et la date du tableau de ping concerné et la valeur ?

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

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 127
    Par défaut
    La seule modification ligne 32 du code pour améliorer le visu du MsgBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                If chaine <> "" Then chaine = chaine & vbNewLine & "--------------------------------" & vbNewLine
    Peut être le codage de ton fichier .log car les caractères accentués ne sont pas bien rendu, le mien a été enregistré en ANSI.
    Contenu du fichier:
    =============START===============
    09/10/2017 12:10:00,96

    Envoi d'une requˆte 'Ping' 192.168.141.10 avec 32 octets de donn‚esÿ:
    R‚ponse de 192.168.141.10ÿ: octets=3t2 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: ocets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128

    Statistiques Ping pour 192.168.141.10:
    Paquetsÿ: envoy‚s = 10, re‡us = 10, perdus = 0 (perte 0%),
    Dur‚e approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms
    ==============END==============
    =============START===============
    09/10/2017 12:11:59,01

    Envoi d'une requˆte 'Ping' 192.168.141.10 avec 32 octets de donn‚esÿ:
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128

    Statistiques Ping pour 192.168.141.10:
    Paquetsÿ: envoy‚s = 10, re‡us = 10, perdus = 0 (perte 0%),
    Dur‚e approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 100ms, Moyenne = 0ms
    ==============END==============
    =============START===============
    09/10/2017 12:11:59,01

    Envoi d'une requˆte 'Ping' 192.168.141.10 avec 32 octets de donn‚esÿ:
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128

    Statistiques Ping pour 192.168.141.10:
    Paquetsÿ: envoy‚s = 10, re‡us = 10, perdus = 0 (perte 0%),
    Dur‚e approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 99ms, Moyenne = 0ms
    ==============END==============
    =============START===============
    09/10/2017 12:11:59,01

    Envoi d'une requˆte 'Ping' 192.168.141.10 avec 32 octets de donn‚esÿ:
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128
    R‚ponse de 192.168.141.10ÿ: octets=32 temps<1ms TTL=128

    Statistiques Ping pour 192.168.141.10:
    Paquetsÿ: envoy‚s = 10, re‡us = 10, perdus = 0 (perte 0%),
    Dur‚e approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 200ms, Moyenne = 0ms
    ==============END==============
    Le MsgBox
    Images attachées Images attachées  
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bien vue pour l’encodage AINSI.
    Vu que ma tache planifiée va tourner toute une semaine, à raison d’un sicle de 10 pings par minute.
    J’ai modifié l’enregistrement du résultat vers un fichier « rapport.txt ».
    Ma modification fonctionne, mais est-elle bien gérée et propre (ouverture, fermeture, nettoyage etc..)

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Option Explicit
     
    Dim fichier_lecture_1, fichier_lecture_2
    Dim BaliseDebut, BaliseFin
    Dim DebutOu, FinOu
    Dim chaine
    Dim fso
    Dim fichier_ecriture_1, fichier_ecriture_2
     
    fichier_lecture_1 = "latence.log"
    fichier_ecriture_1 = "rapport.txt"
     
     
    BaliseDebut = "Maximum = "
    BaliseFin = ", Moyenne"
     
    DebutOu = 1
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fichier_lecture_2 = fso.opentextfile(fichier_lecture_1, 1)
    Set fichier_ecriture_2 = fso.CreateTextFile(fichier_ecriture_1,True)
     
    Dim CtnFichier, TblChapitre, TblLgn, Recup, T
     
    CtnFichier = fichier_lecture_2.ReadAll
    fichier_lecture_2.Close
    Set fichier_lecture_2 = Nothing
    Set fso = Nothing
    TblChapitre = Split(CtnFichier, "==============END==============", -1, vbTextCompare) ' découpe en un tableau de chaque Ping
    'MsgBox TblChapitre(0) 'partie d'1 Ping
    For T = 0 To UBound(TblChapitre) - 1
        DebutOu = InStr(1, TblChapitre(T), BaliseDebut)
        If DebutOu > 0 Then ' DebutOu a été trouvé
            DebutOu = DebutOu + Len(BaliseDebut)
            FinOu = DebutOu
            FinOu = InStr(FinOu, TblChapitre(T), BaliseFin)
            Recup = Mid(TblChapitre(T), DebutOu, (FinOu-2) - DebutOu) 'récupération du chiffre (tempo Maximum) pour ce Ping
            If Recup >= 100 Then
                TblLgn = Split(TblChapitre(T), vbNewLine, -1, vbTextCompare) ' découpe en un tableau de chaque ligne du chapitre d'1 Ping
    	    If chaine <> "" Then chaine = chaine & vbNewLine & "--------------------------------" & vbNewLine
                chaine = chaine & TblLgn(2) & vbNewLine & _
                                  TblLgn(16) & vbNewLine & _
                                  TblLgn(17) & vbNewLine & _
                                  TblLgn(19)
            End If
        End If
     
    Next
     
    fichier_ecriture_2.write chaine
    fichier_ecriture_2.close

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

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 127
    Par défaut
    La der de der
    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
    34
    35
    36
    37
    38
    39
    40
    41
    Option Explicit
     
    Dim fso, fichier
    Dim BaliseDebut, BaliseFin
    Dim DebutOu, FinOu
    Dim TblChapitre, TblLgn, Recup, T
    Dim chaine
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fichier = fso.opentextfile("latence.log", 1)
    TblChapitre = Split(fichier.ReadAll, "==============END==============", -1, vbTextCompare)
    fichier.Close
    Set fichier = Nothing
     
    BaliseDebut = "Maximum = "
    BaliseFin = ", Moyenne"
    For T = 0 To UBound(TblChapitre) - 1
        DebutOu = InStr(1, TblChapitre(T), BaliseDebut)
        If DebutOu <> 0 Then ' DebutOu a été trouvé
            DebutOu = DebutOu + Len(BaliseDebut)
            FinOu = DebutOu
            FinOu = InStr(FinOu, TblChapitre(T), BaliseFin)
            Recup = Mid(TblChapitre(T), DebutOu, (FinOu-2) - DebutOu) 'récupération du chiffre (tempo Maximum) pour ce Ping
            If Recup >= 100 Then
                TblLgn = Split(TblChapitre(T), vbNewLine, -1, vbTextCompare) ' découpe en un tableau de chaque ligne du chapitre d'1 Ping
    	    If chaine <> "" Then chaine = chaine & vbNewLine & "--------------------------------" & vbNewLine
                chaine = chaine & TblLgn(2) & vbNewLine & _
                                  TblLgn(16) & vbNewLine & _
                                  TblLgn(17) & vbNewLine & _
                                  TblLgn(19)
            End If
        End If
    Next
     
    If chaine = "" then chaine = "Aucun dépassement maxi de plus de 100ms"
    Set fichier = fso.CreateTextFile("rapport.txt",True)
    fichier.write chaine
    fichier.Close
    Set fichier = Nothing
    Set fso = Nothing
    MsgBox "Fait"
    A par la dernière ligne que tu pourras supprimer.
    Le code est minimaliste:
    • Inutile d'avoir des variables pour un contenu qui n'est utilisé qu'une seul fois, autant le mettre en dur directement dans le code.
    • Certaines variables peuvent être recyclées.
    • Le contenu de la variable est intéressant à être remplis près de l'endroit du code ou elle va être utilisée.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

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

Discussions similaires

  1. Extraction chaine de caractères entre deux |
    Par urbanspike dans le forum Débuter
    Réponses: 3
    Dernier message: 04/10/2012, 16h46
  2. Remplacer une chaine de caractere entre deux balise
    Par xyrox dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2010, 14h11
  3. Réponses: 3
    Dernier message: 11/10/2010, 16h54
  4. Réponses: 4
    Dernier message: 27/08/2010, 04h57
  5. [RegEx] Extraction de texte situé entre deux balises
    Par morpho365 dans le forum Langage
    Réponses: 7
    Dernier message: 27/03/2007, 18h18

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