begin process at 2012 02 12 00:35:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > BOUCLE FOR

BOUCLE FOR


 Information sur la source

Note :
Aucune note
Catégorie :Astuces Classé sous :boucle, for, regsub, regex Niveau :Débutant Date de création :13/11/2006 Date de mise à jour :13/11/2006 07:20:39 Vu :3 571

Auteur : TropNul

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Bonjour tout le monde :)

Je vais directement aux choses sérieuses:
Cette fonction vous permettra de faire une suite de commandes plusieurs fois
en utilisant la syntaxe de base (ou presque lol (oui , je l'ai un peu adapté :s)) de la fameuse boucle FOR

Syntaxe: /for [NomVariable][=][Initialisation] [NomVariable][<|>|<=|>=][Fin] <[+|-][Pas]|[NomVariable][++|--]|[NomVariable]=[No mVariable][+|-][Pas]> [CommandBlocName] [OtherParameters]

Exemples d'utilisation:
-------------------------
for test=1 test<=10 +1 commbloc %autreparamètre1
for test test<5 +2 commbloc %autreparamètre1 %autreparamètre2
for test=10 test>1 -1 commbloc
for test test<=4 test++ commbloc
for test=10 test>=1 -2 commbloc %autreparamètre1
for test=2 test<=10 test=test+3 commbloc %autreparamètre
for test=3 test<7 +2 commbloc

Explication des exemples:
-----------------------------
> Pour chaque cas, il faut comme vous le voyez fournir un nom de variable et son initialisation à savoir test=1 ou test=10 ou encore test=3
Ce nom de variable devra absolument être sous la forme [[:alnum:]]+ (ne peut contenir que des lettres ou/et des chiffres)
La valeure de l'initialisation peut être nulle , auquel cas , la boucle la considérera comme commençant à 0

> En deuzième paramètre, vous fournirez la borne d'arrêt de la boucle, à savoir test<=10 ou test>1

> En troisième paramètre, vous mettrez le " pas " que devra respecter la boucle for.
>> pour faire une boucle incrémentative:
>>> +Pas
>>> ou NomVariable++
>>> ou NomVariable=NomVariable+Pas
>> pour une boucle décrémentative:
>>> -Pas
>>> ou NomVariable--
>>> ou NomVariable=NomVariable-Pas

> Finalement, précisez absolument le nom de l'alias contenant les commandes a boucler
Les [OtherParameters] sont quant à eux les paramètres que vous incluerez si par exemple vous utilisez cette boucle au beau milieu d'un autre alias, donc vous comprendrez qu'il faille lui envoyer les paramètres(variables) déjà en utilisation lors de son appel pour permettre au bon fonctionnement de la suite des instructions.
> En passant les [OtherParameters] , dans les bloc de commandes , on les retrouvera certainement :). tout dépend de ce que vous voulez faire ^^

Raison de ce modèle:
------------------------
Je n'ai pas trouvé (ou pas encore :p) d'autres moyens d'intégrer un bloc de commande dans une boucle for directement par l'appel de l'alias for lui-même
Donc je passe par un alias intermédiaire contenant les commandes a faire

ps:
---
J'ai inclus un alias d'exemple " commbloc " afin que vous puissiez voir le fonctionnement de la bête lol

Source

  • ; Boucle For
  • ; -----------
  • alias for {
  • if ($4) {
  • if $regex($1,/^([[:alnum:]]+=\d{1,})/i) { var %deb , %debreg = $regsub($1,/([[:alnum:]]+=)/gi,,%deb) }
  • elseif $regex($1,/^([[:alnum:]]+)$/i) { var %deb = 0 }
  • else { forsyn | goto end }
  • if $regex($2,/(([[:alnum:]])(<|>|<=|>=)(\d{1,2}))/) { var %fin = $regml(4) , %marche = $regml(3) }
  • else { forsyn | goto end }
  • if $regex($3,/^(([+-])(\d{1,}))$/) { var %mdpas = $regml(2) , %pas = $regml(3) }
  • elseif $regex($3,/^(([[:alnum:]]+)((\+|-){2}))$/i) { var %mdpas = $left($regml(3),1) , %pas = 1 }
  • elseif $regex($3,/^(([[:alnum:]]+)=(\2)([+-])(\d{1,}))$/i) { var %mdpas = $regml(4) , %pas = $regml(5) }
  • else { forsyn | goto end }
  • %commblc = $4
  • if ($5-) { var %oparam = $5- }
  • while (%deb %marche %fin) { %commblc %deb $iif(%oparam,%oparam) | $iif((%mdpas == +),inc,dec) %deb %pas }
  • }
  • else { forsyn }
  • :end
  • }
  • alias -l forsyn {
  • echo -st $chr(2) $+ Incorrect Syntax in " FOR-loop "
  • echo -st $chr(160)
  • echo -st /for $for< $+ [NomVariable][=][Initialisation] $+ $for> $for< $+ [NomVariable][<|>|<=|>=][Fin] $+ $for> $for< $+ [+|-][Pas] $+ $for| $+ [NomVariable][++|--] $+ $for| $+ [NomVariable]=[NomVariable][+|-][Pas] $+ $for> $for< $+ [CommandBlocName] $+ $for> $for< $+ [OtherParameters] $+ $for>
  • echo -st $chr(160)
  • echo -st $fordb(Para 1:) $for< $+ [NomVariable][=][Initialisation] $+ $for> $fordb(Para 2:) $for< $+ [NomVariable][<|>|<=|>=][Fin] $+ $for>
  • echo -st $fordb(Para 3:) $for< $+ [+|-][Pas] $+ $for| $+ [NomVariable][++|--] $+ $for| $+ [NomVariable]=[NomVariable][+|-][Pas] $+ $for>
  • echo -st $fordb(Para 4:) $for< $+ [CommandBlocName] $+ $for> $fordb(Para 5:) $for< $+ [OtherParameters] $+ $for>
  • }
  • alias -l for< { return $+($chr(3),03,<,$chr(3)) }
  • alias -l for> { return $+($chr(3),03,>,$chr(3)) }
  • alias -l for| { return $+($chr(3),04,|,$chr(3)) }
  • alias -l fordb { return $+($chr(2),$1-,$chr(2)) }
  • ; Exemple de Bloc de commandes
  • ; -------------------------------------
  • alias commbloc {
  • ; Para. $1 = %deb ; Other Parameters = $2-
  • echo -st -
  • echo -st command: $1
  • echo -st command: $1
  • echo -st Other Parameters: $2-
  • echo -st -
  • }
  • ; FOR Loop (with comments)
  • ; ------------------------
  • alias for {
  • ; si tous les paramètres nécessaires existent ...
  • if ($4) {
  • ; recherche de la valeure de l'initialisation ...
  • ; en utilisant un $regsub, on récupère cette valeure !
  • if $regex($1,/^([[:alnum:]]+=\d{1,})/i) {
  • var %deb , %debreg = $regsub($1,/([[:alnum:]]+=)/gi,,%deb)
  • }
  • ; si aucune valeure n'est précisée, alors prendre 0 !
  • elseif $regex($1,/^([[:alnum:]]+)$/i) {
  • var %deb = 0
  • }
  • ; sinon , aller acheter un kébab ptdr
  • else { forsyn | goto end }
  • ; recherche de la borne de la boucle ...
  • ; à partir du $regex et donc des $regml(n), on récupère les valeurs qu'ils nous faut ^^
  • if $regex($2,/(([[:alnum:]])(<|>|<=|>=)(\d{1,2}))/) {
  • var %fin = $regml(4) , %marche = $regml(3)
  • }
  • ; sinon , aller au macdo LOL
  • else { forsyn | goto end }
  • ; recherche du pas de la boucle ...
  • ; j'utilise ici 3 modèles de regex différents ^^
  • ; cas ou +|-Pas est rentré
  • if $regex($3,/^(([+-])(\d{1,}))$/) {
  • var %mdpas = $regml(2) , %pas = $regml(3)
  • }
  • ; cas ou NomVariable++|-- est rentré
  • elseif $regex($3,/^(([[:alnum:]]+)((\+|-){2}))$/i) {
  • var %mdpas = $left($regml(3),1) , %pas = 1
  • }
  • ; cas ou NomVariable=NomVariable+Pas est rentré ^^
  • ; ( attention: si vous mettez par exemple, test=machine+2 , ça ne marchera jamais . il faut mettre test=test+2 , si le nom de la variable est " test " bien sur )
  • elseif $regex($3,/^(([[:alnum:]]+)=(\2)([+-])(\d{1,}))$/i) {
  • var %mdpas = $regml(4) , %pas = $regml(5)
  • }
  • ; sinon , manger une pomme !
  • else { forsyn | goto end }
  • ; récupération du nom de bloc de commandes et de ses paramètres ...
  • %commblc = $4
  • if ($5-) { var %oparam = $5- }
  • ; enfin , faire une boucle avec toutes les valeurs précédemment traitées :O)
  • while (%deb %marche %fin) {
  • ; appel du bloc de commande ^^ ...
  • %commblc %deb $iif(%oparam,%oparam)
  • ; ici , selon la valeu de %mdpas (+ ou -), faire un inc ou un dec :)
  • $iif((%mdpas == +),inc,dec) %deb %pas
  • }
  • }
  • else { forsyn }
  • :end
  • }
  • /*
  • Quelques explications sur les Regex:
  • $regml(n) renvoit la nième partie du texte vérifiant le modèle
  • ainsi, on peut récupérer CE QUE L'ON VEUT (n'est-ce pas génial ? :p)
  • $regsub quant à lui à la prétention de faire une substitution de ce qu'on veut dans une chaîne de caractère par ce que l'on veut \o/
  • */
  • voila voila
; Boucle For
; -----------

alias for  {
  if ($4) {
    if $regex($1,/^([[:alnum:]]+=\d{1,})/i) { var %deb , %debreg = $regsub($1,/([[:alnum:]]+=)/gi,,%deb) }
    elseif $regex($1,/^([[:alnum:]]+)$/i) { var %deb = 0 }
    else { forsyn | goto end }
    if $regex($2,/(([[:alnum:]])(<|>|<=|>=)(\d{1,2}))/) { var %fin = $regml(4) , %marche = $regml(3) }
    else { forsyn | goto end }
    if $regex($3,/^(([+-])(\d{1,}))$/) { var %mdpas = $regml(2) , %pas = $regml(3) }
    elseif $regex($3,/^(([[:alnum:]]+)((\+|-){2}))$/i) { var %mdpas = $left($regml(3),1) , %pas = 1 }
    elseif $regex($3,/^(([[:alnum:]]+)=(\2)([+-])(\d{1,}))$/i) { var %mdpas = $regml(4) , %pas = $regml(5) }
    else { forsyn | goto end }
    %commblc = $4
    if ($5-) { var %oparam = $5- }
    while (%deb %marche %fin) { %commblc %deb $iif(%oparam,%oparam) | $iif((%mdpas == +),inc,dec) %deb %pas }
  }
  else { forsyn }
  :end
}
alias -l forsyn {
  echo -st $chr(2) $+ Incorrect Syntax in " FOR-loop "
  echo -st $chr(160)
  echo -st /for $for< $+ [NomVariable][=][Initialisation] $+ $for> $for< $+ [NomVariable][<|>|<=|>=][Fin] $+ $for> $for< $+ [+|-][Pas] $+ $for| $+ [NomVariable][++|--] $+ $for| $+ [NomVariable]=[NomVariable][+|-][Pas] $+ $for> $for< $+ [CommandBlocName] $+ $for> $for< $+ [OtherParameters] $+ $for>
  echo -st $chr(160)
  echo -st $fordb(Para 1:) $for< $+ [NomVariable][=][Initialisation] $+ $for> $fordb(Para 2:) $for< $+ [NomVariable][<|>|<=|>=][Fin] $+ $for>
  echo -st $fordb(Para 3:) $for< $+ [+|-][Pas] $+ $for| $+ [NomVariable][++|--] $+ $for| $+ [NomVariable]=[NomVariable][+|-][Pas] $+ $for>
  echo -st $fordb(Para 4:) $for< $+ [CommandBlocName] $+ $for> $fordb(Para 5:) $for< $+ [OtherParameters] $+ $for>
}
alias -l for< { return $+($chr(3),03,<,$chr(3)) }
alias -l for> { return $+($chr(3),03,>,$chr(3)) }
alias -l for| { return $+($chr(3),04,|,$chr(3)) }
alias -l fordb { return $+($chr(2),$1-,$chr(2)) }

; Exemple de Bloc de commandes
; -------------------------------------

alias commbloc {
  ; Para. $1 = %deb ; Other Parameters = $2-
  echo -st -
  echo -st command: $1
  echo -st command: $1
  echo -st Other Parameters: $2-
  echo -st -
}

; FOR Loop (with comments)
; ------------------------ 
  
alias for {
  ; si tous les paramètres nécessaires existent ...
  if ($4) { 
    ; recherche de la valeure de l'initialisation ...
    ; en utilisant un $regsub, on récupère cette valeure !
    if $regex($1,/^([[:alnum:]]+=\d{1,})/i) { 
      var %deb , %debreg = $regsub($1,/([[:alnum:]]+=)/gi,,%deb)
    } 
    ; si aucune valeure n'est précisée, alors prendre 0 !
    elseif $regex($1,/^([[:alnum:]]+)$/i) { 
      var %deb = 0
    } 
    ; sinon , aller acheter un kébab ptdr
    else { forsyn | goto end }
    ; recherche de la borne de la boucle ...
    ; à partir du $regex et donc des $regml(n), on récupère les valeurs qu'ils nous faut ^^
    if $regex($2,/(([[:alnum:]])(<|>|<=|>=)(\d{1,2}))/) {
      var %fin = $regml(4) , %marche = $regml(3)
    } 
    ; sinon , aller au macdo LOL
    else { forsyn | goto end } 
    ; recherche du pas de la boucle ...
    ; j'utilise ici 3 modèles de regex différents ^^
    ; cas ou +|-Pas est rentré
    if $regex($3,/^(([+-])(\d{1,}))$/) { 
      var %mdpas = $regml(2) , %pas = $regml(3)
    } 
    ; cas ou NomVariable++|-- est rentré
    elseif $regex($3,/^(([[:alnum:]]+)((\+|-){2}))$/i) {
      var %mdpas = $left($regml(3),1) , %pas = 1
    } 
    ; cas ou NomVariable=NomVariable+Pas est rentré ^^
    ; ( attention: si vous mettez par exemple, test=machine+2 , ça ne marchera jamais . il faut mettre test=test+2 , si le nom de la variable est " test " bien sur )
    elseif $regex($3,/^(([[:alnum:]]+)=(\2)([+-])(\d{1,}))$/i) {
      var %mdpas = $regml(4) , %pas = $regml(5)
    } 
    ; sinon , manger une pomme !
    else { forsyn | goto end }
    ; récupération du nom de bloc de commandes et de ses paramètres ...
    %commblc = $4 
    if ($5-) { var %oparam = $5- } 
    ; enfin , faire une boucle avec toutes les valeurs précédemment traitées :O)
    while (%deb %marche %fin) { 
      ; appel du bloc de commande ^^ ...
      %commblc %deb $iif(%oparam,%oparam)
      ; ici , selon la valeu de %mdpas (+ ou -), faire un inc ou un dec :)
      $iif((%mdpas == +),inc,dec) %deb %pas 
    } 
  } 
  else { forsyn } 
  :end 
} 

/*
Quelques explications sur les Regex:
$regml(n) renvoit la nième partie du texte vérifiant le modèle
ainsi, on peut récupérer CE QUE L'ON VEUT (n'est-ce pas génial ? :p)
$regsub quant à lui à la prétention de faire une substitution de ce qu'on veut dans une chaîne de caractère par ce que l'on veut \o/
*/

voila voila

 Conclusion

Bonne utilisation && enjoy ^^


 Historique

13 novembre 2006 05:02:50 :
correction d'un ptit bug de rien du tout
13 novembre 2006 05:45:33 :
rajout de la partie [OtherParameters] pour pouvoir utiliser la boucle partout " ou presque " :)
13 novembre 2006 06:39:55 :
rajout d'autres possibilités pour le pas ^^
13 novembre 2006 06:48:43 :
minor change
13 novembre 2006 06:51:07 :
minor change
13 novembre 2006 07:20:39 :
rajout d'une version commentée ^^

 Sources du même auteur

Source avec Zip SYSTÈME DE COMMANDE EN MASSE AVEC DÉLAI
GESTION-COULEURS-SPECIALES@UTILISATION-REGSUBEX
Source avec Zip Source avec une capture SYSTÈME DE QUOTE MULTI-LIGNE & MULTI-SERVEUR
Source avec Zip ANALYSEUR DU TAUX DE PRIVMSG SALON
GESTION MULTILIGNE DE CHAÎNE DE CARACTÈRE

 Sources de la même categorie

Source avec une capture ALIAS POUR TELECHARGER UNE VIDEO SUR YOUTUBE (MISE A JOUR V1... par WorldDMT
ANTI SAJOIN par Maka57
PERMET DE CHERCHER UN HOST par ACoZz
Source avec Zip SIMULATION D'UNE ROULETTE QUI TOURNE par wims
SELPOS - SELECTION ET POSITION ! par wims

 Sources en rapport avec celle ci

GESTION-COULEURS-SPECIALES@UTILISATION-REGSUBEX par TropNul
GESTION MULTILIGNE DE CHAÎNE DE CARACTÈRE par TropNul
POURCENTAGE MAJUSCULES MINUSCULES par TropNul
Source avec Zip Source avec une capture SUDOKU (LE JEU JAPONAIS) par RCA ArKanis
Source avec Zip Source avec une capture IDENT DAEMON par murony

Commentaires et avis

Commentaire de AgoRa_ScripT le 13/11/2006 15:24:41

interressant (pour ma part), je vais peut être enfin adhérer aux regex, il serait temps.

Commentaire de wims le 13/11/2006 19:43:07

http://www.scriptsdb.org/comments.php?id=1041

J'suis d'accord avec le premier commentaires du lien.

Commentaire de RCA ArKanis le 18/11/2006 13:02:29

je trouve beaucoup plus simple d'utiliser uniquement des while que de faire un code de 110 lignes pour une boucle FOR :(

j'aime pas les gotos, mais sinon ça parait plutôt bien codé
bon par contre les commentaires ... :)

Commentaire de TropNul le 20/11/2006 05:39:14

18 lignes et non 110 :p (recompte ;o))

sinon bah, j'ai fait cela pour m'amuser ^^, de montrer que cela est possible de déclarer toutes les variables d'une boucle n'importe ou , n'importe quand sur une seule ligne .

bref , il va sans dire que ce code ne vous sera jamais utile mais bon , j'adore les regex et je savais pas quoi faire donc voila :)

(ps: pour les commentaires> je préfère m'amuser en codant, jpense que ça me va mieux ^^ mais bon chacun son truc heinG)

:O)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Regex : help [ par MaX_62 ] Bonjour, J'ai tent&#233; de cr&#233;er un alias pour supprimer les &lt;balises&gt; html ainsi que les &amp;balises;J''ai fait &#231;a :alias reg { var P'tit prob de boucle :-/ [ par stevnet ] Soir tout le monde !!voila j'essai de comprendre un peu les boucle ( sauf si c pas comme sa que sa s'appel :p) Code:alias ct {&nbsp; %w = $chan(0)&nbs $regsub [ par Le_Corse ] quelqun peut m'expliquer la commande $regsub svp ?&#187; Le_Corse pb avec boucle merci c urgent!! [ par texas77 ] bonjour c un soucis avec ma boucle c kel change pa la kestion et el marhce pa tt le temp pour bone reponde et mauvaise merci de votre aide :on *:text: Comment cree une boucle? [ par texas77 ] Bonjour j'aimerai cree une boucle pour un quizz je essayer mais je n'y arrive pas . merci de m'aider logiciel d'aide aux regex [ par tofu ] Voil&#224;, en surfant, par hasard jss tomb&#233; sur le logiciel: RegexBuddyj'ai vraiment &#233;t&#233; s&#233;duit par le concept et sa facilit&#233 Help for Switch Bar [ par neqa ] Bonjour @ tous voila je suis nouveau sur ce forum et j'aimerait un gros coup de pouce. Je souhaite crée ma switchbar mais je c'est vraiment pas comme $regex [ par MegaSmax ] Bonsoir, je voudrais ameliorer une partie de mon script. Je voudrais write dans fichier txt une url qui apparait sur un chan.Jai trouv&#233; ca sur sc Boucle While [ par RowN ] Bonjour, cela fait tres longtemps que je n'ai aps coder en mirc, Je voudrais savoir comment associer une boucle while a une liste pr&#233;cise, exem HELP for newbie [ par brebis_egaree ] salut d&#233;sol&#233; si je poste la ou il faut pas mais je ne trouve pas de solution.je me suis fait apparemment bannir [01:45]&nbsp; irc.voila.fr -


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,725 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales