Page 1 sur 1
[R] Fonction pour sortir d'une boucle
Posté : jeu. 26 juin 2014 14:16
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

Re: [...] Fonction pour sortir d'une boucle
Posté : jeu. 26 juin 2014 14:21
par PandiPanda
Bonjour ceci?
► Afficher le texte
Code : Tout sélectionner
HotKeySet("{ESC}","stop")
Global $exit = 0
For $i = 0 To 50
If $exit = 1 Then ExitLoop
ConsoleWrite("["&$i&"]")
Sleep(1000)
Next
MsgBox(0,"exit","exit done")
Func stop()
$exit = 1
EndFunc
Re: [...] Fonction pour sortir d'une boucle
Posté : jeu. 26 juin 2014 14:27
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 ?
Re: [...] Fonction pour sortir d'une boucle
Posté : jeu. 26 juin 2014 15:58
par jguinch
C'est exactement ce que fait le code proposé par PandiPanda.
Tu l'as testé ?
Re: [...] Fonction pour sortir d'une boucle
Posté : jeu. 26 juin 2014 16:24
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 ?
Re: [...] Fonction pour sortir d'une boucle
Posté : jeu. 26 juin 2014 16:57
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
Re: [...] Fonction pour sortir d'une boucle
Posté : jeu. 26 juin 2014 17:00
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
Code : Tout sélectionner
HotKeySet("{ESC}","stop")
main()
suite()
Func suite()
MsgBox(0,"exit","exit done")
ConsoleWrite(@CRLF & @CRLF & "suite du code" & @CRLF)
Sleep(2000)
ConsoleWrite("Exit")
Sleep(1000)
EndFunc
Func main()
For $i = 0 To 50
ConsoleWrite("["&$i&"]")
Sleep(1000)
ConsoleWrite("["&$i + 0.25&"]")
Sleep(1000)
ConsoleWrite("["&$i + 0.5&"]")
Sleep(1000)
ConsoleWrite("["&$i + 0.75&"]")
Sleep(1000)
Next
EndFunc
Func stop()
suite()
Exit
EndFunc
Ca devrait aller si j'ai bien compris ta demande.
Re: [...] Fonction pour sortir d'une boucle
Posté : jeu. 26 juin 2014 18:39
par Bonjour
Et il n'y a pas de moyen de simuler les goto ?
Re: [...] Fonction pour sortir d'une boucle
Posté : jeu. 26 juin 2014 20:31
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é.
Re: [...] Fonction pour sortir d'une boucle
Posté : ven. 27 juin 2014 07:25
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 ?
Re: [...] Fonction pour sortir d'une boucle
Posté : ven. 27 juin 2014 07:39
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 ?
Re: [...] Fonction pour sortir d'une boucle
Posté : ven. 27 juin 2014 07:59
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.
Re: [...] Fonction pour sortir d'une boucle
Posté : ven. 27 juin 2014 08:24
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
Re: [..] Fonction pour sortir d'une boucle
Posté : ven. 27 juin 2014 10:42
par TomAijerrie
Bonjour a écrit :
► Afficher le texteCode de Bonjour
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
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
Code : Tout sélectionner
HotKeySet("{key}","fonctionSuite")
For $variable = 0 To 50 ;Debut d'une boucle
687 lignes de code
Next ;Fin de la boucle
fonctionSuite()
Func fonctionSuite()
HotKeySet("{Key}","")
;la suite du code
Exit ;pour ne pas retourner dans la boucle et refaire la fin du code
EndFunc
Re: [..] Fonction pour sortir d'une boucle
Posté : ven. 27 juin 2014 15:38
par Bonjour
Concernant ce code
► Afficher le textecode
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
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