Extraction texte sur plusieurs lignes en Perl

Résolu/Fermé
gingerbrice Messages postés 5 Date d'inscription lundi 29 octobre 2007 Statut Membre Dernière intervention 30 avril 2008 - 29 oct. 2007 à 13:07
Mortagus Messages postés 2 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 23 septembre 2013 - 19 févr. 2010 à 17:29
Bonjour,

je souhaiterais pouvoir recuperer une partie du texte qui se trouve dans un fichier dont la structure est la suivante :

...
<td valign=top><b>TOPO_DOM</b></td>
<td valign=top nowrap><b><a href="/cgi-bin/sprot-ft-details.pl?Q14332@TOPO_DOM@24@247">24-247</a></b></td>
<td valign=top><b>224</b></td>
<td ><b>Extracellular (Potential)</b><br><tt>QFHGEKGISI PDHGFCQPIS IPLCTDIAYN QTIMPNLLGH TNQEDAGLEV HQFYPLVKVQ
CSPELRFFLC SMYAPVCTVL EQAIPPCRSI CERARQGCEA LMNKFGFQWP ERLRCEHFPR
HGAEQICVGQ NHSEDGAPAL LTTAPPPGLQ PGAGGTPGGP GGGGAPPRYA TLEHPFHCPR
VLKVPSYLSY KFLGERDCAA PCEPARPDGS MFFSQEETRF ARLW
</tt></td>
</tr>
<tr bgcolor="#FFFFCC">
<td valign=top><input type=checkbox name=seq value=">Q14332|TRANSMEM_248-268 1 (Potential)
ILTWSVLCCASTFFTVTTYLV"></td>
<td valign=top><b>TRANSMEM</b></td>
<td valign=top nowrap><b><a href="/cgi-bin/sprot-ft-details.pl?Q14332@TRANSMEM@248@268">248-268</a></b></td>
<td valign=top><b>21</b></td>
<td ><b>1 (Potential)</b><br><tt>ILTWSVLCCA STFFTVTTYL V </tt></td>
</tr>
<tr bgcolor="#FFFFCC">
<td valign=top><input type=checkbox name=seq value=">Q14332|TOPO_DOM_269-279 Cytoplasmic (Potential)
DMQRFRYPERP"></td>
<td valign=top><b>TOPO_DOM</b></td>
...



La partie qui m'interesse est la chaine de caractere en majuscule située près de l'expression "Extracellular (Potential)", et qui se termine juste avant la balise "</tt>". comme elle est sur plusieurs lignes, je ne sais pas trop comment faire.

Merci de votre aide !
A voir également:

5 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
29 oct. 2007 à 13:56
Salut,

#!/usr/bin/perl
use strict;use warnings;

while(<DATA>){print if /Extracellular/ ... /<\/tt/}
__END__
<td valign=top><b>TOPO_DOM</b></td>
<td valign=top nowrap><b><a href="/cgi-bin/sprot-ft-details.pl?Q14332@TOPO_DOM@24@247">24-247</a></b></td>
<td valign=top><b>224</b></td>
<td ><b>Extracellular (Potential)</b><br><tt>QFHGEKGISI PDHGFCQPIS IPLCTDIAYN QTIMPNLLGH TNQEDAGLEV HQFYPLVKVQ
CSPELRFFLC SMYAPVCTVL EQAIPPCRSI CERARQGCEA LMNKFGFQWP ERLRCEHFPR
HGAEQICVGQ NHSEDGAPAL LTTAPPPGLQ PGAGGTPGGP GGGGAPPRYA TLEHPFHCPR
VLKVPSYLSY KFLGERDCAA PCEPARPDGS MFFSQEETRF ARLW </tt></td>
</tr>
<tr bgcolor="#FFFFCC">
<td valign=top><input type=checkbox name=seq value=">Q14332|TRANSMEM_248-268 1 (Potential)
ILTWSVLCCASTFFTVTTYLV"></td>
<td valign=top><b>TRANSMEM</b></td>
<td valign=top nowrap><b><a href="/cgi-bin/sprot-ft-details.pl?Q14332@TRANSMEM@248@268">248-268</a></b></td>
<td valign=top><b>21</b></td>
<td ><b>1 (Potential)</b><br><tt>ILTWSVLCCA STFFTVTTYL V </tt></td>
</tr>
<tr bgcolor="#FFFFCC">
<td valign=top><input type=checkbox name=seq value=">Q14332|TOPO_DOM_269-279 Cytoplasmic (Potential)
DMQRFRYPERP"></td>
<td valign=top><b>TOPO_DOM</b></td>
On obtiens
root@debian:~# perl ccm.pl
<td ><b>Extracellular (Potential)</b><br><tt>QFHGEKGISI PDHGFCQPIS IPLCTDIAYN QTIMPNLLGH TNQEDAGLEV HQFYPLVKVQ
CSPELRFFLC SMYAPVCTVL EQAIPPCRSI CERARQGCEA LMNKFGFQWP ERLRCEHFPR
HGAEQICVGQ NHSEDGAPAL LTTAPPPGLQ PGAGGTPGGP GGGGAPPRYA TLEHPFHCPR
VLKVPSYLSY KFLGERDCAA PCEPARPDGS MFFSQEETRF ARLW </tt></td>
Il te reste à supprimer les balises de début est fin.
Je n'ai pas le temps d'entrer dans les détails, je suis au boulot ;-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
29 oct. 2007 à 13:59
Tiens une autre version

#!/usr/bin/perl
use strict;use warnings;

my @tab;
while(<DATA>){push @tab,$_ if /Extracellular/ ... /<\/tt/}
grep { s/<.*?\/?>//g } @tab;
print "@tab\n";
__END__
<td valign=top><b>TOPO_DOM</b></td>
<td valign=top nowrap><b><a href="/cgi-bin/sprot-ft-details.pl?Q14332@TOPO_DOM@24@247">24-247</a></b></td>
<td valign=top><b>224</b></td>
<td ><b>Extracellular (Potential)</b><br><tt>QFHGEKGISI PDHGFCQPIS IPLCTDIAYN QTIMPNLLGH TNQEDAGLEV HQFYPLVKVQ
CSPELRFFLC SMYAPVCTVL EQAIPPCRSI CERARQGCEA LMNKFGFQWP ERLRCEHFPR
HGAEQICVGQ NHSEDGAPAL LTTAPPPGLQ PGAGGTPGGP GGGGAPPRYA TLEHPFHCPR
VLKVPSYLSY KFLGERDCAA PCEPARPDGS MFFSQEETRF ARLW </tt></td>
</tr>
<tr bgcolor="#FFFFCC">
<td valign=top><input type=checkbox name=seq value=">Q14332|TRANSMEM_248-268 1 (Potential)
ILTWSVLCCASTFFTVTTYLV"></td>
<td valign=top><b>TRANSMEM</b></td>
<td valign=top nowrap><b><a href="/cgi-bin/sprot-ft-details.pl?Q14332@TRANSMEM@248@268">248-268</a></b></td>
<td valign=top><b>21</b></td>
<td ><b>1 (Potential)</b><br><tt>ILTWSVLCCA STFFTVTTYL V </tt></td>
</tr>
<tr bgcolor="#FFFFCC">
<td valign=top><input type=checkbox name=seq value=">Q14332|TOPO_DOM_269-279 Cytoplasmic (Potential)
DMQRFRYPERP"></td>
<td valign=top><b>TOPO_DOM</b></td>
Le résultat
root@debian:~# perl ccm.pl
Extracellular (Potential)QFHGEKGISI PDHGFCQPIS IPLCTDIAYN QTIMPNLLGH TNQEDAGLEV HQFYPLVKVQ
 CSPELRFFLC SMYAPVCTVL EQAIPPCRSI CERARQGCEA LMNKFGFQWP ERLRCEHFPR
 HGAEQICVGQ NHSEDGAPAL LTTAPPPGLQ PGAGGTPGGP GGGGAPPRYA TLEHPFHCPR
 VLKVPSYLSY KFLGERDCAA PCEPARPDGS MFFSQEETRF ARLW
0
gingerbrice Messages postés 5 Date d'inscription lundi 29 octobre 2007 Statut Membre Dernière intervention 30 avril 2008
29 oct. 2007 à 14:19
Super je devrai arriver à me debrouiller avec ça.
Merci bcp lami20j !
je mettrai le sujet en résolu quand j'aurai fini de traiter mes fichiers.
0
gingerbrice Messages postés 5 Date d'inscription lundi 29 octobre 2007 Statut Membre Dernière intervention 30 avril 2008
30 oct. 2007 à 08:37
Donc le code qui ma permis de resoudre mon probleme est

my @tab;
while(<DATA>){push @tab,$_ if /Extracellular/ ... /<\/tt/}
grep { s/<.*?\/?>//g } @tab;
print "@tab\n";

Encore merci lami20j
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mortagus Messages postés 2 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 23 septembre 2013
19 févr. 2010 à 17:29
bonjour a tous,

j'ai un problème similaire a notre ami gingerbrice:

voici mon texte :

ID Q8VLP7_STRAG Unreviewed; 544 AA.
AC Q8VLP7;
DT 01-MAR-2002, integrated into UniProtKB/TrEMBL.
DT 01-MAR-2002, sequence version 1.
DT 09-FEB-2010, entry version 23.
DE SubName: Full=Group B streptococcus secreted protein;
DE Flags: Precursor;
GN Name=bsp;
OS Streptococcus agalactiae sophisticae ultrae compilatum (message entre
OS parentheses).
OC Bacteria; Firmicutes; Lactobacillales; Streptococcaceae;
OC Streptococcus.
OX NCBI_TaxID=1311;
la partie en gras est le texte qui m'interresse. J'aimerais bien utiliser uniquement les regex afin de pouvoir extraire cette partie de texte. Tout en sachant qu'il me faut que les informations des lignes commençant par le même "identifiant".

J'ai pondu ceci : (.?OS (.*)\n?)+\.

mais ça ne me permet pas d'avoir que le texte sans les à coté.

Pouvez-vous m'aider ?
0