Lestat_2070
Messages postés71Date d'inscriptionmardi 8 juin 2004StatutMembreDernière intervention 5 mars 2007
-
19 mai 2005 à 15:49
fjxokt
Messages postés840Date d'inscriptionvendredi 28 janvier 2005StatutMembreDernière intervention25 février 2009
-
21 mai 2005 à 19:04
Bonjour,
J'ai un petit problème de boucle while, sur dans un de mes scripts:
<hr size="2" width="100%">SCRIPT:
On *:start:{ .timerldirc 1 2 getcnct }
alias getcnct {
set %i 1
while (%i <= $gettok($readini($scriptdirultra.ini,serv,networks),0,44)) {
server $iif(%i == 1,,-m) $gettok($_ini2(serv,networks),%i,44)
inc %i
}
}
on *:connect:{ .timerldsrv 1 3 gtsrv }
alias gtsrv {
set %d $gettok($readini($scriptdirultra.ini,serv,networks),0,44)
inc %d
if (%d == %i) {
set %i 1
set %b 1
while (%i <= $gettok($readini($scriptdirultra.ini,serv,networks),0,44)) {
while (%b <=
$gettok($readini($scriptdirultra.ini,serv,. $+
$gettok($readini($scriptdirultra.ini,serv,networks),%i,44)),0,44)) {
inc %b
}
inc %i
}
}
}
<hr size="2" width="100%">FICHIER .INI:
[serv]
networks=127.0.0.1:1000,irc.ff.st,ircSuper
.127.0.0.1:1000=#test01,#test02,#test03
.irc.ff.st=#test04,#test05
.ircSuper=#test06
<hr size="2" width="100%">Vous l'avez surement compris, il s'agit d'un auto-join multiserver/multichannel.
Le tout est composé de 2 while, grossièrement: irc va joindre les
channels du 1er server, du second...etc.. après s'etre connecté à tout
les servers de la liste (je précise parce que mon code n'est pas
vraiment "beau" et optimisé)
Donc ici, d'après ce que j'ai pu tester, seule le 2nd while s'execute:
le 1er while est "zappé"; quand je tente d'enlever le "inc %i" (il se
trouve a la fin), mIRC freeze: normal car la boucle ne peux se
terminer, mais anormal car: si l'incrémenteur de %i est là, rien ne se
passe.
Voilà donc mon problème de while, j'avais pensé que ca vennait du
multiple accèss au fichier .ini, mais dans ce cas pourquoi seul le 2nd
while se lance? Dans ce cas, comment faire?
fjxokt
Messages postés840Date d'inscriptionvendredi 28 janvier 2005StatutMembreDernière intervention25 février 20091 19 mai 2005 à 19:36
les hash tables c'est pas compliqué (c'est meme tres simple)
tu crée une hash table de 1000 items (le max on s'en fout)
hmake -s ajoin 1000
tu ajoute a ta hash table l'item correspondant a un serveur
hadd -s ajoin irc.server.1 #salut #cool #blabla
si t'a d'autres serveurs pas de probleme c'est le meme principe
hadd -s ajoin irc.server.2 #delire #cfacile
pr finir tu sauvegarde ta table pr pouvoir la
reouvrir qd tu lancera ton script (il faut sauvegarder la table des que
on rajoute quelque chose dedans, sauf si ca n'est que temporaire)
hsave -s ajoin ajoin.hash
pr savoir combien de servers tu as au total, c'est $hget(ajoin,0)
pour avoir le nom de ton premier server, c'est $hget(ajoin,1).item
pour avoir ta liste de chan pour le server 1, c'est $hget(ajoin,1).data
ensuite pr avoir les chans un par un tu utilise un gettok(liste,%var,32) avec une boucle ou tu inc %var
si tu en a fini avec ta table, tu libere la mémoire qui lui etait alouée
hfree -s ajoin
lors du demarrage de mirc pr recuperer ta table tu la charges (apres l'avoir crée )
Lestat_2070
Messages postés71Date d'inscriptionmardi 8 juin 2004StatutMembreDernière intervention 5 mars 2007 19 mai 2005 à 16:43
@wims:
Pour les /var au lieu des /set, ca ne change pas grand chose, mais bon c'est un détail (merci de me l'avoir fait remarqué).
Pour le $iif(%i == 1,,-m), non il n'y a pas une virgule en trop: $iif(comparaison,true,false);
j'ai rien mis entre les deux virgules pour, tout simplement, ne rien
renvoyer, ca peux paraitre un peu stupide de ma part; mais le but ici,
était d'ouvrir dans une nouvelle fenetre tout les serveurs, sauf le
premier.
Merci pour ta réponse
Vous n’avez pas trouvé la réponse que vous recherchez ?
Lestat_2070
Messages postés71Date d'inscriptionmardi 8 juin 2004StatutMembreDernière intervention 5 mars 2007 19 mai 2005 à 19:07
@fjxokt:
Dans le 1er post, je parlais du gtsrv, car c'est le seul à proposer deux whiles l'un dans l'autre.
Hum, les hashtables... seulement, je ne les maitrise pas ...
à vrai dire, j'ai rien compris quand j'ai vu des tutos ou des sources
les utilisant. Aussi, si je les utilise, je pourais ramener tout ca
dans mon .ini ?
Enfin, je suis d'accord avec toi, c'est pas du tout optimisé... et
c'est sans doute normal que ca ne marche pas du tout. Je ne sais pas
trop. Comment devrais je coder ca ?
Lestat_2070
Messages postés71Date d'inscriptionmardi 8 juin 2004StatutMembreDernière intervention 5 mars 2007 19 mai 2005 à 19:09
@fjxokt:
Dans le 1er post, je parlais du gtsrv, car c'est le seul à proposer deux whiles l'un dans l'autre.
Hum, les hashtables... seulement, je ne les maitrise pas ...
à vrai dire, j'ai rien compris quand j'ai vu des tutos ou des sources
les utilisant. Aussi, si je les utilise, je pourais ramener tout ca
dans mon .ini ?
Enfin, je suis d'accord avec toi, c'est pas du tout optimisé... et
c'est sans doute normal que ca ne marche pas du tout. Je ne sais pas
trop. Comment devrais je coder ca ?
Lestat_2070
Messages postés71Date d'inscriptionmardi 8 juin 2004StatutMembreDernière intervention 5 mars 2007 19 mai 2005 à 21:05
@fjxokt:
Merci pour ce mini tuto ,
ca va m'être bien utile. Je valide ta réponse en "acceptée". Le petit
problème restant est que je dois changer mes 2 combo (server et chan,
et un jour ajouter le mode +k et rafistoler ce mode $network), et avoir
2 files (le ini avec deja la configuration de l'addon (~1300 l)) au
lieu d'un seul. Mais bon, je bosserai là dessus vendredi soir et ce
weekend; parce que ce soir j'ai plus trop le temps. Encore merci pour
vos réponses !
Si quelqu'un me trouve une solution pour le code en début, de page, je suis toujours prenneur
Lestat_2070
Messages postés71Date d'inscriptionmardi 8 juin 2004StatutMembreDernière intervention 5 mars 2007 21 mai 2005 à 11:42
@fjxokt:
Woaouu !!!
Désolé, je n'avais pas vu le "var %b 1" qui était déplacé !
En fait, c'étais ca qui bloquais le script: logique, en fait, puisque si on ne met pas var %b 1
juste après le 1er while (qui liste les servers), l'autre while ne
pourra pas joindre les channels quand %i sera égal à 2, puisque %b sera
supérieur au nombre de chans pour le server suivant. Vraiment, MERCI fjxokt,
j'ai cherché pendant plusieurs jours, parce que j'étais sûr de mes
whiles; comme quoi faut véritablement tout vérifier quand un script ne
donne pas le résultat souhaité :]
Je vais quand même tenter du côté des hash tables, ca semble plus
rapide que tout mes accèss au .ini avec des lignes trop longues