Bonjour,
J'ai un fichier de deux lignes.
J'aimerais récupérer la séquence afin de pouvoir la traiter mais elle fait 247249719 lettre et je n'arrive pas à la récupérer dans un scalaire. Mon idée était de récupérer cette séquence et de la couper en deux afin de créer deux demi séquences gérables par mon programme d'analyse. Ou alors le problème se pose au niveau du substr.>nom
sequence
Est-ce que quelqu'un a une idée sur la façon de procéder?
J'ai un autre problème avec ce script, c'est que dans ma sous routine "LectureRapide" si je ne mets pas "last;" et que j'ai des enters en fin de fichier après ma séquence, ils sont récupérer dans $SequenceTotale qui prend dont une "valeur vide".
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 #!/usr/bin/perl -w use strict; use warnings; use FileHandle; #----------------------------------- CouperLongueSeq -----------------------------------# # Ce programme prend un fichier FASTA et crée 2 nouveaux fichiers FASTA # contenant # - la première moitié de la séquence + un chevauchement # - la seconde moitié de la séquence - un chevauchement #----------------------------------- CouperLongueSeq -----------------------------------# my $Path = "P:/Theorie/HUMAIN"; my $Fich = "Seq_ref_chrtest1"; my $NouvFichA = FileHandle->new(">".$Path."/".$Fich."a.fsa"); my $NouvFichB = FileHandle->new(">".$Path."/".$Fich."b.fsa"); print $Fich."\n"; open(FICH, $Path."/".$Fich.".fsa") or print "IMPOSSIBLE D'OUVRIR LE FICHIER $Fich\n"; my $Seq_Reference = LectureRapide($Path."/".$Fich.".fsa"); my $Chevauchement = 500; my $Long_Seq = length($Seq_Reference); my $Sous_SeqA = substr($Seq_Reference, 0, $Long_Seq/2+$Chevauchement); my $Sous_SeqB = substr($Seq_Reference, $Long_Seq/2-$Chevauchement, $Long_Seq); print $NouvFichA ">".$Fich."A\n".$Sous_SeqA."\n"; print $NouvFichB ">".$Fich."B\n".$Sous_SeqB."\n"; close(FICH); sub LectureRapide { my $InFileRap = $_[0]; my $LigneFas; my $SequenceTotale; open(FileRap,$InFileRap) or print "IMPOSSIBLE D'OUVRIR LE FICHIER $InFileRap\n"; while ($LigneFas=<FileRap>) { if($LigneFas =~ /^([A-Z]*)$/i) { $SequenceTotale = $1; last; # on ne passera qu'une fois dans la boucle évite de récupérer les lignes vides de enter } } close(FileRap); return($SequenceTotale); }
J'ai une autre question dans /^([A-Z]*)$/ est-ce utile de mettre les ancres? Car j'ai l'impression qu'à cause de la proximité des parenthèses, cela est sans effet.
Où peut on trouver les informations au sujet des limitations de Perl? Ou alors est aussi un problème au niveau de mon PC? Mon programme d'analyse a réussi à traiter une séquence de 191273063 lettres sans que je ne doive la scinder en deux.
Merci de votre aide,
Jasmine,
Partager