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.
20 févr. 2005 à 00:12
je n'ai pas encore trouver d'utilité dans un addons mais je sent que ca va venir très vite ^^
bravo
19 févr. 2005 à 15:26
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 :)
19 févr. 2005 à 12:23
19 févr. 2005 à 11:03
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 :)
19 févr. 2005 à 09:31
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.