Perl: mesurer une chaine et la modifier

Fermé
Yonathan - 9 oct. 2010 à 13:58
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 11 oct. 2010 à 13:40
Bonjour à tous
C'est mon premier message sur ce forum. Donc je vais me présenter rapidement: je m'appelle Yonathan, je suis thésard en biologie moléculaire, et je débute en programmation.

Je m'adresse à vous car j'ai besoin d'un coup de main pour écrire un script perl.
Comme indiqué ci-dessus, je débute. J'ai le camel-book à coté de moi, mais je dois avouer que je m'y perd un peu.

Voici mon problème.
Je dispose d'un fichier texte contenant ceci:

>moi_toto_grand_et_beau
ATGCTAGTCGATGCTGATCGTA
ATGGTAGTGCGCCGATGCGTCA
TGAGTCC

>moi_john_petit_et_moche
ATGCTGTAGTCGTACTTGAT
TGACTAGCCATCACTACGTC
TGCATACGGATGT

Je ne marque que 2 "séquences", mais il y en a plusieurs milliers.

J'essaye de faire un script qui soit capable de compter le nombre de caractères compris entre la fin de la 1ere ligne et la fin de la séquence, et d'ajouter cette valeur à la premiere ligne (sous la forme length=X)

Pour plus de clarté, le fichier final ressemblerait à ca:

>moi_toto_grand_et_beau length=49
ATGCTAGTCGATGCTGATCGTA
ATGGTAGTGCGCCGATGCGTCA
TGAGTCC

>moi_john_petit_et_moche length=53
ATGCTGTAGTCGTACTTGAT
TGACTAGCCATCACTACGTC
TGCATACGGATGT

J'ai compris qu'il existe une fonction "LENGTH" dans perl, pour mesurer une chaine de caractère, mais je ne comprend pas comment dire au script de ne compter qu'entre mes 2 balises

J'espère que l'un de vous pourra m'aider

Merci d'avance pour vos réponses


A voir également:

1 réponse

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
11 oct. 2010 à 13:40
hello
un essasi
 $ ./p7 fichier
>moi_toto_grand_et_beau length=51
ATGCTAGTCGATGCTGATCGTA
ATGGTAGTGCGCCGATGCGTCA
TGAGTCC

>moi_john_petit_et_moche length=54
ATGCTGTAGTCGTACTTGAT
TGACTAGCCATCACTACGTC
TGCATACGGATGT 
$ 
$ cat p7
#!/usr/bin/perl

$l=0;
$n=0;
@x=();
open(FILEINPUT,"$ARGV[0]") || die "erreur de lecture de fichier :$!";
while ($ligne=<FILEINPUT>) {
    chop($ligne);
    @x[$n++]=$ligne;
}

for($i=0 ; $i < $n ; $i++ ) {
    if (@x[$i] =~ /^\>/) {
        $ii=$i;
        while(@x[++$i] =~ /^[A-Z]/) {
            $l+=length(@x[$i]);
        }
        @x[$ii] .= " length=" . $l;
        $l=0;
    }
}
for($i=0 ; $i < $n ; $i++) {
    printf("%s\n", @x[$i]);
    }
exit();

0