Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[MIRC SCRIPTING] LES BOUCLES AVEC /WHILE ET /GOTO


Information sur le tutorial

Catégorie :Tutoriaux Date de création : 27/07/2004 15:05:36 Vu : 9 317 fois

Note :
7,75 / 10 - par 4 personnes
7,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note


Tutorial

Etant donné que beaucoup de personnes ne savent pas ou ne savent pas correctement manipuler les boucles, je vais essayer d'expliquer ça en un petit tuto.

Tout d'abord, il est préférable de faire une boucle avec while qu'avec goto. While est plus rapide, cela ne se voit pas dans les petites boucles, mais dans les plus grosses.
Nous verrons un exemple dans chacun de ces 2 cas.
Commençons par while :

alias testwhile {
;on définit dans des variables internes les paramètres de la boucle
;pourquoi utiliser var au lieu de set ? car avec var , les variables crées seront crées et effacées automatiquement
;à la fin du script, tandis que si on aurait utilisé set, elles auraient encore résidées, et il aurait fallut utiliser
;unset pour les effacer
var %bla 0, %blabla 30
;on aurait pu très bien aussi faire var %bla 0 | var %blabla 30 , mais autant faire le plus court possible
; le signe "=" est également optionnel, ca c'est kolibot qui me l'a appris :p
while (%blabla > %bla) { inc %bla | echo -a boucle numéro %bla }
;cela signifie : tant que %blabla ( qui vaut 30 ) est supérieur à %bla ( qui vaut 0 au départ ), on incrémente
;la variable %bla de 1 , et on affiche sa valeur en /echo . A chaque boucle, la variable est incrémenté
;jusqu'à se qu'elle ateigne 30, c'est à dire dès que %blabla sera égal à %bla, alors la condition de la boucle
;ne sera plus vraie et la boucle s'arretera.
}



/!\ : N'oubliez jamais d'incrémenter votre variable, sinon cela tournera en boucle infini, et votre mIRC va géler.



Bon, passons à un exemple utilisant goto :

alias testgoto {
;meme principe de variables que dans le précédent exemple
;je précise que vous pouvez les nommer comme vous voulez, tant qu'elles n'ont pas le meme nom lol
var %bla 0, %blabla 30
;alors ceci, permet de rappeler le goto, j'expliquerai + cela en détails plus loin.
:retourgoto
;ici, on vérifie la condition avec un if, et non avec un while. Il ne faut surtout pas mélanger ces 2 méthodes de boucle.
if (%blabla > %bla) { inc %bla | echo -a boucle numéro %bla | goto retourgoto }
;en clair sa donne : Si %blabla est supérieur à %bla, on incrémente %bla de 1, et on affiche sa valeur en echo.
;la commande goto permet de rappeler le goto
;dans notre condition, cela permet, si la condition est vraie, de rappeler le script là où nous avons placé
;notre :retourgoto , pour qu'il revérifie à la boucle à chaque fois que ce goto est appelé.
}

Vous pouvez appeler votre goto comme vous le voulez, cela n'a pas d'importance.
Par contre, vous ne pouvez pas appeler ( avec /goto ) un goto qui n'existe pas.
Exemple : vous faites un /goto youpi , mais vous n'avez pas placé de :youpi dans votre script.

Les gotos ne sont pas utilisés uniquement dans les boucles, mais aussi dans un simple script, pour aller à un endroit précis, et sauter des conditions par exemple.
Goto signifie en quelque sorte "aller à".
( Je vais pas m'éterniser sur l'utilisation de goto en dehors des boucles, car cela n'est pas le but de mon tuto :/ )


Ne sous estimez pas les boucles, elles sont utilisées PRATIQUEMENT PARTOUT.
( pour lire un fichier avec $read , pour sortir des pseudos de la nicklist, etc etc )

Pour finir, je vous donne un petit exemple d'utilisation de boucle avec while pour lire un fichier :

alias readfichier {
;$lines permet de connaitre le nombre de lignes d'un fichier
var %bla 0, %blabla $lines($1)
while (%blabla > %bla) { inc %bla 1 | echo -a $read($1,%bla) }

;on fait une boucle celon le nombre de lignes du fichier lus, et on affiche chaque ligne en echo.
;c'est en quelque sorte comme si vous faisiez pleins de /echo -a $read(fichier.txt,1) , /echo -a $read(fichier.txt,2) à la main.
;Sauf que là, la valeur de la ligne est mise automatiquement grâce à la boucle.
}

C'est bien sûr un exemple parmis d'autre, après, à vous d'exploiter vos connaissances pour arriver à vos fins :D
Je vous ai présenté chaque exemple dans un alias, pour que vous puissez les tester plus facilement, mais rien ne vous empeche de faire des boucles directement
sans passer par un alias. ( comme par exemple, dans un événement )


( PS : pour ceux qui n'ont pas réussi à utiliser les exemples, je rappelle qu'ils sont à placer dans les REMOTES, ALT + R , et non dans les alias)

signaler à un administrateur
Commentaire de jeremy29 le 16/09/2005 17:26:26

je ne connaissais pas les boucles du tous, cela m'a donner un petit aperçu, merci infinniment :)

signaler à un administrateur
Commentaire de lebaronrouge le 22/08/2006 02:12:10

grand merci a toi enfin un tuto simple pour comprendre le fonctionnement avec un exemple , maintenant j'ai compris le principe , c'est déja ca et ca m'aidera grandement ;o)

signaler à un administrateur
Commentaire de uaip le 19/08/2007 19:49:39

euh... heureusement que j'ai appris les boucles avant de voir ce tuto ^^.
deja, je ne compte pas les fautes d'orthographe (j'en ai compté un dizaine).
ensuite, je le trouve un peu trop classique, et peu exploité. En effet, les boucles sont extrêmment importantes dans tout type de code mIRC. Cependant, tu ne les mets pas assez en valeur.
je vais faire le niais :
- pourquoi a certains endroits utiliser while au lieu de if ?
- comment savoir si je dois utiliser les boucles ou les gotos ?
- pourquoi tu n'incrémentes qu'une var sur 2 ?
ce sont des questions auxquelles tu ne réponds pas, et puis sache que si tu utilises des gotos, ca signifie que ton code est mal pensé. (en plus, personnelement, la plupart du tps mes gotos ne marchent qu'une seule fois dans un code).
enfin bon, en gros, je trouve ce tuto pas bon du tout.
var %bla 0, %blabla $lines($1)
while (%blabla > %bla)
devient :
var %bla 0
while ($lines($strip($1)) > %blabla)

et je te conseille d'incrémenter a la fin de tes actions, car si l'une d'elle ne marche pas, la boucle continuera de tourner...
je mets 6/10 pour pas etre trop méchant... (pb de souris, ca a cliqué sur 4, désolé) mais je reste sur mon 6 :)

signaler à un administrateur
Commentaire de spart_jack le 16/09/2007 13:55:08

UAIP:

Tu pourrais éxpliqué pourquoi et qu'est ce que $strip pour ceux qui ne savent pas (comme mwa :P) :/ jtrouve ce tuto pas mal du tout.

8/10 :)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 7,738 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.