Bug TCL sur un bind raw
#16
djkenny a écrit :
tcl
set text [split $arg]
# a remplacer par:
set text [string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} $arg]


qui a pour effet de déboguer les "{ [ " ] }"


édit: a parement le forum n aime pas mon code
set text [string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} $arg]

Tu dis un peu n'importe quoi la c'est dommage Smile
http://xineos.free.fr/listes_tcl.html
Répondre Avertir
#17
salut Merwin,
t'a pas tout a fait tort en fait mais dans le cas présent le split est utilisé pour déboguer les " { [ ] } qui pourai etre présent dans le message (t'as jamais du scripter de socket sinon t aurais compris) si jamais un gars fait un c/c d une proc sur un chan t a ton bot qui sort une erreur genre missing close-brace et le bot déconnect...
le string map sert a remplacer un [ par \[ (par exemple) pour éviter ces erreurs la
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#18
heu, si Merwin n'a jamais codé un socket, je n'ai jamais fait un site web... avis personnel.
Répondre
#19
Ce problème survient uniquement quand tu utilises [lindex], [lrange] etc sur des chaines qui ne sont pas des listes (cad qui ne sont pas split).
Dans sont cas il utilise [lrange] 3 lignes plus bas, si tu lui vires le split ça va faire planter son programme.

Lis mon tutorial tu comprendras mieux le pourquoi du comment.
Répondre Avertir
#20
ben écoute c est peu etre un bug d eggdrop alors mais si t ouvre un interpréteur tcl "pur" tu verra que ça fonctionne très bien Wink
j ai abandonné eggdrop depuis bien longtemps lol. c est bien mieu de coder en tcl pur ...
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#21
Ok tu rox et j'ai tort Smile
Répondre Avertir
#22
Hum, je propose d'ouvrir une section "tcl" qui ne concerne pas eggdrop, parce que sinon on ne va pas s'en sortir. tcl est interprété, donc la programmation dépend de l'interpréteur, celui qui nous concerne avant tout est Eggdrop, mais il peut être intéressant d'avoir une partie sur le tcl pur...
Répondre
#23
...
tcl
debian:~# tclsh8.5
% set var "ma liste foireuse"
ma liste foireuse
% set var [linsert $var 1 \"]
ma {"} liste foireuse
% set var [linsert $var 1 \}]
ma \} {"} liste foireuse
% set var [join $var]
ma } " liste foireuse
% lindex $var 0
unmatched open quote in list
% lindex [string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} $var] 0
ma


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#24
ben a parement ca revien au meme Mad
tcl
% split "{salut tout le monde} { comment allez-vous?}"
\{salut tout le monde\} \{ comment allez-vous?\}
% string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} "{salut tout le monde} { comment allez-vous?}"
\{salut tout le monde\} \{ comment allez-vous?\}


en tous cas sur un interpreteur tclsh8.5
a voir dans un eggdrop
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#25
tcl
% split {" test [ ]}
{"} test {[} \]
% string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} {" test [ ]}
\" test \[ \]




édit:
voila le bug que je cherchai avec split Smile
avec split on obtient
tcl
% set var [split $var]
ma \} {"} liste foireuse
% set var "ma \} {"} liste foireuse"
extra characters after close-quote


avec ma methode
tcl
% string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} $var
ma \} \" liste foireuse
% set var "ma \} \" liste foireuse"
ma } " liste foireuse



je pense que ca se passe de commentaire nan?
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#26
Oui oui t'as raison, utilises ta méthodes je t'ai dis je m'en fiche! Libres à toi de ne peux pas vouloir comprendre.
Mais par contre:

tcl
% set var "ma \} {"} liste foireuse"



Evites de ma donner ce genre d'exemple... Parce que le soucis ne vient même pas de la liste mais du fait que tu fermes les " et que tu fous quelque chose derrière. C'est comme si je fais:

tcl
set var "salut"lol mdr



Forcément ça marche pas.
Sur ce, sujet clos, utilises ton string map si ça te chantes Smile

@CrazyCat: Eggdrop intègre exactement le même interpréteur que tclsh, il y ajoute ses propres commandes, donc toutes les fonctions de bases sont identiques sous Eggdrop ou sous tclsh.
Répondre Avertir
#27
en fait j pense pas que t es compris ce que je veux dire. bref comme j ai dit plus haut ce que tu dit est vrai! MAIS DANS CERTAINS CAS split n est pas la meilleur solution.
par exemple lors d un control de socket
tcl
proc control { sock } {
 global bp auth mods
  set argc [gets $sock arg]
  set arg [charfilter $arg]
....


(charfilter est la proc contenant le tring map)
dans ce cas la avec split tclsh plante lorsque arg contient un "
le string map corrige le problème
problème qui ne devrai pas se poser avec eggdrop puisqu'il intègre arg directement dans la procedure (et encore j suis même pas sur que le " ne fasse pas planter sur un putserv)
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#28
Oui, parceque tu utilises lindex ou lrange directement sur le $arg, donc forcément ça plante puisque gets retourne une chaine. Tu ne DOIS PAS utiliser lindex ou toute autre fonction de liste sur une chaine. Au final ta proc elle convertie la chaine en liste (enfin partiellement, par exemple, impossible de faire un élément qui contient plusieurs mots...) exactement de la meême façon que split.

Ca fonctionne, mais c'est pas la bonne méthode. La fonction split convertit une chaine en liste, et toi tu fais une fonction qui fais pareil mais de manière barbare et incorrecte dans certains cas, je ne vois absolument pas l'intéret.

Bref, j'en ai marre de parler dans le vent, j'ai parfaitement compris ce que tu fais avec cette proc, tu persistes à penser que c'est la meilleur méthode dans certains cas c'est faux. C'est parceque tu n'utilises pas split et les listes correctement que tu obtiens des soucis. Encore une fois je t'invite à lire mon tutorial sur les listes.

Bonne continuation !
Répondre Avertir
#29
Sinon, le code fonctionne trés bien pour ma part, merci pour votre aide.

Gro_MiNeT
Répondre Avertir
#30
Bonjour,

Merwin tu veux insinuer en gros que "djkenny" ne sait pas codé? *ricane*

D'ailleurs dans ton site la, t'en a oublié des choses... lset, linsert, lsort.. ? Je te conseille d'utiliser les lib. Et ce tuto me dit quelque chose enfin bref, on va pas polémiqué la dessus.

Et en me dirigeant sur la racine du site , je trouve un "Samantha truc", ça ne te rappelle pas quelque chose? par hasard "tcldrop"?

Je vois juste une traduction " Anglais -> Français " avec quelque modification.

Sinon , bah comme tu dis " Tu rox, on pue Smile "

Bonne journée,
Répondre Avertir


Atteindre :


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