Bonjour à tous,
J'aimerais poser une question sur la façon de procéder.
J'ai deux séries d'objets ceux de $Pl1 et ceux de $Pl2.
de structure:
J'aimerais trouver les $self->{ENZYME} n'étant pas en commun pour $Pl1 et $Pl2. Je veux dire que $Pl1 et $Pl2 contiennent toute une série d'objets et je voudrais récupérer ceux n'étant présent que pour l'un d'eux mais aussi qu'en cas de présence $self->{FREQUENCE} (qui est numérique) soit supérieur à 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 sub new # fonction est définie { my ($Classe, $Sequence, $Taille, $Enzyme, $Site, $Frequence, $Positions) = @_; my $self = {}; # référence anonyme vers une table de hachage vide bless ($self, $Classe); # indique que la référence est liée au package (à la classe) $self->{SEQUENCE} = $Sequence; $self->{TAILLE} = $Taille; $self->{ENZYME} = $Enzyme; $self->{SITE} = $Site; $self->{FREQUENCE} = $Frequence; $self->{POSITIONS} = $Positions; return $self; } 1;
Je ne vois pas comment procéder au plus simple.
Je commence par récupérer mes ENZYMES communes dans @Enz_Communes.
Ensuite, je peux réappeller chaque objet, ne garder que ceux dont la valeur de ->{ENZYME} ne se trouve pas dans @Enz_Communes et dont ->{FREQUENCE} est supérieur à 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 # Recherche des enzymes ne coupant qu'un des deux plasmides et coupant plus d'une fois le second #--------------------------------------------------------------------------------------------------- my @Enz_Communes; for (my $c =0; $c<$a; $c++) { for (my $d = 0; $d<$b; $d++) { if ($Pl1[$c]->{ENZYME} eq $Pl2[$d]->{ENZYME}) { push (@Enz_Communes, $Pl1[$c]->{ENZYME}); } } }
Est-ce que le problème est clair?
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
21
22
23
24 for (my $c =0; $c<$a; $c++) { my $OK = 0; foreach my $Enz(@Enz_Communes) { if ($Enz eq $Pl1[$c]->{ENZYME}){$OK = 1;} } if(($OK == 0) && ($Pl1[$c]->{FREQUENCE}>1)) { } } for (my $d = 0; $d<$b; $d++) { my $OK = 0; foreach my $Enz(@Enz_Communes) { if ($Enz eq $Pl2[$d]->{ENZYME}){$OK = 1;} } if(($OK == 0) && ($Pl2[$d]->{FREQUENCE}>1)) { } }
Est-ce la façon la plus logique de procéder?
Perl possède-t-il une fonction me permettant de vérifier si une valeur existe dans mon array?
Merci beaucoup,
Jasmine,
PS : programmes postés dans http://www.developpez.net/forums/sho...d.php?t=344735
Partager