Extraction d'un texte de X à Y

Le
Crayos
Bonjour tous,

J'ai un souci avec un script pour extraire un texte de X jusqu Y.
Pour faciliter ma question je vais utiliser un exemple de texte html

Donc je souhaite extraire un bout d'un texte html soit de <body>
</html> Notez au passage que ce pourait tre d'autres tags ou des mots
tout simplement de toto titi.

J'ai pour cela le script suivant:

$depart = "<body>";
$fin = "</html>";
$depart_length = length $depart;

open(FILE, "fichier.html") || die "I can't read that file";
undef $/;
chomp($file_body= <FILE>);
close FILE;

$file_depart = index($file_body,$depart);
$file_fin = index($file_body,$fin);
$Texte_voulu = substr($file_body,$file_depart + $depart_length,$fin -
($file_depart + $depart_length));


print "$Texte_voulu";
##############################

Si le premier mot de $depart (<body>)est extrait au bon endroit, par
contre le mot de $fin (</html>)est toujours faux. En rsum le script
n'extrait pas de <body> </html> mais de <body> ??? bien avant la
fin de la page.
En rsum n'y a t'il pas moyen d'extraire un texte de X Y ?

Dans le cas prsent c'est comme si le (length $depart;) jouait un
rle dans la longeur du texte_voulu.

J'ai parcouru toutes les archives fr.comp.lang.perl. sans touver une
solution.

Pouvez-vous m'aider.

Cordialement
Ger@ld
Vos réponses
Trier par : date / pertinence
Damien GUERIN
Le #12105
Moi je ferais plutot :

$depart = "<body>";
$fin = "</html>";
$debut_trouve=0;
open(FILE, "fichier.html") || die "I can't read that filen";
while (my $ligne=<FILE>) {
if ($ligne = ~ /E$departq/ ) {
$debut_trouve=1;
} elsif ($ligne = ~ /E$finq/ ) {
last;
} elsif ($debut_trouve) {
print $ligne;
}
}
close(FILE);



"Crayos"
Bonjour à tous,

J'ai un souci avec un script pour extraire un texte de X jusquà Y.
Pour faciliter ma question je vais utiliser un exemple de texte html

Donc je souhaite extraire un bout d'un texte html soit de <body> à
</html> Notez au passage que ce pourait être d'autres tags ou des mots
tout simplement de toto à titi.

J'ai pour cela le script suivant:

$depart = "<body>";
$fin = "</html>";
$depart_length = length $depart;

open(FILE, "fichier.html") || die "I can't read that filen";
undef $/;
chomp($file_body= <FILE>);
close FILE;

$file_depart = index($file_body,$depart);
$file_fin = index($file_body,$fin);
$Texte_voulu = substr($file_body,$file_depart + $depart_length,$fin -
($file_depart + $depart_length));


print "$Texte_voulu";
##############################

Si le premier mot de $depart (<body>)est extrait au bon endroit, par
contre le mot de $fin (</html>)est toujours faux. En résumé le script
n'extrait pas de <body> à </html> mais de <body> à ??? bien avant la
fin de la page.
En résumé n'y a t'il pas moyen d'extraire un texte de X à Y ?

Dans le cas présent c'est comme si le (length $depart;) jouait un
rôle dans la longeur du texte_voulu.

J'ai parcouru toutes les archives fr.comp.lang.perl. sans touver une
solution.

Pouvez-vous m'aider.

Cordialement

Crayos
Le #12104
Merci mais le script que vous m'avez donné ne fonctionne
malheureusement pas. Meilleures salutations
CB
Le #12103
Crayos wrote:
Donc je souhaite extraire un bout d'un texte html soit de <body> à
</html> Notez au passage que ce pourait être d'autres tags ou des mots
tout simplement de toto à titi.



Avec File::Slurp, je charge la totalité du fichier dans un scalaire,
puis supprime les marques de fin de lignes avec une regexp.
Ensuite, il est facile de faire ce que l'on veut sur la chaîne restante.

Mais ce n'est pas beau, pas portable, c'est gourmand en ressources...

CB.

Le_T
Le #12101
$seq =~ s/W//g; supprime les non alphanumériques

ensuite hum...

$seq =~ m/( print $2;

Pourquoi ne pas essayer?
CB
Le #12100
Le_T wrote:
$seq =~ s/W//g; supprime les non alphanumériques


Cela risque de dégager aussi les <, > ...

ensuite hum...

$seq =~ m/( print $2;

Pourquoi ne pas essayer?


Pour moi, cela marche bien en tout cas.
J'aurais bien sûr des problèmes s'il fallait reconstruire le fichier
d'origine, avec les sauts de lignes où il faut...
Mais puisque ce n'est pas nécessaire.

CB

Le_T
Le #12099
Alors dans ce cas on ne supprime pas les caractères, on ne fait qu'un
match... d'ailleurs il est meme possible que ca fonctionne en gardant
les sauts de ligne... a essayer
ZigZag15551
Le #12096
Le problème c'est ta variable $fin dans $Texte_voulu qui devrais être
$file_fin la référence à la position et non la celle du tag recherché.

Ça devrait aller mieux !!! :o)

$Texte_voulu = substr($file_body,$file_depart + $depart_length,$file_fin -
($file_depart + $depart_length));


Zigzag

################################
"Crayos"
Bonjour à tous,

J'ai un souci avec un script pour extraire un texte de X jusquà Y.
Pour faciliter ma question je vais utiliser un exemple de texte html

Donc je souhaite extraire un bout d'un texte html soit de <body> à
</html> Notez au passage que ce pourait être d'autres tags ou des mots
tout simplement de toto à titi.

J'ai pour cela le script suivant:

$depart = "<body>";
$fin = "</html>";
$depart_length = length $depart;

open(FILE, "fichier.html") || die "I can't read that filen";
undef $/;
chomp($file_body= <FILE>);
close FILE;

$file_depart = index($file_body,$depart);
$file_fin = index($file_body,$fin);
$Texte_voulu = substr($file_body,$file_depart + $depart_length,$fin -
($file_depart + $depart_length));


print "$Texte_voulu";
##############################

Si le premier mot de $depart (<body>)est extrait au bon endroit, par
contre le mot de $fin (</html>)est toujours faux. En résumé le script
n'extrait pas de <body> à </html> mais de <body> à ??? bien avant la
fin de la page.
En résumé n'y a t'il pas moyen d'extraire un texte de X à Y ?

Dans le cas présent c'est comme si le (length $depart;) jouait un
rôle dans la longeur du texte_voulu.

J'ai parcouru toutes les archives fr.comp.lang.perl. sans touver une
solution.

Pouvez-vous m'aider.

Cordialement


##############################
DoMinix
Le #11584
Crayos wrote:
Bonjour à tous,

J'ai un souci avec un script pour extraire un texte de X jusquà Y.
Pour faciliter ma question je vais utiliser un exemple de texte html

Donc je souhaite extraire un bout d'un texte html soit de <body> à
</html> Notez au passage que ce pourait être d'autres tags ou des mots
tout simplement de toto à titi.

J'ai pour cela le script suivant:

$depart = "<body>";
$fin = "</html>";
$depart_length = length $depart;

open(FILE, "fichier.html") || die "I can't read that filen";
undef $/;
chomp($file_body= <FILE>);
close FILE;

$file_depart = index($file_body,$depart);
$file_fin = index($file_body,$fin);
$Texte_voulu = substr($file_body,$file_depart + $depart_length,$fin -
($file_depart + $depart_length));


print "$Texte_voulu";
##############################

Si le premier mot de $depart (<body>)est extrait au bon endroit, par
contre le mot de $fin (</html>)est toujours faux. En résumé le script
n'extrait pas de <body> à </html> mais de <body> à ??? bien avant la
fin de la page.
En résumé n'y a t'il pas moyen d'extraire un texte de X à Y ?

Dans le cas présent c'est comme si le (length $depart;) jouait un
rôle dans la longeur du texte_voulu.

J'ai parcouru toutes les archives fr.comp.lang.perl. sans touver une
solution.

Pouvez-vous m'aider.

Cordialement




perl -n0777le 'print $1 if m{
ça marche pour moi :)

--
dominix

Publicité
Poster une réponse
Anonyme