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 :

format de sortie


Sujet :

Langage Perl

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 87
    Par défaut format de sortie
    Bonjour,

    Je dois créer un script dont le but est de récupérer les @mac sur un équipement.
    Ceci afin de comparer une situation avant et après un instant T.

    Rien de complexe en soit, j'ai juste un petit souci lorsqu'il y a plusieurs @mac sur un même port. Je les récupère bien toutes, mais j'ai un souci d'affichage. De formatage plutôt.
    J'aimerais avoir ce format de sortie:
    slot/port|@mac|vlan

    avec @mac correspondant à une liste d'@mac, classée (genre mac1/mac3/mac2)
    et vlan une liste de vlan, classée en fonction des @mac. (vlan1/vlan3/vlan2)

    J'ai essayé plusieurs méthodes, mais je n'arrive pas au résultat voulu:

    METODE 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $mac[$i] = ($exp->matchlist())[0];
    $vlan[$i] = ($exp->matchlist())[1];
    @donnees = sort (@mac);
    Les @mac sont bien classées, mais je ne peux retrouver facilement le vlan correspondant ensuite.

    METHODE 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $donnees->{$compteur_mac}={'mac'=>($exp->matchlist())[0],
                              'vlan'=>($exp->matchlist())[1]};
    me donne un résultat du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $VAR1 = {
              '1' => {
                       'vlan' => '2128',
                       'mac' => 'cc5d-4ec7-4082'
                     },
              '0' => {
                       'vlan' => '97',
                       'mac' => '00c0-8916-d65b'
                     }
            };
    Comment classer du coup en fonction des mac?

    METHODE 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $donnees[$compteur_mac] = ($exp->matchlist())[0] .
                               "\t".($exp->matchlist())[1];
     
    my @lines = map { chomp; [split(/\t/, $_)] } @donnees;
    print map {"@$_\n"} sort { $a->[1] <=> $b->[1] } @lines;
    Ce résultat me plait le plus pour le moment, il faut juste trouver comment concaténer les mac, puis les vlans ensemble


    Auriez vous une idée de comment faire svp?
    Merci d'avance,

  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 : 59
    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
    Par défaut
    A partir de la structure créée par la méthode 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $donnees->{$compteur_mac}={'mac'=>($exp->matchlist())[0],
                              'vlan'=>($exp->matchlist())[1]};
    Tu peux trier directement ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach my $cle_donnee (sort { $donnees->{$a}->{mac} cmp $donnees->{$b} } keys %$donnees) {
      my $donnee = $donnees{$cle_donnee};
      #...
    }
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach my $donnees (sort { $a->{mac} cmp $b->{mac} } values %donnees) {
      # ...
    }
    (je précise que je n'ai pas testé la syntaxe)

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 87
    Par défaut
    yes

    Voici le code final:

    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
    $exp->expect(10,
          [ qr/$critere/ =>
            sub {
                $donnees->{$compteur_mac}={'mac'=>($exp->matchlist())[0],
                                          'vlan'=>($exp->matchlist())[1]};
                $compteur_mac++;
                exp_continue;
            }
          ],
          [ qr/$host#/ =>
            sub {
               foreach my $cle_donnee (sort { $donnees->{$a}->{mac} cmp 
                                              $donnees->{$b}->{mac} 
                                            } keys %$donnees) {
                   $mac .= $donnees->{$cle_donnee}->{mac}." ";
                   $vlan .= $donnees->{$cle_donnee}->{vlan}." ";
               }
               print "$mac|$vlan\n";
            }
          ],
    ce qui me donne en sortie, si on reprend mon exemple plus haut:

    0/18/0|00c0-8916-d65b cc5d-4ec7-4082 |97 2128
    Merci beaucoup

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

Discussions similaires

  1. Format de sortie
    Par xtitof dans le forum Fortran
    Réponses: 2
    Dernier message: 20/03/2007, 11h36
  2. [Sqlplus] Format de sortie
    Par cheung dans le forum Sql*Plus
    Réponses: 7
    Dernier message: 03/11/2006, 09h28
  3. Réponses: 8
    Dernier message: 15/06/2006, 20h56
  4. [VB6] debutant format de sortie d un fichier
    Par Slumpy dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/05/2006, 21h49
  5. format de sortie commande \pset
    Par Alesk dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 30/01/2006, 14h48

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