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 :

Extraire et chaine de caractères


Sujet :

VBScript

  1. #1
    Membre régulier
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Points : 79
    Points
    79
    Par défaut Extraire et chaine de caractères
    Bonjour,

    je suis confronté à un problème depuis plusieurs jours, j'ai beau tout tenté, je ne trouve pas de solution a ce problème qui semble assez simple pourtant...

    Voila, j'ai un fichier qui contient ce genre 1 ou plusieurs lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\php\php.exe D:\IBR_TOOLS\php_depot\steria\sitescope\integration\integration_socle_technique.php --conf D:\IBR_TOOLS\conf_clients\sitescope\CUSTOMER_sitescope_serveurs_prod.xml --sitescope_utilise FRCP00VPD0040 --code_client INTEGRATION --methode_connexion WMI --verbose --fichier_fvs "D:\FVS_INTEGRATION\ngreder\FVS-CUSTOMER+-SYSTEM-WINDOWS-FRCPPROD0139-Fiche_de_Vie_Supervision.xls"  | findstr Exit >> \\frghcswsisv01\fvs_integration\ngreder\output.txt
    Voilà je voudrais extraire le nom du serveur qui se trouve ici (FRCPPROD0139):
    FVS-CUSTOMER+-SYSTEM-WINDOWS-FRCPPROD0139-Fiche_de_Vie_Supervision.xls
    Alors toutes les lignes ressemblent peu ou prou à ça, mais il peut y avoir des champs en moins dans la commande, et le nom du serveur peut être suivi ou nom du domaine, on ne peut donc pas partir sur une fonction Mid je pense. J'ai beau tester avec les regex, rien a faire la fonction Replace m'enlève la partie matchée, je veux tout l"inverse, je veux sortir que le nom du serveur, la méthode execute me génère une erreur...

    Voici mon code, le seul argument requis est le session name de l'utilisateur:
    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
    Set myRegExp = New RegExp
    myRegExp.IgnoreCase = True
    myRegExp.Global = False
    myRegExp.Pattern = "(WINDOWS|LINUX)-(.*)-"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("WScript.Shell")
    userprofile = WScript.Arguments.Item(0)
    dim filesys, text, readfile, contents, CI_name
    set filesys = CreateObject("Scripting.FileSystemObject") 
    Set oShell = WScript.CreateObject("WSCript.shell")
    set readfile = filesys.OpenTextFile("D:\FVS_Integration\" & userprofile & "\command_OO.txt", 1, false) 
    do while readfile.AtEndOfStream=false 
    contents = readfile.ReadLine
    wscript.echo contents
    Set output = objFSO.CreateTextFile("\\FRGHCSWSISV01\FVS_Integration\" & userprofile & "\output.txt", 1)
    set CI_name = myRegExp.Execute(contents)
    wscript.echo CI_name
    'oShell.run ("cmd /C " & contents)
    loop
    readfile.close
    J'ai tenté le regex.replace en utilisant les $1 pour renvoyer le premier match, mais malgré de nombreux exemples trouvés sur le net, cela ne fonctionne pas chez moi...
    Bref je n'ai plus d'idée...

    D'avance merci pour votre aide, et désolé de polluer le forum pour un truc aussi trivial mais je sèche là

  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 176
    Points
    17 176
    Par défaut
    Salut

    Le nom du serveur a l'air d'être formaté, 8 lettres majuscules suivies de 4 chiffres, entouré de -.
    Si c'est bien le cas, le Pattern est: "-[A-Z]{8,}[0-9]{4,}-".
    Sinon, le nom du serveur est il toujours composé de 12 caractères?
    Si oui, le Pattern est: "-............-"
    Tu récupères "-FRCPPROD0139-", un Replace(motTrouvé, "-", "", 1, -1, vbTextCompare) pour nettoyer ....
    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 régulier
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Points : 79
    Points
    79
    Par défaut
    Hello,

    merci d'avoir répondu

    alors non le nom du serveur est totalement aléatoire selon les clients, qui n'ont pas le même formalisme.

    J'ai testé ta fonction replace, mais je crois que mon problème vient du fait que myRegExp.Execute ne me renvoie rien du tout, si je fais un echo dans la foulée j'ai un Type mistmatch comme erreur. Je pense donc que ma fonction regex ne fonctionne pas, j'ai tenté avec ton pattern cela ne marche pas non plus.
    Alors soit j'ai mal compris le Execute et il me renvoie une donnée que je n'arrive pas a déterminer, soit il ne me renvoie rien du tout....

  4. #4
    Membre régulier
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Points : 79
    Points
    79
    Par défaut
    Okeyyyy j'avais mal lu ta fonction replace c'est pour faire le ménage des "-" de chaque coté du nom du CI. Mon problème c'est que je n'arrive pas a récup le nom du serveur....

  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 176
    Points
    17 176
    Par défaut
    Re
    Citation Envoyé par nicnictout Voir le message
    Bonjour,
    ...........
    Voila, j'ai un fichier qui contient ce genre 1 ou plusieurs lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\php\php.exe D:\IBR_TOOLS\php_depot\steria\sitescope\integration\integration_socle_technique.php --conf D:\IBR_TOOLS\conf_clients\sitescope\CUSTOMER_sitescope_serveurs_prod.xml --sitescope_utilise FRCP00VPD0040 --code_client INTEGRATION --methode_connexion WMI --verbose --fichier_fvs "D:\FVS_INTEGRATION\ngreder\FVS-CUSTOMER+-SYSTEM-WINDOWS-FRCPPROD0139-Fiche_de_Vie_Supervision.xls"  | findstr Exit >> \\frghcswsisv01\fvs_integration\ngreder\output.txt
    .......
    Pour arriver à un Pattern ou (une autre technique de recherche), il faudrait que tu nous mettes plusieurs lignes en exemple, au moins 3 seraient un minimum.
    J'ai l'impression que ton code donne une piste avec le début ou commencer la recherche, WINDOWS ou LINUX suivit d'un - et fini par un -
    Je pense qu'avec la fonction Instr cela devrait pouvoir se faire.
    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 régulier
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Points : 79
    Points
    79
    Par défaut
    Oui au temps pour moi en effet plusieurs exemples auraient été judicieux, voilà:

    C:\php\php.exe D:\IBR_TOOLS\php_depot\steria\sitescope\integration\integration_socle_technique.php --conf D:\IBR_TOOLS\conf_clients\sitescope\CUSTOMER1_sitescope_serveurs_prod.xml --sitescope_utilise PMON1APPV05.fr.sterianet --code_client INTEGRATION --methode_connexion WMI --verbose --fichier_fvs "D:\FVS_INTEGRATION\ngreder\FVS-CUSTOMER1-SYSTEM-WINDOWS-AFIOP12-Fiche_de_Vie_Supervision.xls" | findstr Exit >> \\frghcswsisv01\fvs_integration\ngreder\output.txt
    C:\php\php.exe D:\IBR_TOOLS\php_depot\steria\sitescope\integration\integration_socle_technique.php --conf D:\IBR_TOOLS\conf_clients\sitescope\CUSTOM2_sitescope_serveurs_prod.xml --sitescope_utilise FRCP00VPD0040 --code_client INTEGRATION --methode_connexion WMI --verbose --fichier_fvs "D:\FVS_INTEGRATION\ngreder\FVS-CUSTOM2+-SYSTEM-WINDOWS-FRCPPROD0139-Fiche_de_Vie_Supervision.xls" | findstr Exit >> \\frghcswsisv01\fvs_integration\ngreder\output.txt
    C:\php\php.exe D:\IBR_TOOLS\php_depot\steria\sitescope\integration\integration_socle_technique.php --conf D:\IBR_TOOLS\conf_clients\sitescope\CUST3_sitescope_serveurs_prod.xml --sitescope_utilise PROSIS020093 --code_client INTEGRATION --verbose --fichier_fvs "D:\FVS_INTEGRATION\ngreder\FVS-CUST3-SYSTEM-LINUX-VAL-VALCE3-NONE-Fiche_de_Vie_Supervision.xls" | findstr Exit >> \\frghcswsisv01\fvs_integration\ngreder\output.txt
    C:\php\php.exe D:\IBR_TOOLS\php_depot\steria\sitescope\integration\integration_socle_technique.php --conf D:\IBR_TOOLS\conf_clients\sitescope\CUST3_sitescope_serveurs_prod.xml --sitescope_utilise PROSIS010093 --code_client INTEGRATION --verbose --methode_connexion WMI --fichier_fvs "D:\FVS_INTEGRATION\ngreder\FVS-CUST3-SYSTEM-WINDOWS-PRESQL100095-PREORION-Fiche_de_Vie_Supervision.xls" | findstr Exit >> \\frghcswsisv01\fvs_integration\ngreder\output.txt

    Petite précision:
    FVS-CUST3-SYSTEM-WINDOWS-PRESQL100095-PREORION-Fiche_de_Vie_Supervision.xls
    le champs CUST3 est le nom du client, donc il est variable et pas de taille identique selon le client. J'ai donc fait en sorte d'avoir 3 motifs différents.

    Je souhaite sortir le nom du CI pour le mettre dans un fichier d'output avant le code retour de la commande d'intégration, donc si a la rigueur s'affiche dans mon fichier WINDOWS-CI_Name- en brute, je vais pas faire mon difficile, ca sera toujours plus propre que de réinjecter toute la ligne de commande comme je le fais actuellement, ce qui n'est pas très display friendly.


    Encore merci pour ton aide

  7. #7
    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 176
    Points
    17 176
    Par défaut
    Re

    Avec la méthode Instr
    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
    Function RechercheMot(Phrase)
    Dim MsG, T, Recherche, Deb, Fin
     
    Recherche = "WINDOWS-"
    T = InStr(1, Phrase, Recherche, vbTextCompare)
    If T <> 0 Then
        Deb = T + Len(Recherche)
        Else
        Recherche = "LINUX-"
        T = InStr(1, Phrase, Recherche, vbTextCompare)
        If T <> 0 Then Deb = T + Len(Recherche)
    End If
    If Deb <> 0 Then
        Recherche = "-"
        T = InStr(Deb, Phrase, Recherche, vbTextCompare)
        If T <> 0 Then
            Fin = T
            MsG = Mid(Phrase, Deb, Fin - Deb)
            Else
            MsG = "début du mot trouvé, mais pas la fin"
        End If
        Else
        MsG = "mot introuvable"
    End If
    RechercheMot = MsG
    End Function
     
     
     
    Dim LeText, Recupe
    LeText = "C:\php\php.exe D:\IBR_TOOLS\php_depot\steria\sitescope\integration\integration_socle_technique.php --conf D:\IBR_TOOLS\conf_clients\sitescope\CUSTOMER_sitescope_serveurs_prod.xml --sitescope_utilise FRCP00VPD0040 --code_client INTEGRATION --methode_connexion WMI --verbose --fichier_fvs ""D:\FVS_INTEGRATION\ngreder\FVS-CUSTOMER+-SYSTEM-WINDOWS-FRCPPROD0139-Fiche_de_Vie_Supervision.xls""  | findstr Exit >> \\frghcswsisv01\fvs_integration\ngreder\output.txt"
    ' Appel de la fonction
    Recupe = RechercheMot(LeText)
    'vérification
    MsgBox Recupe, vbInformation, "Résultat"
    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 ← ← 👈

  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 176
    Points
    17 176
    Par défaut
    Re

    Un petit dernier
    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
    Function ChargeFichier()
    Dim FSO, LeFichier
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set LeFichier = FSO.OpenTextFile("C:\PersoFrancis\Command_OO.txt", 1)
    ChargeFichier = LeFichier.ReadAll: LeFichier.Close
    Set LeFichier = Nothing: Set FSO = Nothing
    End Function
    '-----------------------------------------------------------------------------------
     
    ' programme principal
    Dim LeText, TblLigne, Nbr, RetouR
    LeText = ChargeFichier
    TblLigne = Split(LeText, vbNewLine)
    For Nbr = 0 To UBound(TblLigne)
        If TblLigne(Nbr) <> "" Then
            RetouR = RechercheMot(TblLigne(Nbr), "WINDOWS-,LINUX-VAL-")
            If RetouR <> "" Then MsgBox RetouR, vbInformation, "Resultat"
        End If
    Next
     
    '-----------------------------------------------------------------------------------
    Function RechercheMot(Phrase, RechercherQuoi)
    Dim MsG, T, U, TblMotRech, Recherche, Deb, Fin
    TblMotRech = Split(RechercherQuoi, ",")
    For T = 0 To UBound(TblMotRech)
        Recherche = TblMotRech(T)
        U = InStr(1, Phrase, Recherche, vbTextCompare)
        If U <> 0 Then
            Deb = U + Len(Recherche)
            Recherche = "-"
            U = InStr(Deb, Phrase, Recherche, vbTextCompare)
            If U <> 0 Then
                Fin = U
                MsG = Mid(Phrase, Deb, Fin - Deb)
            Exit For
            End If
        End If
    Next
    RechercheMot = MsG
    End Function
    Prés requis, que le mot recherché est précédé par "WINDOWS-" ou "LINUX-VAL-" et qu'il finisse par "-".
    Dans l'appel de la fonction RechercheMot, le 1° paramètre est la ligne tirée du fichier, le 2° paramètre est le/les mots à rechercher séparé chacun par une virgule(si 1 seul mot, pas de virgule).
    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
    Membre régulier
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Points : 79
    Points
    79
    Par défaut
    Hello,

    merci beaucoup de ton aide, je suis désolé j'ai pas pu te faire un retour hier, je suis sur une urgence de prod depuis. Je teste ça dès que possible pour te faire un retour

    en tout cas encore merci de ton aide

Discussions similaires

  1. Extraire des chaines de caractères dans un fichier
    Par cycy75 dans le forum Scripts/Batch
    Réponses: 16
    Dernier message: 27/03/2009, 14h56
  2. extraire une chaine de caractères
    Par Stéph utilisateur d'acces dans le forum Excel
    Réponses: 6
    Dernier message: 06/03/2009, 13h15
  3. Extraire une chaine de caractères
    Par Sam_Dalembert dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/08/2008, 11h58
  4. extraire une chaine de caractères
    Par nopnop dans le forum C
    Réponses: 11
    Dernier message: 10/04/2007, 17h21
  5. Extraire une chaine de caractéres
    Par fatati dans le forum Oracle
    Réponses: 4
    Dernier message: 30/01/2007, 14h39

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