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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 while (my @row = $sth0->fetchrow_array){ my $ID = $row[0]; my $ACC = $row[1]; my $TAXON = $row[2]; my @acc_list = split(/ /, $ACC); # clé = taxon : vérifié est bien unique my %taxon_hash; # recherche du taxon correspondant à l'accession ACCESSIONS : foreach my $acc (@acc_list){ my $gb_data = $gb->get_Seq_by_acc($acc); my @Features = $gb_data->get_SeqFeatures; my $FeaturesDNA = $Features[0]; GB_DATA : foreach my $k (keys %$FeaturesDNA) { if ($k eq "annotation") { my $SousObjet1 = ($FeaturesDNA->{$k}); my $SousObjet2 = ($SousObjet1->{"_annotation"}); my $SousObjet4 = ($SousObjet2->{"db_xref"}); my $taxon = ${$SousObjet4}[0]; $taxon =~ s/\D//g; if (defined $taxon) { push (@{$taxon_hash{$taxon}}, $acc); } next ACCESSIONS; } #if } # foreach my $k (keys %$FeaturesDNA) } if (keys %taxon_hash > 1){ # $taxon_hash{$taxon} = array d'accession => à garder en mémoire. print "erreur pour $ID\n"; } else { my $single_key = join ('', keys %taxon_hash); my $sql = "UPDATE fungi2 SET taxon = $single_key WHERE id = $ID"; print $sql."\n"; } }# fin du whileSi ma hash ne possède qu'une seule clé, est-il possible de la récupérer plus simplement que de cette façon?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if (keys %taxon_hash > 1){ # $taxon_hash{$taxon} = array d'accession => à garder en mémoire. print "erreur pour $ID\n"; } else { my $single_key = join ('', keys %taxon_hash); my $sql = "UPDATE fungi2 SET taxon = $single_key WHERE id = $ID"; print $sql."\n"; }
J'aimerais garder en mémoire le contenu des hash qui n'ont pas fonctionné. Le problème est que ceux-ci sont dans une boucle while et donc écrasé à chaque passage. Je pense qu'il existe un module permettant de sauver des tables afin de les réutiliser ultérieurement. Avez-vous une idée sur la façon la plus simple de procéder? Devrais-je recréer un hash avant le while qui récupèrerait les valeurs des %taxon_hash contenant plus d'une clé et serait sauvegardé quelque part tout à la fin du script.
Merci pour votre aide.
Partager