Bonjour tous le monde,
Je débute en perl, et je crois avoir un problème de boucle infinie. Voila j'ai un répertoire dans lequel se trouve des fiches EMBL. Je dois parcourir chaque fiche de mon répertoire pour y extraire le numéro d'accession de mes séquences ainsi que les séquences et le écrire dans un autre fichier.
J'ai donc fais cela:Je n'arrive pas à trouver mon erreur, alors si vous avez des conseilles pour moi je suis preneuse
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 #!/usr/bin/perl use warnings; use strict; my $sequence=""; my $seq; my $id; my $ficheEMBL="ID+fiche"; my $nomFichier="ID+fiche"; my $line=""; # ouvre le répertoire contenant toutes les fiches EMBL.txt opendir(DIR,$ficheEMBL) || die "Impossible d'ouvrir le fichier"; open(OUT, ">totalNumAc+Seq.txt") || die "Impossible d'ouvrir le fichier"; while($nomFichier = readdir(DIR)) { # ouvre chaque fichier comprit dans le repertoire open(FILE,$ficheEMBL."/".$nomFichier)||die "Impossible d'ouvrir le fichier"; #regarde s'il y a des fichiers cachés "." ou/et ".." si oui passe les fichiers sans les traiter if($nomFichier eq "." or $nomFichier eq "..") { # permet de passer le fichier next; } while ($line = <FILE>) { if ($line =~ m/^AC\s+(\S+);/m) { my $id = $1 ; print OUT ">$id, "; } elsif ($line =~ m/^DE\s+([^\n]+)/mg) { my $title = $1; print OUT" $title "; } # quand on arrive à la séquence on met $seq à 1 # afin de récupérer les lignes suivantes elsif ($line =~ m/^SQ/) { $seq = 1; } # si $seq est à 1, cela signifie que nous sommes dans la séquence # donc on récupère la ligne dans la variable $sequence elsif ( ($seq) && ($line =~ /([\sa-z]+)\d+/)) { $sequence.= $1; $sequence =~ tr/acgt/ACGT/; } } # suppression des espaces $sequence =~ s/\s//g; print OUT "\n$sequence."; close (FILE) || die "Impossible de fermer le fichier"; exit(0); } close (OUT) || die "imposible de fermer le fichier"; # ferme le répertoire closedir (DIR) || die "Impossible de fermer le répertoire";
Partager