Je me faisait une réflexion à propos du résultat de la commande string map.
Imaginons que je veuille faire la transformation suivante:
T1: A -> ABC
T2: B -> CAB
sur la chaîne ABA.
Si je le fais à la main:
T1: ABCBABC
T2: ACABCCABACABC
Maintenant si je le fais avec string map:
% info patchlevel
8.5.2
% set x ABA
ABA
% set y {A ABC B CAB}
A ABC B CAB
% string map $y $x
ABCCABABC
la logique voudrait qu'il applique successivement T1 et ensuite T2 sur le résultat.
Mais apparemment, le choix qui a été fait pour le comportement de string map
est d'appliquer toutes les transformations en même temps (en parallèle ?).
Ce qui me semble un peu étrange ?
Bon, après si je veux appliquer des transformations successives je peux me
tourner vers regsub:
% foreach {v p} $y {regsub -all $v $x $p x}
% puts $x
% ACABCCABACABC
Mais cela aurait été plus élégant avec string map.
GS - qui réfléchit trop
> la logique voudrait qu'il applique successivement T1 et ensuite T2 sur le résultat.
> Mais apparemment, le choix qui a été fait pour le comportement de string map
> est d'appliquer toutes les transformations en même temps (en parallèle ?).
> Ce qui me semble un peu étrange ?
Toutes les transformations sont appliquées sur la chaîne originale ($x
dans ton cas) justement pour éviter les problèmes de double-
substitution. Pour ce que tu veux faire, tu dois imbriquer les string
map.
Moi ça me semble logique.
--
David Zolli