OVH Cloud OVH Cloud

Parse des lignes

2 réponses
Avatar
Bibi69
Bonjour,
je debute Perl et je butte sur un problème :
pour faire bref, j'ai une chaîne $str constituée de plusieurs lignes. Je
veux recuperer des infos dedans (plusieurs sur une même ligne). Je fais :
while(<>){
if(/avant_1ere_valeur/){
s/avant_1ere_//;
s/apres_1ere_valeur//;
$1ere_valeur=$$_;
}}

Ca marche. Mais si je veux recuperer ma deuxieme valeur et que je fais :
$_=$str;
while(<>){
if(/avant_2eme_valeur/){
s/avant_2eme_//;
s/apres_2eme_valeur//;
$2ere_valeur=$$_;
}}

Alors mon prg ne rentre même pas dans la boucle et ne se termine pas.

Kkun sait ce que je dois faire pour recuperer plusieurs valeurs sur une
même ligne ?
Merci

2 réponses

Avatar
patrick
Bonjour,

Le mieux est de faire:
while(<>)
{
if ($_ =~ /(première_valeur).*(seconde_valeur)/)
{
$val1 = $1 ;
$val2 = $2;
}
}

Les parenthèse dans l'expression régulière permettent d'affecter aux
variables $1 (pour la première paire de parenthèses) et $é (pour la
seconde), le motif que tu recherches.


Bibi69 wrote:

Bonjour,
je debute Perl et je butte sur un problème :
pour faire bref, j'ai une chaîne $str constituée de plusieurs lignes. Je
veux recuperer des infos dedans (plusieurs sur une même ligne). Je fais :
while(<>){
if(/avant_1ere_valeur/){
s/avant_1ere_//;
s/apres_1ere_valeur//;
$1ere_valeur=$$_;
}}

Ca marche. Mais si je veux recuperer ma deuxieme valeur et que je fais :
$_=$str;
while(<>){
if(/avant_2eme_valeur/){
s/avant_2eme_//;
s/apres_2eme_valeur//;
$2ere_valeur=$$_;
}}

Alors mon prg ne rentre même pas dans la boucle et ne se termine pas.

Kkun sait ce que je dois faire pour recuperer plusieurs valeurs sur une
même ligne ?
Merci


Avatar
Bibi69
Bonjour,

Le mieux est de faire:
while(<>)
{
if ($_ =~ /(première_valeur).*(seconde_valeur)/)
{
$val1 = $1 ;
$val2 = $2;
}
}

Les parenthèse dans l'expression régulière permettent d'affecter aux
variables $1 (pour la première paire de parenthèses) et $é (pour la
seconde), le motif que tu recherches.


Bibi69 wrote:

Bonjour,
je debute Perl et je butte sur un problème :
pour faire bref, j'ai une chaîne $str constituée de plusieurs lignes. Je
veux recuperer des infos dedans (plusieurs sur une même ligne). Je fais :
while(<>){
if(/avant_1ere_valeur/){
s/avant_1ere_//;
s/apres_1ere_valeur//;
$1ere_valeur=$$_;
}}

Ca marche. Mais si je veux recuperer ma deuxieme valeur et que je fais :
$_=$str;
while(<>){
if(/avant_2eme_valeur/){
s/avant_2eme_//;
s/apres_2eme_valeur//;
$2ere_valeur=$$_;
}}

Alors mon prg ne rentre même pas dans la boucle et ne se termine pas.

Kkun sait ce que je dois faire pour recuperer plusieurs valeurs sur une
même ligne ?
Merci




Impecable, ça marche super bien.

Merci