Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 28
  1. #1
    Futur Membre du Club
    Inscrit en
    juillet 2009
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 184
    Points : 18
    Points
    18

    Par défaut récupérer valeurs dans variables

    Bonsoir,

    Dans mon script PERL je voudrais récupèrer et afficher certaines valeurs stocké dans une variable.

    La variable est retourné de cette façon :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    N°           Valeur1-1           Valeur2-1          Valeur3-1        Valeur4-1
    id0/1         1370380983         224275        5977182       11519416
    id0/2         2950137424       10842680        5901202       11460799
     
    N°           Valeur1-2           Valeur2-2          Valeur3-2        Valeur4-2
    id0/1         1092839685         132161        5280599        9771119
    id0/2         35382434282       89595306        1172398         933271
    Je cherche à afficher le N° id0/2 et récupérer les valeurs Valeur1-1 et Valeur1-2.

    Je sèche complétement

    Merci pour le coup de pouce

  2. #2
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    Par défaut

    Qu'appelles-tu "quelques valeurs stocké dans une variable" ?
    Tu veux analyser le fichier texte que tu as mis en exemple et récupérer une valeur à l'intersection d'une ligne et d'une colonne ?
    Si oui, pourrais-tu indiquer quel est le séparateur de colonne ?
    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é
    Using strict and warnings is good for you.

  3. #3
    Futur Membre du Club
    Inscrit en
    juillet 2009
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 184
    Points : 18
    Points
    18

    Par défaut

    Bonsoir Philou67430,

    Non en fait c'est le résultat d'une commande que je place dans une variable.

    Le sépateur est plusieurs espace (@res=split(/ +/,$command)

  4. #4
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    Par défaut

    J'ai toujours du mal à comprendre. Tu as un début de script écrit ? quels sont les données d'entrée du script (paramètre d'appel) ?
    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é
    Using strict and warnings is good for you.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    octobre 2011
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2011
    Messages : 73
    Points : 76
    Points
    76

    Par défaut

    j'imagine que si tu rajoutes ceci à ton code tu trouveras toi même la réponse à ta question :

    Code :
    1
    2
    3
    4
      use Data::Dumper;
    #ton code
    @res=split(/ +/,$command);
    print Dumper(@test);

  6. #6
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    Par défaut

    Je comprends encore moins ton message, magicshark
    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é
    Using strict and warnings is good for you.

  7. #7
    Futur Membre du Club
    Inscrit en
    juillet 2009
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 184
    Points : 18
    Points
    18

    Par défaut

    @magicshark

    Oula En fait Dumper place bien les valeurs dans les variables... Mais...

    Comment récupérer les valeurs dans les variables car sur le parcours Dumper à créé 2467 variables

    Compliqué pour aller chercher la bonne valeur là.

    Code :
    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
     
    id0/2';
    $VAR2435 = '';
    $VAR2436 = '';
    $VAR2437 = '';
    $VAR2438 = '';
    $VAR2439 = '';
    $VAR2440 = '';
    $VAR2441 = '';
    $VAR2442 = '39175893979';
    $VAR2443 = '';
    $VAR2444 = '';
    $VAR2445 = '';
    $VAR2446 = '';
    $VAR2447 = '';
    $VAR2448 = '';
    $VAR2449 = '94308410';
    $VAR2450 = '';
    $VAR2451 = '';
    $VAR2452 = '';
    $VAR2453 = '';
    $VAR2454 = '';
    $VAR2455 = '';
    $VAR2456 = '';
    $VAR2457 = '1188042';
    $VAR2458 = '';
    $VAR2459 = '';
    $VAR2460 = '';
    $VAR2461 = '';
    $VAR2462 = '';
    $VAR2463 = '';
    $VAR2464 = '';
    $VAR2465 = '';
    $VAR2466 = '943957';
    $VAR2467 = '
    @Philou67430
    quels sont les données d'entrée du script (paramètre d'appel) ?
    Mon script Perl établi une connexion SSH sur un serveur et lance une commande. Le retour de la commande est stocké dans ma variable pour pouvoir interpréter les résultats.

  8. #8
    Futur Membre du Club
    Inscrit en
    juillet 2009
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 184
    Points : 18
    Points
    18

    Par défaut

    Autant pour moi magicshark

    En fait je n'avais pas le bon split (/ / au lieu de / +/)

    Donc maintenant j'ai 276 variables...

    Code :
    1
    2
    3
    4
    5
    6
    id0/2';
    $VAR272 = '39183049336';
    $VAR273 = '94325734';
    $VAR274 = '1188159';
    $VAR275 = '944087';
    $VAR276 = '
    Le problème est comment faire pour accèder a la valeur '39183049336' ??

  9. #9
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    Par défaut

    Selon moi, tu dois analyser ligne à ligne ton résultat de la commande ssh, tout en renseignant un hash de hash comme un tableau à 2 dimensions dont la première clé est la première colonne (en oubliant les lignes de header) et la deuxième clé est la 1ere ligne de header, sauf la 1ere colonne).

    Peut-être quelque chose comme :
    Code :
    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use feature qw(:5.10);
    use List::MoreUtils qw(pairwise);
     
    my @ssh_return = split /\n/, <<'DATA';
    N°           Valeur1-1           Valeur2-1          Valeur3-1        Valeur4-1
    id0/1         1370380983         224275        5977182       11519416
    id0/2         2950137424       10842680        5901202       11460799
     
    N°           Valeur1-2           Valeur2-2          Valeur3-2        Valeur4-2
    id0/1         1092839685         132161        5280599        9771119
    id0/2         35382434282       89595306        1172398         933271
    DATA
     
    my %var;
    our ($a, $b);
     
    my @col_names;
    foreach my $line (@ssh_return) {
      chomp $line;
      if ($line =~ /^N°/) {
        @col_names = split /\s+/, $line;
        shift @col_names;
      }
      else {
        if (my @col_values = split /\s+/, $line) {
          my $key = shift @col_values;
          $var{$key} = { pairwise { $a => $b } @col_names, @col_values };
        }
      }
    }
     
    say "Key id0/1, Valeur1-2: ", $var{"id0/1"}->{"Valeur1-2"};
    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é
    Using strict and warnings is good for you.

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    octobre 2011
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2011
    Messages : 73
    Points : 76
    Points
    76

    Par défaut

    C'est quoi comme type de commande, la réponse est elle stocker dans une variable ou dans un tableau ?
    j'ai l'impression je me trompe surement que ton résultat est directement spliter alors que s'il récupère plusieurs ligne tu peux peut être commencer par boucler dessus afin de mieux organiser ta réponse et pourquoi pas la mettre dans une hash pour pouvoir l'exploiter facilement

    edit : philou te propose la même chose mais avec le code

  11. #11
    Futur Membre du Club
    Inscrit en
    juillet 2009
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 184
    Points : 18
    Points
    18

    Par défaut

    Merci à vous deux !

    Je débute avec Perl c'est pas encore facile pour moi

    Quand j'utilise use strict; j'ai l'erreur suivante :

    Code :
    1
    2
    3
    4
     
    Global symbol "$ip" requires explicit package name at ./test.pl line 12.
    Global symbol "$password" requires explicit package name at ./test.pl line 13.
    Global symbol "$user" requires explicit package name at ./test.pl line 14.
    Mon fichier test.pl :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #!/usr/bin/perl
    #
     
    use Net::SSH2;
    use strict;
    use warnings;
     
    use feature qw(:5.10);
    use List::MoreUtils qw(pairwise);
    #use Data::Dumper;
     
    $ip="192.168.10.12";
    $password="pass123";
    $user="admin";
    $verif=$password;
    Pourquoi "requires explicit package name " ?? C'est une variable !

  12. #12
    Membre expérimenté Avatar de Beniou
    Homme Profil pro
    Inscrit en
    novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : novembre 2009
    Messages : 357
    Points : 513
    Points
    513

    Par défaut

    Bonjour,

    Quand on utilise le pragma 'use strict' il faut, entre autre, déclarer ses variables avec le mot-clé 'my'

    Code :
    1
    2
    3
    my $ip="192.168.10.12";
    my $password="pass123";
    my $user="admin";

  13. #13
    Futur Membre du Club
    Inscrit en
    juillet 2009
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 184
    Points : 18
    Points
    18

    Par défaut

    Bonjour,

    Ok je déclare mes variables avec "my" mais j'obtiens d'autres erreurs :

    Code :
    1
    2
    3
     
    Use of uninitialized value in anonymous hash ({}) at ./test.pl line 48.
    Use of uninitialized value in say at ./test.pl line 53.

  14. #14
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    Par défaut

    Là, faut que tu fournisses le reste du code (j'ai testé le code que j'ai fourni avec l'exemple que tu as donné, sans constater d'erreur).
    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é
    Using strict and warnings is good for you.

  15. #15
    Futur Membre du Club
    Inscrit en
    juillet 2009
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 184
    Points : 18
    Points
    18

    Par défaut

    Je me base sur ton code Philou67430

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    my $command="";
    $command.=$_ while (<$chan2>);
    my @res=split(/ +/,$command);
     
    my %var;
    our ($a, $b);
     
    my @col_names;
    foreach my $line (@res) {
      chomp $line;
      if ($line =~ /^N°/) {
        @col_names = split /\s+/, $line;
        shift @col_names;
      }
      else {
        if (my @col_values = split /\s+/, $line) {
          my $key = shift @col_values;
          $var{$key} = { pairwise { $a => $b } @col_names, @col_values };
        }
      }
    }
     
    say "Key id0/1, Valeur1-2: ", $var{"id0/1"}->{"Valeur1-2"};
    Ligne 48 :
    Code :
    $var{$key} = { pairwise { $a => $b } @col_names, @col_values };
    Ligne 53 :

    Code :
    say "Key id0/1, Valeur1-2: ", $var{"id0/1"}->{"Valeur1-2"};

  16. #16
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    Par défaut

    Modifie ceci :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my $command="";
    $command.=$_ while (<$chan2>);
    my @res=split(/ +/,$command);
     
    my %var;
    our ($a, $b);
     
    my @col_names;
    foreach my $line (@res) {
    en ceci :
    Code :
    1
    2
    3
    4
    5
    my %var;
    our ($a, $b);
     
    my @col_names;
    foreach my $line (<$chan2>) {
    En fait, il est inutile de concaténer dans $command les lignes de résultat pour les spliter ensuite (d'autant que tu ne les splites pas avec le bon séparateur).
    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é
    Using strict and warnings is good for you.

  17. #17
    Futur Membre du Club
    Inscrit en
    juillet 2009
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 184
    Points : 18
    Points
    18

    Par défaut

    Cela ne change pas

    Même erreurs :

    Code :
    1
    2
    Use of uninitialized value in anonymous hash ({}) at ./test.pl line 48.
    Use of uninitialized value in say at ./test.pl line 53.

  18. #18
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    Par défaut

    Comme il n'est pas possible de savoir ce que retourne ta commande ssh, ajoute une ligne après le foreach pour afficher $line, que l'on puisse voir ce qui est retourné.
    (ou mieux, stocke ce résultat dans un fichier et poste le).
    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é
    Using strict and warnings is good for you.

  19. #19
    Futur Membre du Club
    Inscrit en
    juillet 2009
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 184
    Points : 18
    Points
    18

    Par défaut

    Comme il n'est pas possible de savoir ce que retourne ta commande ssh
    Si elle me retourne bien :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    N°           Valeur1-1           Valeur2-1          Valeur3-1        Valeur4-1
    id0/1         1370380983         224275        5977182       11519416
    id0/2         2950137424       10842680        5901202       11460799
     
    N°           Valeur1-2           Valeur2-2          Valeur3-2        Valeur4-2
    id0/1         1092839685         132161        5280599        9771119
    id0/2         35382434282       89595306        1172398         933271
    Je viens de faire un print $line; après le foreach et j'affiche bien le retour/résultat de la commande SSH.

  20. #20
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    Par défaut

    Transforme cette ligne
    Code :
    foreach my $line (<$chan2>) {
    en
    Code :
    while (defined(my $line = <$chan2>)) {
    et renvoie le message d'erreur affiché.

    Je pense que le pb arrive sur les lignes vides, qui sont peut-être mal traitées.
    Essaye de changer cette ligne
    Code :
          $var{$key} = { pairwise { $a => $b } @col_names, @col_values };
    en
    Code :
          $var{$key} = { pairwise { $a => $b } @col_names, @col_values } if defined $key;
    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é
    Using strict and warnings is good for you.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •