|
Trouver une ressource
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 !
BOUCLE FOR
Information sur la source
Description
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
- /*
- 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
- }
- }
/*
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.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
|