Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Bug TCL sur un bind raw
#16
djkenny Wrote:
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
#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 ;)
Away
#18
heu, si Merwin n'a jamais codé un socket, je n'ai jamais fait un site web... avis personnel.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#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.
#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 ;)
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 ;)
Away
#21
Ok tu rox et j'ai tort Smile
#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...
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#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 ;)
Away
#24
ben a parement ca revien au meme :x

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 ;)
Away
#25

tcl
% split {" test [ ]}
{"} test {[} \]
% string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} {" test [ ]}
\" test \[ \]



édit:
voila le bug que je cherchai avec split :)
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 ;)
Away
#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.
#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 ;)
Away
#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 !
#29
Sinon, le code fonctionne trés bien pour ma part, merci pour votre aide.

Gro_MiNeT
#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 :) "

Bonne journée,


Forum Jump:


Users browsing this thread: 1 Guest(s)