Rechercher : dans
Par :

Extraction texte sur plusieurs lignes en Perl

Dernière réponse le 30 oct 2007 à 08:37:24 gingerbrice, le 29 oct 2007 à 13:07:11 
 Signaler ce message aux modérateurs

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 !

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « extraction texte sur plusieurs lignes en Perl » dans :
Perl - Les fichiers Voir La notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
[Logiciels] Extraire toutes les images d'un PDF VoirVoici comment extraire toutes les images d'un fichier PDF. Avantage de cette méthode sur http://www.commentcamarche.net/faq/sujet-1036-: Les images sont extraites tel quel, sans perte de qualité (Par exemple, les JPEG sont extraits tel quel du...
Sed - Introduction à SED - Part III VoirSED - The Stream EDitor - Part III Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"...
Télécharger Some PDF Image Extract VoirLes documents PDF peuvent comporter du texte, des graphes, des tableaux mais aussi des images. Étant donné qu'il n'est pas possible d'en modifier le contenu, il en est de même pour l'extraction d'une image du contenu du document. Some PDF Image...
Perl - Caractéristiques du langage VoirFichier source, et interprétation Le fichier source d'un programme écrit en Perl est un simple fichier texte dont l'extension est par convention .pl. Ce fichier source doit être un fichier texte non formatté, c'est-à-dire un fichier texte dans sa...
Perl - Introduction VoirHistoire de Perl Perl (Practical Extraction and Report Language) est un langage de programmation dérivé des scripts shell, créé en 1986 par Larry Wall afin de mettre au point un système de News entre deux réseaux. Il s'agit d'un langage interprété...

1

lami20j, le 29 oct 2007 à 13:56:03

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 ;-)
lami20j

Répondre à lami20j

2

lami20j, le 29 oct 2007 à 13:59:50

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

lami20j

Répondre à lami20j

3

gingerbrice, le 29 oct 2007 à 14:19:27

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.

Répondre à gingerbrice

4

 gingerbrice, le 30 oct 2007 à 08:37:24

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

Répondre à gingerbrice