roievil Taking Fire, Need Assistance.. | il s'agit d'un code lisant un fichier au format FASTA, pour ceux qui connaissent, mais ca n'a pas trop d'importance : voici l'entrée : >chr1_1113 100080001 to 100180000
CACTAGATTTGTTTTTGTGTATCAGCAGATTATTTTATGTCACAGACATGAATAGTCAAA
ACTACTGATGTTAAATATTTGTATGCTCGTCTGTATTATTTGGTATATAGGAGCTGCTTC
TTCCCTGGCCTCACCCCAATTCCTATTTCTCACTTCAAAGGAAAGTATATATTTTCACAT
TACTTCAGTTGTCGGATTTGGGGGAAAATAAGAAAAATGTAATTTCTAACAGAGGTAACA
CCCATTATGTCTCAAACAGGATCAGCCATTGTTTGAAGTCATACAGGAAGCAATGCAAAA
...
voici ma commande : cat chr1.test.fa | perl -w splitSeqIdris.pl
ou chr1 est le fichier en entree dont je fournis un extrait ci dessus, et splitSeqIdris.pl le nom du script ci dessous
voici ce que m'affiche la console : [glorieux@lin2 ~]$ cat chr1.test.fa | perl -w splitSeqIdris.pl
ligne stdin : >chr1_1113 100080001 to 100180000
ligne : CACTAGATTTGTTTTTGTGTATCAGCAGATTATTTTATGTCACAGACATGAATAGTCAAA
Use of uninitialized value in subroutine entry at splitSeqIdris.pl line 26, <STDIN> line 2.
Can't use string ("" ) as a subroutine ref while "strict refs" in use at splitSeqIdris.pl line 26, <STDIN> line 2.
je ne comprends pas pourquoi $ligneEntree est vide et qd je l'affiche elle n'est pas vide?
voici mon code : Code :
- #!perl -w
- use strict;
- my $ligneEntree ;
- while ($ligneEntree = <STDIN> ) {
- print("ligne stdin : ".$ligneEntree);
- my $tailleMorceau = 1000;
- my $overlap = 100;
- my $compteur ;
- # verifier si la taille de morceau et l'overlap sont divisibles par 50
- if (($tailleMorceau % 50) != 0 || ($overlap % 50) != 0) {
- die("la taille de morceau ou l'overlap ne sont pas des mutliples de 50 " );
- }
- # si il s'agit d'un ligne de titre
- if (substr($ligneEntree,0,1)eq">" ) {
- $compteur = gerer($ligneEntree, $tailleMorceau, $overlap) ;
- # sinon c'est une ligne de corps
- } else {
- print("ligne : ".$ligneEntree);
- &$compteur($ligneEntree);
- }
- sub gerer {
- my $titre = shift ;
- my $tailleMorceau = shift ;
- my $overlap = shift ;
- # donne le nombre de ligne du morceau
- my $indexLigne = 0;
- # donne le nombre de caracteres dans la sequence avant fractionnement
- my $indexSequence = 0 ;
- my @tableauOverlap ;
- # donne la ligne a laquelle on est dans le tableau d'overlap
- my $indexOverlap = 0 ;
- # donne la taille maximale du tableau d'overlap
- my $indexOverlapMax = $overlap / 50 ;
- # afficher le titre pour la première fois
- print(">0-$tailleMorceau".substr($titre,1));
- return sub {
- my $ligne = shift ;
- print("ligne interne : ".$ligne);
- # mettre la ligne lue dans le tableau d'overlap
- $tableauOverlap[$indexOverlap] = $ligne ;
- $indexOverlap++ ;
- # si on atteint le bout du tableau circulaire on revient a debut du tableau
- if ($indexOverlap == $indexOverlapMax) {
- $indexOverlap = 0 ;
- }
- $indexLigne++ ;
- # si on a atteint la taille du morceau
- if ($indexLigne*50 == $tailleMorceau) {
- #afficher le nouveau titre
- print(">$indexSequence-($indexSequence+$tailleMorceau)".substr ($titre,1));
- #afficher le tableau d'overlap (pas encore fonctionnel)
- foreach my $i (@tableauOverlap)
- {
- print "$i\n";
- }
- $indexSequence += $tailleMorceau ;
- }
- }
- }
- }
|
|