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

Catégorie :Divers Niveau : Initié Date de création : 19/02/2005 Vu : 1 907

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

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.
 

Commentaires et avis

signaler à un administrateur
Commentaire de ReMi34 le 19/02/2005 08:44:53

Ah voilà quelque chose d'original !
J'avais cette idée mais je ne savais pas comment la réaliser. Franchement j'aime bien. J'vais m'intéresser au code.
8/10

signaler à un administrateur
Commentaire de tidds le 19/02/2005 08:53:44

Le code n'est pas encore très optimisé.
Si tu as des idées d'amélioration, n'hésite pas. :)

signaler à un administrateur
Commentaire de SornDrixer le 19/02/2005 09:28:00 administrateur CS

Wow excellent, je trouvais justement qu'il manquait la boucle for au mIRC Script.

Par contre, il y a quelque chose d'essentiel qui ne fonctionne pas : l'affichage de la variable pendant la boucle.

J'ai essayé :
for (%var=1;%var<=10;%var++) echo -a test %var
et %var ne retournait rien.

signaler à un administrateur
Commentaire de tidds le 19/02/2005 09:31:12

Oui, j'y travaille aussi :)

signaler à un administrateur
Commentaire de ReMi34 le 19/02/2005 11:03:16

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 :)

signaler à un administrateur
Commentaire de Sizlaa le 19/02/2005 12:23:45

Bravo voilà qui rapproche un peu le mIRC de certains langage car il manquait vraiment cette boucle dans le langage mIRC bravo ;) 9/10

signaler à un administrateur
Commentaire de tidds le 19/02/2005 15:26:29

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 :)

signaler à un administrateur
Commentaire de KiNdErMaXi le 20/02/2005 00:12:00

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

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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 : 0,983 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é.