Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1120 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Ajout de variables dans un tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ajout de variables dans un tableau

n°2260881
clubber43
Posté le 22-06-2015 à 17:55:02  profilanswer
 

Bonjour à tous,  
Je reviens faire un tour sur le forum, car j'ai un souci sur un bout de code de Gilou d'il y a quelques mois voire années :)
 
Je souhaite mettre dans un tableau, des valeurs issues de sub. voila le code qui va bien :
 
 

Code :
  1. sub session ()
  2. {
  3.    my $logfile = 'D:/modlog.txt';
  4.    my @servers = make_servers_list('D:/PERL_SNMP/adresses_ip.txt');
  5.    my %params = make_params_list();
  6.    my @tableau;
  7.   foreach (@servers)
  8. {
  9.      my $connection = start_connection($_);
  10.       next unless ($connection);
  11.      
  12.   my %values = get_values($connection, %params);
  13.    
  14.      end_connection($connection);
  15.       print Dumper(%values),"n";
  16. push (@tableau, %values);
  17.        return @tableau;
  18.      undef $connection;
  19.    }
  20. }


 
Et quand je fais un print de mon tableau, je n'obtiens pas les valeurs retournées, mais l'ensemble valeurs+nom de variable...
 

Code :
  1. session();
  2. my @ref = session();
  3. my $size = scalar(@ref);
  4. print $size, "n";
  5. my $moyenne = sum(@ref) / @ref;
  6. print $moyenne;


 
 
Je pense qu'il ne s'agit que d'un truc à 1.52€ mais je cherche depuis pas mal de temps, et je sèche...
 
Si quelqu'un pouvait m'aiguiller et me dire ce qu'il ne va pas :)
 
 
Je vous remercie tous.


Message édité par clubber43 le 23-06-2015 à 10:50:15

---------------
Merci
mood
Publicité
Posté le 22-06-2015 à 17:55:02  profilanswer
 

n°2260885
gilou
Modérateur
Modzilla
Posté le 22-06-2015 à 19:07:04  profilanswer
 

> Et quand je fais un print de mon tableau, je n'obtiens pas les valeurs retournées, mais l'ensemble valeurs+nom de variable...  
C'est bien normal, puisque tu fais un push d'un hash dans une liste.
Si tu ne veux que les valeurs, faudra faire un  
push @tableau, (values %values);
Mais appeller une variable (%values) avec le nom d'un mot clé (values) du langage, c'est une très mauvaise idée (pour la relecture) même si ça marche.
 
A+,


Message édité par gilou le 22-06-2015 à 19:07:30

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2260915
clubber43
Posté le 23-06-2015 à 08:44:59  profilanswer
 

D'accord pour values, je vais y remédier.
 
Comment sa marche en fait? je comprends pas pourquoi on met values%values ?  
 
Merci Gilou
 


---------------
Merci
n°2260918
Alci
Posté le 23-06-2015 à 09:47:58  profilanswer
 

%values est un tableau associatif. Quand tu fais  

Code :
  1. push (@tableau, %values);


%values est évalué en contexte de liste (la fonction push marche ainsi : push(Tableau, Liste) et renvoie l'ensemble des clés et des valeurs du hash.
 
values(%values) permet de ne renvoyer que les valeurs (donc sans les clés).  


---------------
BattleTag: Alci#2178 - C'est dans les vieux pots qu'on fait les meilleurs démos
n°2260919
clubber43
Posté le 23-06-2015 à 10:09:08  profilanswer
 

OK, merci beaucoup pour l'info.
Venant du c et c++, je ne voyais pas trop comment marchaient les tableaux et listes...
 
Il me manque encore des heures de prog je pense :)
 
Merci  
 @+


---------------
Merci
n°2260925
clubber43
Posté le 23-06-2015 à 10:55:09  profilanswer
 

Et dernière questions, lorsque j'ai une liste du type :
 
 

Code :
  1. # impression en console
  2. foreach (sort {$a <=> $b} (keys %result)) { 
  3.   print "<$_> : $result{$_};" 
  4. }


 
est-ce que je peux extraire les 3 premieres valeurs contenues et les multiplier avec les 3 autres valeurs ? En gros, j'ai 6 valeurs exportées et je souhaite multiplier les valeurs 1,2,3 aux valeurs 4,5,6.
 
Sachant que le script princuipal est celui-ci :
 
 

Code :
  1. my @adressesU = qw(25 26 27 31 32 33);  my %result;
  2.   foreach (@adressesU) { 
  3.   $opt_mb_ad = $_;     
  4. # Création de la requête 
  5.   my $tx_hd_tr_id   = int(rand 65535);
  6.   my $tx_hd_length  = 6;
  7.   my $tx_hd_pr_id   = 0;
  8.   my $tx_buffer = pack("nnnCCnn", $tx_hd_tr_id, $tx_hd_pr_id , $tx_hd_length, $opt_unit_id, $opt_mb_fc, $opt_mb_ad, $opt_mb_nb);
  9.  
  10. # Emission de la requête
  11.   send(SERVER, $tx_buffer, 0);
  12.  
  13. # Attente d'une réponse
  14.   unless (can_read('SERVER', $opt_timeout)) {
  15.     close SERVER;
  16.     print STDERR 'receive timeout'."n";
  17.     return 1;
  18.   }
  19.  
  20. # Réception de l'entête
  21.   my ($rx_frame, $rx_buffer);
  22.   recv(SERVER, $rx_buffer, 7, 0);
  23.   $rx_frame = $rx_buffer;
  24.  
  25. # Décodage de l'entête
  26.   my ($rx_hd_tr_id, $rx_hd_pr_id, $rx_hd_length, $rx_hd_unit_id) = unpack "nnnC", $rx_buffer;
  27.  
  28. # Vérifie la cohérence de l'entête
  29.   unless (($rx_hd_tr_id == $tx_hd_tr_id) &&
  30.       ($rx_hd_pr_id == 0) &&
  31.       ($rx_hd_length < 256) &&
  32.       ($rx_hd_unit_id == 1)) {
  33.     close SERVER;
  34.     print STDERR 'error in receive frame'."n";
  35.     return 1;
  36.   }
  37.  
  38. # Réception du corps du message
  39.   recv(SERVER, $rx_buffer, $rx_hd_length-1, 0);
  40.   $rx_frame .= $rx_buffer;
  41.  
  42.  
  43. # Décodage du corps du message
  44.   my ($rx_bd_fc, $rx_body) = unpack "Ca*", $rx_buffer;
  45.  
  46. # Vérification du statut d'exception
  47.   if ($rx_bd_fc > 0x80) {
  48. # Affichage du code exception
  49.     my ($rx_except_code) = unpack "C", $rx_body;
  50.     print 'exception (code '.$rx_except_code.')'."n";
  51.   } 
  52.   else {
  53. ## Lecture de mot
  54.     my ($rx_bd_bc, $rx_read_word_data) = unpack "Ca*", $rx_body;
  55. # Lecture d'entier de 16 bits
  56. # un seul registre a lire d'ou le 'n'
  57.     $result{$opt_mb_ad} = unpack 'n', $rx_read_word_data; ####
  58.     }
  59.     }
  60. close SERVER;
  61. # fin de la boucle foreach  ####
  62. # impression en console
  63. foreach (sort {$a <=> $b} (keys %result)) { 
  64.   print "<$_> : $result{$_};" 
  65. foreach (sort {$a <=> $b} (keys %result)) {
  66. my $sum =  $result{$_};
  67.   print "Tension= $sum;" 
  68. }
  69. print "n";
  70. ########################" attente $timeout###################################
  71.  
  72. sub can_read{
  73. my ($sock_handle, $timeout) = @_;
  74. my $hdl_select="";
  75. vec($hdl_select, fileno($sock_handle),1)=1;
  76. return (select($hdl_select, undef, undef, $timeout)==1);
  77. }
  78. ############################################################################
  79.  
  80. }


 
Merci beaucoup pour votre aide à tous les 2 :)
@+


---------------
Merci
n°2260926
clubber43
Posté le 23-06-2015 à 11:02:57  profilanswer
 

C'est bon, j'ai trouvé, j'avais un souci dans mon appel : voici mon code :  
my $U1 = "25";
my $U2 = "26";
my $U3 = "27";
 
my $i1 = "31";
my $i2 = "32";
my $i3 = "33";
 
 
print $result{$U1}*$result{$i1}/10;
print "\n";  
 
print $result{$U1}*$result{$i1}/10;
print "\n";  
 
print $result{$U1}*$result{$i1}/10;
print "\n";  
 
Et cela me renvoie bien les bonnes choses :)


---------------
Merci

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Ajout de variables dans un tableau

 

Sujets relatifs
tableau outofBound[adwords] ajouter des variables de tracking à mes annonces
Javascript : fusionner deux variables[résolu] Modification valeur tableau bidimentionnel
[Access] Tableau de bordTableau et Comptage
Récupérer valeur dans un tableau avec boucle sous VBAtableau et matrice
Charger fichier txt dans tableau 
Plus de sujets relatifs à : Ajout de variables dans un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR