Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Limiter l'impression d'un texte par print

6 réponses
Avatar
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 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é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>

6 réponses

Avatar
Emmanuel Florac
Le Sat, 22 Dec 2012 12:09:49 -0600, erkaden a écrit:


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".

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
Avatar
espie
In article ,
erkaden wrote:
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
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é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.
Avatar
zerkaden
Le samedi 22 Décembre 2012 à 19:09 par 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 données. Voici ce que j'ai jusqu'ici :
open (seq,"./sequencetest.txt");


while () {



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


En gros, je pars d'un fichier contenant plusieurs séquences entières (par exemple, http://biocyc.org/BMEL359391/sequence-rc?type=GENE&object=GJOQ-2703) et 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 (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.
Avatar
Olivier Miakinen
Le 22/12/2012 20:03, zerkaden a écrit :

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
Avatar
zerkaden
Le samedi 22 Décembre 2012 à 22:24 par Olivier Miakinen :
Le 22/12/2012 20:03, zerkaden a écrit :

while () {

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!
Avatar
Olivier Miakinen
Le 23/12/2012 12:02, zerkaden a écrit :



Merci beaucoup, c'est résolu!



:-)