Boucle for

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 397 fois - Téléchargée 31 fois

Contenu du snippet

Voici un snippet qui permet l'utilisation d'une boucle FOR (pour) dans vos scripts.
Ceci n'est qu'une ébauche, il y a encore du travail.
Le FOR ne pourra gérer qu'une seule commande (qui devra être mise sur la même ligne que lui)
Tous les cas de figures pour une seule commande sont normalement bien gérés.
J'ai quelques problèmes pour les blocs de commandes.
Exemple :
/for (%i=1;%i<10;i++) {
<commande 1>
<commande 2>
<commande 3>
}

Si qq'un a une idée sur la manière de procéder... :)

Source / Exemple :


/*
Syntaxe : /for (initialisation>;<condition>;<modification>) /commande
Exemple d'utilisation : /for (%var=1;%var<=10;%var++) echo -a test
Ne gère pas les blocs de commande { ... }
Attention à ne mettre aucun espace entre les parenthèses du for

  • /
alias for { var %param1, %param2, %param3, %debut, %fin, %Pas, %i, %mod, %NbIteration $iif($regex($gettok($right($1,-1),1,59),^%\w+=-?\d+$), %param1 = 1, %param1 = 0) $iif(($regex($gettok($1,2,59),^%\w+(<|>)=?-?\d+$)),%param2 = 1, %param2 = 0) if ($regex($gettok($left($1,-1)$1,3,59),^%.+[^+-](-{2}|\+{2})\d*$)) { %param3 = 1 if $regex($gettok($left($1,-1)$1,3,59),\+{2}\d*$) { %i = $len($gettok($left($1,-1)$1,3,59)) %mod = inc while (%i > 1 && $mid($gettok($left($1,-1)$1,3,59), %i, 1) != +) { %Pas = $+($mid($gettok($left($1,-1)$1,3,59), %i, 1),$eval(%Pas)) dec %i } $iif(!%Pas, %Pas = 1) } elseif $regex($gettok($left($1,-1)$1,3,59),-{2}\d*$) { %i = $len($gettok($left($1,-1)$1,3,59)) %mod = dec while (%i > 1 && $mid($gettok($left($1,-1)$1,3,59), %i, 1) != -) { %Pas = $+($mid($gettok($left($1,-1)$1,3,59), %i, 1),$eval(%Pas)) dec %i } $iif(!%Pas, %Pas = 1) } } else { %param3 = 0 } if ((%param1) && (%param2) && (%param3)) { %debut = $gettok($gettok($right($1,-1),1,59),2,61) if ($regex($gettok($1,2,59),^%\w+<=-?\d+$)) { %fin = $gettok($gettok($1,2,59),2,61) while (%debut <= %fin) { $2- $iif(%Mod = inc, inc %debut %Pas, dec %debut %pas) } } elseif ($regex($gettok($1,2,59),^%\w+<-?\d+$)) { %fin = $gettok($gettok($1,2,59),2,60) while (%debut < %fin) { $2- $iif(%Mod = inc, inc %debut %Pas, dec %debut %pas) } } elseif ($regex($gettok($1,2,59),^%\w+>-?\d+$)) { %fin = $gettok($gettok($1,2,59),2,62) while (%debut > %fin) { $2- $iif(%Mod = inc, inc %debut %Pas, dec %debut %pas) } } elseif ($regex($gettok($1,2,59),^%\w+>=-?\d+$)) { %fin = $gettok($gettok($1,2,59),2,60) while (%debut >= %fin) { $2- $iif(%Mod = inc, inc %debut %Pas, dec %debut %pas) } } } else { echo -a 4Syntaxe incorrecte echo -a Syntaxe : /for (<initialisation>;<condition>;<modification>) /commande echo -a Exemple : /for (%i=1;%i<=10;%i++) echo -a test } }

Conclusion :


J'envisage de faire un tutoriel qui expliquera pas à pas le script.
Si un bug persiste, laissez un message ici, merci.

A voir également

Ajouter un commentaire Commentaires
Messages postés
1052
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
30 novembre 2009
2
dommage pour les blocs mais tu vas nous arranger tout ca :p
je n'ai pas encore trouver d'utilité dans un addons mais je sent que ca va venir très vite ^^
bravo
Messages postés
246
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
9 janvier 2006

Bonne idée Rémi, merci. :)
Merci a toi aussi Sizlaa.

Sinon, j'ai eu le droit à un excellent remarque de Pada sur la construction de mes regex :
Je faisait $regex($gettok($left($1,-1)$1,3,59),^%.+[^+-](-{2}|\+{2})\d*$)
pour, entre autre, vérifier que l'usager saisissait bien un nom de variable contenant au moins un caractère et ne se terminant pas par "-" ou "+".
Ca ne pouvait pas fonctionner car :
1) un $1 c'est glissé je ne sais quand dans mon $gettok ^^"
2) .+[^+-] signifie "un caractère quelconque + un caractère sauf + et -" ce qui donne au total 2 caractères donc ca je ne pouvait pas entrer dans le if pour un nom de variable ne contenant qu'un caractère (ex : %i)

Voila merci a lui pour cette remarque :)
Messages postés
58
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
20 septembre 2005

Bravo voilà qui rapproche un peu le mIRC de certains langage car il manquait vraiment cette boucle dans le langage mIRC bravo ;) 9/10
Messages postés
1025
Date d'inscription
vendredi 29 août 2003
Statut
Membre
Dernière intervention
28 mars 2005
2
Une petite idée d'optimisation :
Tu répètes plusieurs fois cette ligne :
elseif ($regex($gettok($1,2,59),^%\w+<-?\d+$))

Donc tu peux mettre en variable l'intérieur de la regex :)
Messages postés
246
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
9 janvier 2006

Oui, j'y travaille aussi :)
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.