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

Bioinformatique Perl Discussion :

Lire un fichier fasta


Sujet :

Bioinformatique Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut Lire un fichier fasta
    Bonjour,

    comment récupérer TOUTES mes clés et valeur?

    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
    while (my $line = <DATA>) {
        chomp($line);
        if($line =~ /^>/){
    	$nom=$line;
    	$count ++;
    	#print("$nom\n");
        }
        else{
    	$sequence=$line;
    	#print("$sequence\n");
        }
        %hash=($nom=>$sequence);
     
    }
     print("nb count: $count\n");
     
     
    foreach my $t (keys%hash){
        print  "clé: $t\nvaleur: $hash{$t}\n";#verif
    }
     
     
    close(DATA);
    merci par avance

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach my $t (keys%hash){
        print  "clé: $t\nvaleur: $hash{$t}\n";#verif
    }
    C'est la bonne méthode. Il faut néanmoins savoir que si 2 valeurs ont la même clé, tu écraseras la valeur précédente. Est-ce cela le problème?

    Pour remplir le tableau j'utilise plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{$nom} = $sequence;

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Si tu travailles avec un fichier fasta, il vaut mieux utiliser le module Bio::SeqIO

    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
    #!/usr/local/bin/perl
     
    use strict;
    use warnings;
     
    use Bio::SeqIO;
     
    # fichier d'entrée
    my $in  = Bio::SeqIO->new(-file => "P:/.../fichier", '-format' => 'Fasta');
     
    # récupération des séquences et des identifiants
    while ( my $seq = $in->next_seq()){
        my $id = $seq->primary_id ;
        my $sequence = $seq->seq ;
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut
    Désolé, j'ai fait le mauvais copié-collé

    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
    while (my $line = <DATA>) {
        chomp($line);
        if($line =~ /^>/){
    	$nom=$line;
    	$count ++;
    	#print("$nom\n");
        }
        else{
    	$sequence=$line;
    	#print("$sequence\n");
        }
        %hash=($nom=>$sequence);
     
    }
     print("nb count: $count\n");
     
    foreach my $t (keys%hash){
        print  "clé: $t\nvaleur: $hash{$t}\n";#verif
    }
    en fait, deux clés différentes peuvent avoir la même valeur. Et du coup je veux conserver la premières clé et la valeur associé.

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Voici le code à utiliser :

    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
    #!/usr/local/bin/perl
     
    use strict;
    use warnings;
     
    use Bio::SeqIO;
     
    # fichier d'entrée
    my $in  = Bio::SeqIO->new(-file => "P:/fichier", '-format' => 'Fasta');
     
    my %hash;
     
    # récupération des séquences et $id
    while ( my $seq = $in->next_seq()){
        $hash{$seq->primary_id} = $seq->seq ;   
    }
     
    # affichage
    foreach my $t (keys %hash){
        print  "clé: $t\nvaleur: $hash{$t}\n";#verif
    }
    Est-ce bien un fichier fasta?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut
    Merci mais cela ne génère pas ce que je veux, je me suis mal exprimé: le nom de mes seq fini par .1, .2, .3 et je veux conserver même si elles ont des séquences un seul représentant

    >seqA.1
    MSSAAG
    >seqA.2
    MSSAAG
    >seqB.1
    MEEAGE
    >seqC.1
    MDSIRR
    >seqD.1
    MACTAA
    >seqD.2
    MACTAA
    >seqD.3
    MACTAA
    >seqD.4
    DIFFER


    au final, j'aimerais avoir
    >seqA.1
    MSSAAG
    >seqB.1
    MEEAGE
    >seqC.1
    MDSIRR
    >seqD.1
    MACTAA

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut
    J'ai essayé ceci mais j'obtiens ce messgae:
    "exists argument is not a HASH or ARRAY element"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my %test;
    foreach my $t (keys %hash{
        if(exists substr("$hash{$t}","0",2){
    	$exist++;
        }
        else{
    	%test=( "$hash{$t}"=>"$t");
        }	
    }

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Citation Envoyé par pontarose Voir le message
    Merci mais cela ne génère pas ce que je veux, je me suis mal exprimé: le nom de mes seq fini par .1, .2, .3 et je veux conserver même si elles ont des séquences un seul représentant

    >seqA.1
    MSSAAG
    >seqA.2
    MSSAAG
    >seqB.1
    MEEAGE
    >seqC.1
    MDSIRR
    >seqD.1
    MACTAA
    >seqD.2
    MACTAA
    >seqD.3
    MACTAA
    >seqD.4
    DIFFER


    au final, j'aimerais avoir
    >seqA.1
    MSSAAG
    >seqB.1
    MEEAGE
    >seqC.1
    MDSIRR
    >seqD.1
    MACTAA
    Pouvez vous écrire proprement et en français, car je ne comprends pas ce que vous dites. Merci !!

Discussions similaires

  1. [Servlet][EJB]lire un fichier à partir de mon bean
    Par kimausoleil dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/02/2004, 14h26
  2. [MFC] lire un fichier en int
    Par Kevgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 09h32
  3. Réponses: 5
    Dernier message: 11/01/2004, 20h17
  4. Lire un fichier de 50 gb
    Par Maryves dans le forum MFC
    Réponses: 2
    Dernier message: 08/01/2004, 14h08
  5. Lire le fichier du port série
    Par saibe dans le forum Linux
    Réponses: 7
    Dernier message: 09/04/2003, 09h29

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