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 txt contenant une séquence nucléotidique


Sujet :

Bioinformatique Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Par défaut Lire un fichier txt contenant une séquence nucléotidique
    Bonjour,
    Je suis nouveau dans le langage perl, j'ai quelques notions d’algorithmique que j'ai acquises avec scilab.
    Mon but est de créer un programme qui peu extraire une séquence de nucléotides d'un fichier (ici nucleotide.txt) et sortir à la fin le nombre de bases A T C et G.

    Voilà l'ébauche de programme que j'ai fait

    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
    #!C:\strawberry\perl\bin -W
    open(hin,"<C:\Users\Maxime\Desktop\nucléotide.txt")
    @t = <hin>
    my $a = 0;
    my $t = 0;
    my $c = 0;
    my $g = 0;
    my $l = length(@t);
    for {(my $i = 0; $i = $l; $i+=1)
    	if (@t(1,$i) = a) {
    	$a+=1}
    	elsif (@t(1,$i) = t) {
    	$t = $t+1}
    	elsif (@t(1,$i) = c) {
    	$c = $c+1}
    	else {
    	$g = $g+1}}
    print ("$a\n","$t\n","$c\n","$g\n");
    Bon sans surprise il ne fonctionne pas, je soupçonne l'incapacité du logiciel à lire mon fichier, et aussi beaucoup d'erreur de syntaxe. Je précise que le contenu du fichier nucleotide.txt est "ttcagttgtg"

    Si vous pouvez m'aiguiller sur l'origine de l'incommensurable liste d'erreur que j'obtiens à l’exécution du .pl, je vous en serai reconnaissant!

  2. #2
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    ouh là de nombreux problèmes à signaler !

    premier point commence tes scripts perl avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use strict;
    use warnings;
    , ça te filtrera quelques erreurs.

    ensuite, un tour dans la FAQ !

    lecture du fichier: tu ouvres ton fichier correctement mais tu ne le lis pas comme tu le voudrais

    boucle for

    et enfin pour le décompte il y a plus simple !

    voici une façon de faire (il y a toujours plus d'une façon de faire !) utilisant l'opérateur de remplacement tr///
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $str = "ttcagttgtg";
    my $tcnt = $str =~ tr/t//;
    my $acnt = $str =~ tr/a//;
    my $gcnt = $str =~ tr/g//;
    my $ccnt = $str =~ tr/c//;
     
    print "$tcnt $acnt $gcnt $ccnt";
    Cela affiche
    5 1 3 1
    bon courage !

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Par défaut
    Merci pour l'aide et le courage, je sens qu'il va m'en falloir beaucoup,

    J'ai lu la faq et ils y précisent que pour lire un fichier il faut utiliser "<" ce que j'avais déjà utilisé :s.
    En revanche j'ai corrigé certaines erreurs notamment au niveau de la syntaxe du for et j'ai mis en majuscule "hin" :
    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
    use strict;
    use warnings;
    #!C:\strawberry\perl\bin
    open HIN, "<C:\Users\Maxime\Desktop\nucléotide.txt"
    my @t = <HIN>
    my $a = 0;
    my $t = 0;
    my $c = 0;
    my $g = 0;
    my $l = length(@t);
    for ($i=0; $i<$l; $i++){
    	if (@t(1,$i) = a) {
    	$a+=1}
    	elsif (@t(1,$i) = t) {
    	$t+=1}
    	elsif (@t(1,$i) = c) {
    	$c+=1}
    	else {
    	$g+=1}}
    close(HIN)	
    print ("$a\n","$t\n","$c\n","$g\n");
    Il est vrai que votre méthode semble bien plus rapide, mais avant de l'étudier j'aimerai bien résoudre les problèmes que j'ai avec la mienne. Le message d'erreur qui m’embête le plus est celui-ci :
    Unrecognized escape \M passed through at C:\Users\Maxime\Desktop\test1 fction.pl
    line 2.
    Unrecognized escape \D passed through at C:\Users\Maxime\Desktop\test1 fction.pl
    line 2.
    grrrrr

  4. #4
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    le back slash \ est le caractère d'échappement, indiquant que le caractère suivant est spécial cf FAQ

    donc dans le chemin il interprète les \D \M comme un caractère spécial... qui n'a rien à faire là ou qui n'existe pas, d'où l'erreur.

    Afin de corriger cela, tu devrais consulter ce point de la FAQ

    au passage, tu peux voir ici comment débuter un script perl

    ensuite tu n'accèdes pas correctement aux éléments de la liste, là encore, FAQ

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Par défaut
    Bon alors j'ai fait beaucoup de modifications,
    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
    #!C:\strawberry\perl\bin -W
    use strict;
    use warnings;
    open HIN, "<C:\\Users\\Maxime\\Desktop\\nucleotide.txt";
    my @t = <HIN>;
    my $a = 0;
    my $bt = 0;
    my $c = 0;
    my $g = 0;
    my $i = 0
    for ($i=0 ; $i<$#t ; $i++){
    	if ($t[$i] = 'a') {
    	$a+=1}
    	elsif ($t[$i] = 't') {
    	$bt+=1}
    	elsif ($t[$i] = 'c') {
    	$c+=1}
    	else {
    	$g+=1}}
    close(HIN);
    print ("$a\n","$bt\n","$c\n","$g\n");
    mais c'est toujours pas ca, j'ai créer un autre bout de code pour y aller plus progressivement et traiter erreur par erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!C:\strawberry\perl\bin -W
    use strict;
    use warnings;
    open HIN, "<C:\\Users\\Maxime\\Desktop\\nucleotide.txt" or die "Can't open 'nucleotide': $!";
    my @t = <HIN>;
    print "$t[1]\n";
    print "@t\n";
    close(HIN);
    A l’exécution de ce .pl la ligne print "$t[1]\n"; qui doit normalement me retourner "t" me retourne le message d'erreur suivant :
    [QUOTE] Use of unitialized value $t[1] in concatenation (.) or string at C/\Users\Maxime\Desktop\test1 fction.pl line 6, <HIN> line 1. [\QUOTE]
    Donc je ne fais pas référence au "t" de nucleotide.txt correctement. Mais je ne vois pas vraiment comment faire après avoir lu plusieurs fois la FAQ

  6. #6
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Euh, il y a combien de lignes dans ton fichier de nucléotides?

    S'il n'y en a qu'une seule, c'est $t[0] que tu dois imprimer car l'indice du premier élément d'un tableau est 0, en Perl comme dans la majorité des langages de programmation.

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

Discussions similaires

  1. Lire un fichier txt contenant des sauts de ligne
    Par lodan dans le forum Langage
    Réponses: 14
    Dernier message: 19/09/2011, 10h17
  2. lire un fichier .txt comme une matrice
    Par Medoou dans le forum MATLAB
    Réponses: 9
    Dernier message: 27/07/2009, 09h40
  3. Réponses: 3
    Dernier message: 04/04/2008, 07h03
  4. Réponses: 3
    Dernier message: 05/03/2007, 23h54
  5. Lire un fichier .TXT en donnant une URL
    Par Matt2094 dans le forum Langage
    Réponses: 9
    Dernier message: 03/05/2006, 14h35

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