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
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.
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 ...
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...
debian:~# tclsh8.5
%set var "ma liste foireuse"
ma liste foireuse
%set var [linsert $var1 \"]
ma {"} liste foireuse
%set var [linsert $var1 \}]
ma \}{"} liste foireuse
% set var [join $var]
ma } " liste foireuse
%lindex$var0
unmatched open quote inlist%lindex[string map {"\\""\\\\""\{""\\\{""\}""\\\}""\[""\\\[""\]""\\\]""\"""\\\""}$var]0
ma
%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
%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
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
@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.
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)
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.
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.