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

Langage Perl Discussion :

[debutant] Recuperer et parser un echo d'un .bat


Sujet :

Langage Perl

  1. #1
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut [debutant] Recuperer et parser un echo d'un .bat
    Bonjour,

    Dans le cadre d'un developpement, j'ai a ma disposition un .bat dont le rôle et de lister plusieurs chaine sur l'ecran.

    Un appel a ce .bat fait donc :

    xxxxxx xxxxxxx
    xxxxxx yyyyy
    xxxxxx xxxxxxx
    xxxxxx yyyyy
    Ce que j'essaye de faire, c'est de compter le nombre de "yyyyyy".
    Je ne dois pas passer par un fichier temporaire (donc exit la redirection) et le .bat ne repondait pas a mes attentes.

    Je me suis donc orienté sur conseil vers perl.

    Cependant, malgrès beaucoup de recherche google, je n'arrive toujours pas a réussir.
    J'ai pensé a faire un pipe | et d'envoyer le tout dans un simple grep (comme en shell) mais pas moyen.

    Je viens donc vous demander de l'aide s'il vous plait.
    Avez vous une piste ou une fonction qui pourrait réaliser en partie ou totalement le script ?

    Merci de votre lecture

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je ne saisis pas tout. Pourrais-tu préciser l'architecture système : windows, DOS, cygwin, Linux ?

    Tu indiques qu'un |grep ne fonctionne pas. Peux-tu préciser pour quelle raison ?
    Tu as envisagé perl, est-ce en utilisant un pipe du style mon_appli.bat | perl mon_grep_perl.pl ?
    Quel est le format de yyyyy : texte constant, motif de texte, autre ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut
    Désolé.

    Effectivement, je suis sous windows, total débutant en perl.

    la chaine "yyyyy" que je cherche a matché est du texte constante.

    Le grep ne fonctionne pas car j'essaye de le faire comme en shell, ce qui semble ne pas être le fonctionnement normal en perl.

    En farfouillant encore, je suis tombé sur
    http://articles.mongueurs.net/magazines/linuxmag55.html
    qui semble detenir quelque reponse (notamment avec ``).
    Reste a savoir si je peux le faire en lancant un .bat

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pourquoi ne peux-tu pas utiliser un pipe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_script.bat | perl -ne 'print if /yyyyy/'
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut
    Ce n'est pas que je ne peux pas, c'est que je ne sais pas.
    On m'a donné ca a faire il y a quelque jour, c'est a ce moment que je me suis mis au perl.

    j'ai essayer ce que tu m'as donné en ligne de commande DOS.

    J'ai recolté ceci :
    C:\WINDOWS>"C:\...\test.bat" | perl -ne 'print
    if /yyyyy/'
    Can't find string terminator "'" anywhere before EOF at -e line 1.
    Mon .bat est comme ceci :

    @echo off

    echo "Bertand dumoulin"
    echo "bernard strapin"
    echo "Julie koala"
    echo "nom prenom"
    echo "Bertand pasfrere"
    echo "Bertand adert"
    Mon but est de savoir combien il y a de Bertrand en appelant ce .bat (le retour du .bat ne peut m'aider).
    J'ai aussi eu comme consigne de ne pas passer par un fichier temporaire (donc exit la redirection + findstr en batch).

    C'est la que perl entre en jeu.
    Je vais voir ce que veux dire -ne en argument de perl.

    Merci de me consacrer de ton temps, je dois avoier être perdu, c'est nouveau pour moi.
    Mais en perseverant et grâce a vous, je vais bien finir par y arriver

    EDIT : grâe au lien donné precedemment, j'ai pu effectué une partie de ce que je voulais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    use strict;
    use warnings;
     
    my(@var) = `"C:\\...\\test.bat"`;
     
    foreach my $val (@var)
    {
    	print($val."\n");
    }
    voila, ca a l'air tout simple mais c'est plutot dur à trouver
    Il me reste le grep, mais je pense pouvoir y arriver maintenant que j'ai une chaine de caractere dans $val.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 221
    Points : 207
    Points
    207
    Par défaut
    il te suffit d'utiliser ce script:

    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
     
    #!C:\strawberry\perl\bin\perl -w
     
    use strict;
    my $compteur = 0;
     
    # on boucle sur tout ce qui est envoyé au script perl via le pipe
    while (<STDIN>) {
      # si la ligne reçue contient "Bertand"
      if ( $_ =~ m/Bertand/ )
      {
            # on incrémente le compteur
      	$compteur++;
      }
    }
     
    print "Il y a $compteur Bertand\n";
    et il se lance comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom_script.bat | perl nom_script_perl.pl

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pour utiliser les unilignes en perl sous DOS (je préfère toujours utiliser un fenêtre bash sous cygwin), tu peux utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_script.bat | perl -ne "print if /bertrand/i"
    (double quotes au lieu de simples quotes).

    Ce script fait un grep, c'est à dire qu'il t'affiche les lignes avec bertrand.

    Si tu souhaites juste les compter, voici une méthode également uniligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -e "$count = grep /bertrand/i, qx(mon_script.bat);print $count"
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 221
    Points : 207
    Points
    207
    Par défaut
    avec une console bash (cygwin par exemple), y'a même pas besoin du perl:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./echo.bat | grep Bertand | wc -l

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je n'ai pas osé le proposer, histoire de laisser SofEvans découvrir perl
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  10. #10
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut
    Bonjour,

    Merci à tous pour vos réponses.
    J'ai réussi à me débrouiller avec les lignes de code que j'ai mits en édit, c'etait plus du tatonnage qu'autre choses.

    Je garde en memoire ce que vous m'avais conseillé, c'est très interressant car je debute donc forcement, je connais pas ^^

    Merci beaucoup pour votre contribution.
    Je ne manquerai pas de découvrir les joies du perl.


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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/05/2005, 13h08
  2. [debutant] recuperer l'url d'une frame
    Par sidero dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/04/2005, 11h52
  3. [ Debutant ] Recuperer un nom de fichier
    Par 13obscur dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 21/02/2005, 09h59
  4. [debutant] Récupérer un intervalle de temps
    Par xlurp dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 28/10/2004, 15h48
  5. [JSP][Debutant]recuperer un objet d'une page a l'autre
    Par zozolh2 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 17/05/2004, 10h25

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