IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

hash à clé unique et sauvegarde d'un hash


Sujet :

Langage Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut hash à clé unique et sauvegarde d'un hash
    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 while
    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";
    	}
    Si ma hash ne possède qu'une seule clé, est-il possible de la récupérer plus simplement que de cette façon?



    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.
    -- Jasmine --

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($single_key) = keys %taxon_hash;
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    push @taxon_failures, \%taxon_hash;
    devraient faire l'affaire.
    (Le second ne marche que parce que tu déclares %taxon_hash à l'intérieur de la boucle, donc attention à ça)

    --
    Jedaï

  3. #3
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Une fois de plus, merci pour ton aide.
    -- Jasmine --

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplir un Hash et le comprarer avec un autre Hash
    Par bayouta19 dans le forum Langage
    Réponses: 15
    Dernier message: 19/11/2013, 17h38
  2. tri d'un array de hash en fonction d'une valeur du hash
    Par Jasmine80 dans le forum Langage
    Réponses: 2
    Dernier message: 05/08/2011, 12h14
  3. [10g] Hash partition et cle non unique
    Par isa06 dans le forum Administration
    Réponses: 0
    Dernier message: 02/07/2009, 11h57
  4. Réponses: 6
    Dernier message: 02/01/2008, 16h18
  5. Réponses: 9
    Dernier message: 29/03/2007, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo