Contrer la double subsitution
#1
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 :
Citation :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)
Répondre Avertir
#2
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é.
++
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#3
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...)
Répondre Avertir
#4
Code :
proc charfilter {arg} {
  list [string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} $arg]
}
Wink
edit: bien que tcl le fasse d origine Smile
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#5
sinon pour utiliser juste les { } \ ça donne
Code :
proc charfilter {arg} {
  list [string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}"} $arg]
}
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté