begin process at 2010 02 09 20:01:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > BOUCLE FOR

BOUCLE FOR


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Initié Date de création :19/02/2005 Vu :2 104

Auteur : tidds

Ecrire un message privé
Site perso
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.


 Sources du même auteur

Source avec Zip Source avec une capture TABLE ASCII
Source avec une capture EFFET DE FONDU
Source avec Zip Source avec une capture CRÉER UN EFFET DE TRANSPARENCE
Source avec Zip [TUTORIEL] ANIMATION ET SYNCHRONISATION DU FPS
Source avec Zip Source avec une capture MATRIX V2.2

 Sources de la même categorie

COMMANDES FANTAISIES ( OP DEOP , VOICE DEVOICE ) ORIGINALES par Orona
Source avec Zip Source avec une capture CORRECTEUR par Orona
Source avec Zip Source avec une capture [DLL] DESSINER COMME LES PICWINS SUR UNE DIALOGBOX (BONUS: J... par uaip
Source avec Zip Source avec une capture [DLL] AJOUT D'UN CONTRÔLE RICHEDIT SCINTILLA SUR LES DIALOG... par uaip
Source avec Zip Source avec une capture WORLDDMT - GESTION DE CAISSE V 1.0 par WorldDMT

Commentaires et avis

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

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

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.

Commentaire de tidds le 19/02/2005 09:31:12

Oui, j'y travaille aussi :)

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

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

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

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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 2,621 sec (4)

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