Messages : 2,396
Sujets : 206
Inscription : Apr 2004
30/09/2013, 16:59
(Modification du message : 01/10/2013, 13:27 par CrazyCat.)
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 ?
Messages : 943
Sujets : 93
Inscription : Jul 2007
30/09/2013, 17:42
(Modification du message : 30/09/2013, 17:43 par MenzAgitat.)
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.
Toute l'actualité de mes scripts ici (dernière mise à jour le 03/04/2025)
Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
Messages : 2,396
Sujets : 206
Inscription : Apr 2004
Bravo ! Ce n'est vraiment pas une idée que j'aurais eue.
Messages : 710
Sujets : 65
Inscription : Apr 2010
Et un string map serait pas une solution aussi pour les chaines de caractères ?
Messages : 2,396
Sujets : 206
Inscription : Apr 2004
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.
Messages : 943
Sujets : 93
Inscription : Jul 2007
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
Toute l'actualité de mes scripts ici (dernière mise à jour le 03/04/2025)
Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
Messages : 2,396
Sujets : 206
Inscription : Apr 2004
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
Messages : 383
Sujets : 7
Inscription : Dec 2007
02/10/2013, 13:15
(Modification du message : 02/10/2013, 13:15 par djkenny.)
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
(à vérifier quand même)
C'est en reconnaissant ses erreurs que l'on progresse