Remplacement de clés par leurs valeurs dans une chaine

Le
GuiGui
Bonjour,

Je cherche à faire du remplacement clé/valeur dans une chaîne multiligne.

J'ai un tableau associatif :

%Assoc = ( "cle1" => "chaine", "cle2" => "repartie", "cle3" => "lignes" );


Et une chaîne multiligne :

$str = "Ceci est une #cle1# quiest #cle2# surplusieurs #cle3#";


Je veux obtenir pour str la valeur :
"Ceci est une chaine quiest repartie surplusieurs lignes"

Est-il possible de faire du remplacement via des regexp en utilisant des
variables ? Y a-t-il une autre méthode ?


Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thomas vO
Le #10860241
bonjour,

À (at) Mon, 30 Jun 2008 12:51:58 +0200,
GuiGui
Je cherche à faire du remplacement clé/valeur dans une chaà ®ne multiligne.

J'ai un tableau associatif :

%Assoc = ( "cle1" => "chaine", "cle2" => "repartie", "cle3" => "l ignes" );


Et une chaîne multiligne :

$str = "Ceci est une #cle1# quinest #cle2# surnplusieurs #cle3#n";


Je veux obtenir pour str la valeur :
"Ceci est une chaine quinest repartie surnplusieurs lignesn"

Est-il possible de faire du remplacement via des regexp en utilisant des
variables ? Y a-t-il une autre méthode ?



a priori , oui... un truc du genre :

$str =~ s/#(w*)#/$Assoc{$1}/g;

devrait fonctionner.

--
Thomas vO -
Paul Gaborit
Le #10860411
À (at) Mon, 30 Jun 2008 12:52:31 +0200,
Thomas vO
bonjour,

À (at) Mon, 30 Jun 2008 12:51:58 +0200,
GuiGui
Je cherche à faire du remplacement clé/valeur dans une chaîne multiligne.

J'ai un tableau associatif :

%Assoc = ( "cle1" => "chaine", "cle2" => "repartie", "cle3" => "lignes" );


Et une chaîne multiligne :

$str = "Ceci est une #cle1# quinest #cle2# surnplusieurs #cle3#n";


Je veux obtenir pour str la valeur :
"Ceci est une chaine quinest repartie surnplusieurs lignesn"

Est-il possible de faire du remplacement via des regexp en utilisant des
variables ? Y a-t-il une autre méthode ?



a priori , oui... un truc du genre :

$str =~ s/#(w*)#/$Assoc{$1}/g;

devrait fonctionner.



Il manque le modificateur /e pour que $Assoc{$1} soit évalué :

$str =~ s/#(w*)#/$Assoc{$1}/ge;


Je propose aussi de traiter les clés inexistantes ou indéfinies :

$str =~ s/#(w*)#/(defined $Assoc{$1}?$Assoc{$1}:"#$1#")/ge;

--
Paul Gaborit - Perl en français -
GuiGui
Le #10860631
Paul Gaborit a écrit :
À (at) Mon, 30 Jun 2008 12:52:31 +0200,
Thomas vO
bonjour,

À (at) Mon, 30 Jun 2008 12:51:58 +0200,
GuiGui
Je cherche à faire du remplacement clé/valeur dans une chaîne multiligne.

J'ai un tableau associatif :

%Assoc = ( "cle1" => "chaine", "cle2" => "repartie", "cle3" => "lignes" );


Et une chaîne multiligne :

$str = "Ceci est une #cle1# quinest #cle2# surnplusieurs #cle3#n";


Je veux obtenir pour str la valeur :
"Ceci est une chaine quinest repartie surnplusieurs lignesn"

Est-il possible de faire du remplacement via des regexp en utilisant des
variables ? Y a-t-il une autre méthode ?


a priori , oui... un truc du genre :

$str =~ s/#(w*)#/$Assoc{$1}/g;

devrait fonctionner.



Il manque le modificateur /e pour que $Assoc{$1} soit évalué :

$str =~ s/#(w*)#/$Assoc{$1}/ge;


Je propose aussi de traiter les clés inexistantes ou indéfinies :

$str =~ s/#(w*)#/(defined $Assoc{$1}?$Assoc{$1}:"#$1#")/ge;




Merci à tous les 2

:-)
Publicité
Poster une réponse
Anonyme