Les tableaus à plusieurs dimension en Perl.

Les tableaus à plusieurs dimension en Perl. - Perl - Programmation

Marsh Posté le 05-03-2004 à 11:03:38    

Voila je commence tout juste en Perl et je voudrais faire un script qui annalyse les fichiers log de Trend Micro Interscan.
Jusque là tout va bien.
 
J'ai bien commencé mais il me reste à entrer les données dans un tableau ou il y aurai deux colonnes :
 Colone 1 : nom du virus
 Colone 2 : nombre d'occurance du virus dans les log
 
Pour le moment j'ai un tableau avec la liste des virus
et un autre avec les occurances.
 
Comment faire pour créer un seul tableau à deux dimensions avec les valeurs de mes deux autres tableau?
 
Le but de la manip est de pouvoir faire des trie par nom de virus ou par nombre d'occurance par la suite.
 
Je suis peut etre sur la mauvaise piste ... J'ai encore du mal a voir la différence entre les array, les hash ... etc.
:)
 
Merci d'avoir lu le topic :)
 
Régis

Reply

Marsh Posté le 05-03-2004 à 11:03:38   

Reply

Marsh Posté le 05-03-2004 à 13:05:35    

Voilà ce que j'ai fait rapidement, ça vaut ce que ça vaut mais ça peut peut être t'aider :  
je pars du principe que tes deux tableaux font la même taille.
Soient @v le tableau de virus et @o le tableau des occurences.
CODE :  
my $hash;
my $i=0;
foreach(@v) { #ou foreach(@o)
   $hash->{"$_"}=@o[$i];
   $i++;
}
FIN CODE.
Ainsi, ton nom de virus est associé à son nombre d'occurences.  :)

Reply

Marsh Posté le 05-03-2004 à 13:09:05    

Les tableaux
vous me le copiez 2374 fois dans une boucle while :O


Message édité par uriel le 05-03-2004 à 13:09:25

---------------
IVG en france
Reply

Marsh Posté le 05-03-2004 à 13:12:22    

jeh_ a écrit :

Voilà ce que j'ai fait rapidement, ça vaut ce que ça vaut mais ça peut peut être t'aider :  
je pars du principe que tes deux tableaux font la même taille.
Soient @v le tableau de virus et @o le tableau des occurences.
CODE :  
my $hash;
my $i=0;
foreach(@v) { #ou foreach(@o)
   $hash->{"$_"}=@o[$i];
   $i++;
}
FIN CODE.
Ainsi, ton nom de virus est associé à son nombre d'occurences.  :)  


Ca sens plutot bon ton truc ! Je viens de regarder et apriori c'était bien dans le hashage qu'il fallait que je me dirige ...
Domage j'ai fait des array ...
Y'a plus qu'a comme on dit.
Merci pour la réponse.

Reply

Marsh Posté le 05-03-2004 à 13:15:38    

uriel a écrit :

Les tableaux
vous me le copiez 2374 fois dans une boucle while :O


 
while ($message_author eq "uriel" )
 { delete $message ;
   print "Les tableau<X> c'est moins bien que les <i>hash</i>." ;
 }
 
 :D  
 

Reply

Marsh Posté le 05-03-2004 à 13:17:40    

BuzzzzEclair a écrit :


 
while ($message_author eq "uriel" )
 { delete $message ;
   print "Les tableau<X> c'est moins bien que les <i>hash</i>." ;
 }
 
 :D  
 
 


 
[:ddr555]


---------------
IVG en france
Reply

Marsh Posté le 05-03-2004 à 14:03:02    

BuzzzzEclair a écrit :


Ca sens plutot bon ton truc ! Je viens de regarder et apriori c'était bien dans le hashage qu'il fallait que je me dirige ...
Domage j'ai fait des array ...
Y'a plus qu'a comme on dit.
Merci pour la réponse.


 
J'ai intégré, ca semble pas mal mais j'ai du mal a faire un print du hash.
J'ai un truc dans ce genre pour le print du hash :
 

Code :
  1. for my $key ( keys(%$hash) )
  2. {my $value = $hash{$key} ;
  3. print "$key => $value\n" ;
  4. }

Reply

Marsh Posté le 05-03-2004 à 14:07:44    

Et donc j'ai oblié de dire que le print n'affiche rien pour la vairable $value, alors que dans l'exemple de jeh_ la valeur est bien associée au hash. ! :(

Reply

Marsh Posté le 05-03-2004 à 14:14:15    

BuzzzzEclair a écrit :

Et donc j'ai oblié de dire que le print n'affiche rien pour la vairable $value, alors que dans l'exemple de jeh_ la valeur est bien associée au hash. ! :(


Ok j'ai trouvé ... au cas ou ca interesse qqun un jour :)

Code :
  1. for my $key ( keys(%$hash) )
  2. {my $value = $hash->{"$key"} ;
  3. print "$key => $value\n" ;
  4. }


 
Et voila un résultat de sortie du script :) :
[root@www iscan]# ./report-virus-1.1.pl 2004 03 04
Nombre de virus: 43
WORM_NETSKY.B => 2
WORM_NETSKY.C => 1
WORM_NETSKY.D => 40

Reply

Marsh Posté le 06-03-2004 à 07:39:12    

Tu as trouvé mais est-ce que tu as compris ? Il te faut un « -> » après le $hash car dans ton programme $hash n'est pas un hash : c'est une référence à un hash. C'est parce que tu l'a initialisé avec en faisant « $hash->{...} = ... » au lieu de « $hash{...} = ... ». Dans le premier cas tu as un $hash et c'est une référence a un hash anonyme. Dans le deuxième cas tu as un %hash et c'est un hash. Comme en C, la flèche permet de déréfencer. C'est juste un « sucre de syntaxe » : « $hash->{...} » est équivalent à « ${%$hash}{...} ».
 
Et sinon pour être tout a fait complet : « %hash = ("a" => "A" ) » défini un hash. « $hash = {"a" => "A"} » fait « pointer » $hash vers un hash anonyme. « { ... } » est le contructeur de hash anonyme, comme « [ ... ] » est le constructeur de tableau anonyme. Donc : « @array = (1, 2, 3) » mais « $array = [1, 2, 3] ».

Reply

Marsh Posté le 06-03-2004 à 07:39:12   

Reply

Marsh Posté le 08-03-2004 à 10:27:06    

matafan a écrit :

Tu as trouvé mais est-ce que tu as compris ? Il te faut un « -> » après le $hash car dans ton programme $hash n'est pas un hash : c'est une référence à un hash. C'est parce que tu l'a initialisé avec en faisant « $hash->{...} = ... » au lieu de « $hash{...} = ... ». Dans le premier cas tu as un $hash et c'est une référence a un hash anonyme. Dans le deuxième cas tu as un %hash et c'est un hash. Comme en C, la flèche permet de déréfencer. C'est juste un « sucre de syntaxe » : « $hash->{...} » est équivalent à « ${%$hash}{...} ».
 
Et sinon pour être tout a fait complet : « %hash = ("a" => "A" ) » défini un hash. « $hash = {"a" => "A"} » fait « pointer » $hash vers un hash anonyme. « { ... } » est le contructeur de hash anonyme, comme « [ ... ] » est le constructeur de tableau anonyme. Donc : « @array = (1, 2, 3) » mais « $array = [1, 2, 3] ».


 
AH tout s'éclair d'un seul coup! :))
J'ai fait du C, donc je connais les structures etc ... ca me fait penser un peu à ca mais j'ai encore du mal à faire la différence entre les différents type en Perl.
 
Je te remercie beaucoup de m'avoir éclaircis ce point.  ;à

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed