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 :

Stocker resultat execution tableau


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 17
    Points
    17
    Par défaut Stocker resultat execution tableau
    Re bonjour,
    voila j'ai suivi la FAQ de developpez.com
    et elle dis que l'on peut stocker resultat de l'execution d'un programme dans un tableau.
    Voici donc mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @sortie = `/usr/local/nagios/libexec/check_nrpe -H $hostname -c check_cpu -n`;
    print "$sortie[0] \n";
    print "$sortie[1] \n";
    print "$sortie[2] \n";
    print "$sortie[3] \n";
    print "$sortie[4] \n";
    Or mon résultat est du type
    OK : use 18 % idle : 82
    Et je voudrais stocker chaque mot dans une case...

    En gros, la question est peut-on definir un séparateur de champ (ici espace) qui me permettrai de stocker correctement mon resultat

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    Sinon tu stocke la sortie de ton exécution dans un scalaire et tu le split juste après ...
    "There are two major products that come out of Berkeley: LSD and UNIX.
    We don't believe this to be a coincidence."
    - Jeremy S. Anderson

    La FAQ Python
    Les cours et tutoriels pour apprendre Python
    Le Forum Python

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tout à fait, mais il s'agira d'une information globale, c'est-à-dire que la prochaine lecture de fichier se fera avec le même séparateur. C'est pourquoi je te recommande l'emploi de cette structure qui évite le problème en local()isant la modification du séparateur d'enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my @sortie;
    {
      local $/ = " ";
      @sortie = `/usr/local/nagios/libexec/check_nrpe -H $hostname -c check_cpu -n`; 
    }
     
    print "$sortie[0] \n"; 
    print "$sortie[1] \n"; 
    print "$sortie[2] \n"; 
    print "$sortie[3] \n"; 
    print "$sortie[4] \n";
    Par ailleurs, comme l'a fait remarquer getupa, une solution plus souple et sans-doute préférable est d'utiliser une construction de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my $ouput;
    my @sortie;
     
    $output = `/usr/local/nagios/libexec/check_nrpe -H $hostname -c check_cpu -n`; 
     
    @sortie = split /\s+/, $output;
    print "$sortie[0] \n"; 
    print "$sortie[1] \n"; 
    print "$sortie[2] \n"; 
    print "$sortie[3] \n"; 
    print "$sortie[4] \n";
    ou même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @sortie = split /\s+/, scalar(`/usr/local/nagios/libexec/check_nrpe -H $hostname -c check_cpu -n`);
    TIMTOWTDI comme on dit en Perl !

    --
    Jedaï

  4. #4
    Membre actif
    Inscrit en
    Février 2005
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 167
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par Jedai
    ou même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @sortie = split /\s+/, scalar(`/usr/local/nagios/libexec/check_nrpe -H $hostname -c check_cpu -n`);
    Le seul problème avec ça, si c'est un problème, est que tous les "mots" des lignes vont arriver à la queue-leu-leu et ce sera peut-être pas évident de savoir où on en est.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my @sortie;
    for my $ligne( `/usr/local/nagios/libexec/check_nrpe -H $hostname -c check_cpu -n` ) {
        chomp;
        push @sortie, [split];
    }
    Ici, chaque entrée de @sortie contient une ligne, découpé au mot par mot dans un array.

    N

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Oui mais d'après son exemple j'avais cru comprendre qu'il n'y avait qu'une seule ligne. Si on a plusieurs ligne, il vaut mieux effectivement faire comme propose Nematoad pour s'y retrouver, on peut aussi faire la même chose ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @sortie = map { [ split ] } `/usr/local/nagios/libexec/check_nrpe -H $hostname -c check_cpu -n`;
    TIMTOWTDI

    --
    Jedaï

  6. #6
    Membre actif
    Inscrit en
    Février 2005
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 167
    Points : 203
    Points
    203
    Par défaut
    il n'y aura pas de \n la-dedans ?

    N

  7. #7
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    split coupe sur les /\s+/ par défaut je crois, donc à priori, il ne devrait pas y avoir de \n (c'est compris dans \s) mais par contre il pourrait y avoir un champ vide, c'est à vérifier, mais c'est assez peu génant de toute façon.


    [EDIT] Après vérification il ne devrait pas y avoir de champ vide parasite à la fin.
    --
    Jedaï

Discussions similaires

  1. lire d'une base de données et stocker dans un tableau
    Par michael_MS dans le forum ASP.NET
    Réponses: 23
    Dernier message: 21/11/2008, 15h00
  2. lire d'une base de données et stocker dans un tableau
    Par michael_MS dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 19/11/2008, 11h10
  3. recuperer les variables d'un .txt pour les stocker dans un tableau du .fla
    Par Dryss51 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 19/04/2008, 09h14
  4. stocker resultat sql
    Par Alex35 dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/11/2007, 15h22
  5. Réponses: 3
    Dernier message: 31/08/2006, 16h11

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