Extraction texte sur plusieurs lignes en Perl

[Résolu/Fermé]
Signaler
Messages postés
5
Date d'inscription
lundi 29 octobre 2007
Statut
Membre
Dernière intervention
30 avril 2008
-
Messages postés
2
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
23 septembre 2013
-
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 !

5 réponses

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 554
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 ;-)
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 554
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
Messages postés
5
Date d'inscription
lundi 29 octobre 2007
Statut
Membre
Dernière intervention
30 avril 2008

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.
Messages postés
5
Date d'inscription
lundi 29 octobre 2007
Statut
Membre
Dernière intervention
30 avril 2008

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
Messages postés
2
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
23 septembre 2013

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 ?