Perl: mesurer une chaine et la modifier
Yonathan
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Perl: mesurer une chaine et la modifier
- Denon perl pro test - Accueil - Audio
- Active perl - Télécharger - Édition & Programmation
- DzSoft Perl Editor - Télécharger - Édition & Programmation
- Comment lire un fichier .pl perl ? - Forum Windows
- Perl: transformer un fichier en package ✓ - Forum Perl
1 réponse
hello
un essasi
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();