Discussion:
Limiter l'impression d'un texte par print
(trop ancien pour répondre)
erkaden
2012-12-22 18:09:49 UTC
Permalink
Bonjour,

Dans le cadre d'une évaluation, je dois créer un programme perl qui me perme
d'imprimer les premiers caractères d'une séquence d'ADN dans une base d
données. Voici ce que j'ai jusqu'ici :
open (seq,"./sequencetest.txt");


while (<seq>) {



if (/^atg/) {$ligne=$_;}

$debut=substr($ligne,0,8);
print "$debutn";
}



Ce programme me permet bien de sortir les 8 premiers caractères d'une séquenc
(commençant par atg), mais le souci est que ces caractères sont imprimés e
grand nombre (une impression par ligne de séquence apparemment)... Commen
puis-je faire pour n'imprimer qu'une seule fois les mêmes caractères?

Un grand merci pour votre aide!

PS : les parenthèses de la ligne while entourent <seq>
Emmanuel Florac
2012-12-22 18:32:17 UTC
Permalink
Post by erkaden
Ce programme me permet bien de sortir les 8 premiers caractères d'une
séquence (commençant par atg), mais le souci est que ces caractères sont
imprimés en grand nombre (une impression par ligne de séquence
apparemment)...
Ben oui, le programme affiche chaque début de ligne qui "matche".
Post by erkaden
Comment puis-je faire pour n'imprimer qu'une seule fois
les mêmes caractères?
Pas compris. Quels caractères, les "atg" du début?


Note: puis si tu n'as pas compris le programme simplissime que tu as
posté, ne viens pas sur les forums pour qu'on fasse tes devoirs pour toi:
ce n'est pas un service à te rendre.
--
I have always wished for my computer to be as easy to use as my
telephone; my wish has come true because I can no longer figure out
how to use my telephone.
Bjarne Stroustrup
Marc Espie
2012-12-22 18:40:29 UTC
Permalink
Post by erkaden
Bonjour,
Dans le cadre d'une évaluation, je dois créer un programme perl qui me permet
d'imprimer les premiers caractères d'une séquence d'ADN dans une base de
open (seq,"./sequencetest.txt");
while (<seq>) {
if (/^atg/) {$ligne=$_;}
$debut=substr($ligne,0,8);
print "$debutn";
}
Ce programme me permet bien de sortir les 8 premiers caractères d'une séquence
(commençant par atg), mais le souci est que ces caractères sont imprimés en
grand nombre (une impression par ligne de séquence apparemment)... Comment
puis-je faire pour n'imprimer qu'une seule fois les mêmes caractères?
Utilise un hash.
zerkaden
2012-12-22 19:03:36 UTC
Permalink
Post by erkaden
Bonjour,
Dans le cadre d'une évaluation, je dois créer un programme perl
qui me permet d'imprimer les premiers caractères d'une séquence
open (seq,"./sequencetest.txt");
while (<seq>) {
if (/^atg/) {$ligne=$_;}
$debut=substr($ligne,0,8);
print "$debutn";
}
Ce programme me permet bien de sortir les 8 premiers caractères d'une
séquence (commençant par atg), mais le souci est que ces
caractères sont imprimés en grand nombre (une impression par
ligne de séquence apparemment)... Comment puis-je faire pour n'imprimer
qu'une seule fois les mêmes caractères?
Un grand merci pour votre aide!
PS : les parenthèses de la ligne while entourent <seq>
En gros, je pars d'un fichier contenant plusieurs séquences entières (pa
exemple, http://biocyc.org/BMEL359391/sequence-rc?type=GENE&object=GJOQ-2703) e
je dois en faire ressortir les 8 premiers caractères (commençant par atg).

J'arrive bien à imprimer les 8 premiers caractères de chaque séquence (ic
atgTCCAC, mais ceux-ci sont imprimés plusieurs fois. Or, ces caractères ne son
présents qu'une seule fois dans la séquence, d'où mon incompréhension. J'espèr
que c'est plus clair.
Olivier Miakinen
2012-12-22 21:24:36 UTC
Permalink
Post by erkaden
while (<seq>) {
if (/^atg/) {$ligne=$_;}
$debut=substr($ligne,0,8);
print "$debutn";
}
J'arrive bien à imprimer les 8 premiers caractères de chaque séquence (ici
atgTCCAC, mais ceux-ci sont imprimés plusieurs fois. Or, ces caractères ne sont
présents qu'une seule fois dans la séquence, d'où mon incompréhension. J'espère
que c'est plus clair.
Oui, c'est très clair. En gros, tu voudrais que les instructions substr
et print ne soient exécutées que lorsque le test if est vrai. Eh bien
regarde donc où s'arrête la liste d'instructions suivant le if, c'est-
à-dire regarde où tu as placé tes accolades.

Cordialement,
--
Olivier Miakinen
zerkaden
2012-12-23 11:02:58 UTC
Permalink
Post by Olivier Miakinen
Post by erkaden
while (<seq>) {
if (/^atg/) {$ligne=$_;}
$debut=substr($ligne,0,8);
print "$debutn";
}
J'arrive bien à imprimer les 8 premiers caractères de chaque séquence (ici
atgTCCAC, mais ceux-ci sont imprimés plusieurs fois. Or, ces
caractères ne sont
présents qu'une seule fois dans la séquence, d'où mon
incompréhension. J'espère
que c'est plus clair.
Oui, c'est très clair. En gros, tu voudrais que les instructions substr
et print ne soient exécutées que lorsque le test if est vrai. Eh bien
regarde donc où s'arrête la liste d'instructions suivant le if, c'est-
à-dire regarde où tu as placé tes accolades.
Cordialement,
--
Olivier Miakinen
Merci beaucoup, c'est résolu!
Olivier Miakinen
2012-12-23 17:47:34 UTC
Permalink
Post by zerkaden
Merci beaucoup, c'est résolu!
:-)

Loading...