Communauté sur les Eggdrops - Community about Eggdrops
Contrer la double subsitution - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (https://forum.eggdrop.fr)
+-- Forum: Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum: Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Thread: Contrer la double subsitution (/showthread.php?tid=448)



Contrer la double subsitution - Artix - 06/07/2009

En recherchant des moyens d'éviter la double-substitution (par exemple, dans les timers, pour éviter que les commandes s'éxecutent dans un pseudo contenant des crochets) - j'ai trouvé ce moyen :
Quote:proc autoSecure {input} { return \{[string map {\{ \\\{ \} \\\} \\ \\\\} $input]\} }

J'aimerais savoir si vous avez d'autres solutions plus simples, ou des cas dans lesquels ma solution ne marcherais pas (surement avec des listes j'immagine)


RE: Contrer la double subsitution - djkenny - 06/07/2009

salut,
ta proc n est pas tout a fait bonne

Code:
proc charfilter {arg} {
  string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} $arg
}
celle la debug les " [ { ] }
dans l absolut la tienne doit fonctionner mais elle est trés mal codé.
++


RE: Contrer la double subsitution - Artix - 09/07/2009

L'interet de ma version, c'est qu'elle escape seulement les { } \ et englobe ça entre accolades
Je suis quasiment certain quelle fonctionne sur les chaines litérales, mais pas vraiment sur pour les listes (pourrait ajouter un niveau de listes, tout ça...)


RE: Contrer la double subsitution - djkenny - 09/07/2009


Code:
proc charfilter {arg} {
  list [string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} $arg]
}
;)
edit: bien que tcl le fasse d origine :)


RE: Contrer la double subsitution - djkenny - 09/07/2009

sinon pour utiliser juste les { } \ ça donne

Code:
proc charfilter {arg} {
  list [string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}"} $arg]
}