[R] Fonction pour sortir d'une boucle

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

[R] Fonction pour sortir d'une boucle

#1

Message par Bonjour »

Bonjour en gros j'ai un prog du style

Code : Tout sélectionner

$variable=0
HotKeySet("{ESC}", "stop")
For $variable=0 To 50
ordre...
ordre...
ordre...
Next
Func stop()
...
EndFunc
 
que dois-je mettre dans la fonction stop pour que le programme stop le For To Next et passe à la suite ?
Merci d'avance :D
Modifié en dernier par Bonjour le ven. 27 juin 2014 15:50, modifié 1 fois.
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#2

Message par PandiPanda »

Bonjour ceci?
► Afficher le texte
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#3

Message par Bonjour »

Nan pas tellement la boucle met environ 4 secondes à se finir mais il faut que la fonction stop arrête la boucle sans la laisser se finir, elle ne doit pas executer les derniers ordres.Vous comprenez ?
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#4

Message par jguinch »

C'est exactement ce que fait le code proposé par PandiPanda.
Tu l'as testé ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#5

Message par Bonjour »

non mais le probleme c'est que si je place ce code au debut et que j'appuie sur echap apres ca ne marche pas en gros il faudrait placer ca entre chaque ordre car sinon il ne verifia qu'au debut de chaque boucle non ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#6

Message par mikell »

Ben oui... dans ce cas faut tester le stop avant chaque ordre

Code : Tout sélectionner

HotKeySet("{ESC}","stop")
Global $exit = 0
For $i = 0 To 50
    If $exit = 1 Then ExitLoop
    If $exit = 0 Then Msgbox(0, $i, "ordre 1")
    If $exit = 0 Then Msgbox(0, $i, "ordre 2")
Next
MsgBox(0,"exit","exit done")

Func stop()
    $exit = 1
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#7

Message par TomAijerrie »

Il faudrait en effet placer la ligne If $exit = 1 Then ExitLoop à chaque endroits ou tu souhaites interrompre ta boucle (entre chaque lignes de codes si nésséssaire).

J'ai reflechis à d'autres solutions mais je n'ai pas trouvé pour terminer la boucle, selement pour la suspendre.

pour l'instant j'ai ça à proposer :
► Afficher le texte
Ca devrait aller si j'ai bien compris ta demande.
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#8

Message par Bonjour »

Et il n'y a pas de moyen de simuler les goto ?
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#9

Message par TomAijerrie »

Bonjour a écrit :Et il n'y a pas de moyen de simuler les goto ?
J'ai cherché mais je n'ai pas trouvé.
Les goto existaient dans les premières versions d'autoit mais ils ont cesser d'exister depuis plusieurs versions.

L'une des solution est de travaillée sur une version tres ancienne d'Autoit (déconseillé), une autre est de trouver des alternatives.

Plusieurs alternatives on étées trouvées et certain sujets (anciens) de ce forum en parlent.
http://www.autoitscript.fr/forum/viewto ... f=3&t=3675

J'ai mis le lien sur ce sujet car il a lui-même tous les autres liens importants.

J'espere avoir repondu à ta question et t'avoir aidé.
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#10

Message par Bonjour »

j'avais penser à le remplacer par des boucles dans de nombreux cas ça marche mais pas de le celui la regarder ce que ça donne:

Code : Tout sélectionner

$variable=0

HotKeySet("{ESC}", "stop")

Func stop()
If 0 Then
EndFunc
For $variable=0 To 50
ordre...
ordre...
ordre...
Next

EndIf
 
Vous imaginez le nombre d'insulte que l'ordi m'enverrai ?
A moins qu'il y ait une autre manière de disposez la boucle pour que ça fonctionne ?
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#11

Message par jchd »

Houlà !
Contrairement aux parpaings, on doit emboîter complètement les structures de contrôle comme des Tupperwares et on n'échange pas les couvercles.

Tout ça fleure bon le problème mal posé. Que fait-elle donc cette boucle qui met 4 secondes par itération ?
Peut-on voir un bout de code minimal et fonctionnel qui explicite le problème, plutôt que de raisonner en l'air, accoudés au comptoir ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#12

Message par Bonjour »

Non car si j'ai choisie de ne pas le montrer c'est par ce que les 4 secondes représente 687 lignes de code et contient des info personnels a mon sujet tellement nombreuse que ça me prendrai beaucoup trop de temps à les cacher.
De toute façons je ne pense pas que ça puisse vous aidez.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [...] Fonction pour sortir d'une boucle

#13

Message par jguinch »

En tout état de cause, c'est bel et bien la structure du code qui n'est pas faite en fonction du besoin.
Il faut bien garder à l'esprit que chaque fonction qui "prend du temps" à s'exécuter (Sleep, Runwait, WinWait, ... bref tout ce qui ne rend pas la main tout de suite) sera bloquant dans le script.

Pour mettre fin à une boucle à n'importe quel moment, il n'y a pas beaucoup de solution, à part mettre une vérif à chaque ligne (ce que propose TomAijerrie), ou faire exécuter un bout de code dans un process séparé.
Bonjour a écrit :De toute façons je ne pense pas que ça puisse vous aidez.
Ca c'est ce que tu dis... On ne sait pas ce que ton code est censé faire, comment veux-tu qu'on t'oriente ?


Edit : message déplacé dans la section Aide générale
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..] Fonction pour sortir d'une boucle

#14

Message par TomAijerrie »

Bonjour a écrit :
► Afficher le texteCode de Bonjour
Il y a deja un gros problème dans ton code
EndFunc sert à arreter la déclaration de la fonction.
Pour sortir de la fonction, il faut utiliser Return.

jguinch a écrit : ou faire exécuter un bout de code dans un process séparé.
Ou dans une fonction appelée par le hot key set pour sortir de la boucle, ou appelée par une ligne de code à la fin de la boucle.
Ce qui donne un code du style :
► Afficher le texte
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

Re: [..] Fonction pour sortir d'une boucle

#15

Message par Bonjour »

Concernant ce code
► Afficher le textecode
je savais tres bien qu'il ne fonctionnerai pas c'étais juste pour montrer que dans mon cas simuler des goto avec des boucles était inutile

Cependant l'idée de TomAijerrie semble être une bonne idée
Répondre