[Résolu] Codes couleurs protégés ?
#1
Pour une fois, je poste pour faire travailler vos neurones.

Je me suis aperçu que lorsqu'il y a un code couleur dans un fichier externe au tcl, le tcl le protège et donc ne peut pas l'interpréter.

Pour faire simple:

Fichier source:
Code :
test : \002(\037)¯¯¯¯)¯¯¯¯¯¯¯¯¯¯¯\037)~~~\002

Script :
Code :
bind pub - "!read" goread

set filei "databases/small.db"
proc goread { user host handle chan args } {
   set fp [open $::filei "r"]
   set line [gets $fp]
   putserv "PRIVMSG #canal :$line"
   close $fp
}

Rendu : la ligne telle que présente dans le source, avec les \

Tests faits:
Code :
regsub -all -- \\\\ $line \ line
   regsub -all -- \\\\ $line \\ line
   regsub -all -- \\\\0 $line \\0 line
   regsub -all -- \\\\0(\d{1,} $line \\0\1 line
   regsub -all -- \\\\ $line "a" line
L'avant dernier fait perdre tout ce qui est coloré, le dernier provoque bien le remplacement du \ de la source par un a, donc il doit bien exister une astuce pour que le code soit interprété, non ?

Des idées ?
Répondre
#2
Un join sur la chaîne de caractères contenant des codes de style les interprètera, si toutefois j'ai bien compris ton problème en lisant vite fait.
Répondre Avertir
#3
Bravo ! Ce n'est vraiment pas une idée que j'aurais eue.
Répondre
#4
Et un string map serait pas une solution aussi pour les chaines de caractères ?
Répondre Avertir
#5
Non, ça n'a aucun rapport.
Le souci était que les codes couleurs ne sont pas interprétés, ce n'est pas (comme je le croyais au départ) un problème de substitution.
Répondre
#6
Je redonne l'explication qui a été donnée sur IRC afin que tout le monde puisse en profiter.

Les codes de style sont neutralisés dans les listes sans nécessiter de doubles antislash (\\) devant, ce qui peut être un peu perturbant puisqu'on s'attendrait par conséquent à ce qu'ils soient interprétés :

Citation :<MenzAgitat> .tcl return {ceci est un \00304test\003}
<Boole> Tcl: ceci est un \00304test\003
<MenzAgitat> .tcl return [join {ceci est un \00304test\003}]
<Boole> Tcl: ceci est un test
Répondre Avertir
#7
Et donc, il semblerait que gets retourne une liste et non pas une chaine.
Je ne sais pas s'il y a un moyen de vérifier ça
Répondre
#8
salut,
si mes souvenirs sont bon (et oui je n'ai pas codé depuis un moment) gets protège la liste de la façon suivante:
Code :
un petit {\00301test} {[test]} \{test\}
un moyen simple de vérifier l'état de la liste est de la réécrire directement dans un fichier avec
Code :
puts $file $line
(à vérifier quand même)
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é