clubber43 | Et dernière questions, lorsque j'ai une liste du type :
Code :
- # impression en console
- foreach (sort {$a <=> $b} (keys %result)) {
- print "<$_> : $result{$_};"
- }
|
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 :
- my @adressesU = qw(25 26 27 31 32 33); my %result;
- foreach (@adressesU) {
- $opt_mb_ad = $_;
- # Création de la requête
- my $tx_hd_tr_id = int(rand 65535);
- my $tx_hd_length = 6;
- my $tx_hd_pr_id = 0;
- 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);
-
- # Emission de la requête
- send(SERVER, $tx_buffer, 0);
-
- # Attente d'une réponse
- unless (can_read('SERVER', $opt_timeout)) {
- close SERVER;
- print STDERR 'receive timeout'."n";
- return 1;
- }
-
- # Réception de l'entête
- my ($rx_frame, $rx_buffer);
- recv(SERVER, $rx_buffer, 7, 0);
- $rx_frame = $rx_buffer;
-
- # Décodage de l'entête
- my ($rx_hd_tr_id, $rx_hd_pr_id, $rx_hd_length, $rx_hd_unit_id) = unpack "nnnC", $rx_buffer;
-
- # Vérifie la cohérence de l'entête
- unless (($rx_hd_tr_id == $tx_hd_tr_id) &&
- ($rx_hd_pr_id == 0) &&
- ($rx_hd_length < 256) &&
- ($rx_hd_unit_id == 1)) {
- close SERVER;
- print STDERR 'error in receive frame'."n";
- return 1;
- }
-
- # Réception du corps du message
- recv(SERVER, $rx_buffer, $rx_hd_length-1, 0);
- $rx_frame .= $rx_buffer;
-
-
- # Décodage du corps du message
- my ($rx_bd_fc, $rx_body) = unpack "Ca*", $rx_buffer;
-
- # Vérification du statut d'exception
- if ($rx_bd_fc > 0x80) {
- # Affichage du code exception
- my ($rx_except_code) = unpack "C", $rx_body;
- print 'exception (code '.$rx_except_code.')'."n";
- }
- else {
- ## Lecture de mot
- my ($rx_bd_bc, $rx_read_word_data) = unpack "Ca*", $rx_body;
- # Lecture d'entier de 16 bits
- # un seul registre a lire d'ou le 'n'
- $result{$opt_mb_ad} = unpack 'n', $rx_read_word_data; ####
- }
- }
- close SERVER;
- # fin de la boucle foreach ####
- # impression en console
- foreach (sort {$a <=> $b} (keys %result)) {
- print "<$_> : $result{$_};"
- }
- foreach (sort {$a <=> $b} (keys %result)) {
- my $sum = $result{$_};
- print "Tension= $sum;"
- }
- print "n";
- ########################" attente $timeout###################################
-
- sub can_read{
- my ($sock_handle, $timeout) = @_;
- my $hdl_select="";
- vec($hdl_select, fileno($sock_handle),1)=1;
- return (select($hdl_select, undef, undef, $timeout)==1);
- }
- ############################################################################
-
- }
|
Merci beaucoup pour votre aide à tous les 2
@+ ---------------
Merci
|