[R] If/Endif & Switch/EndSwitch

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 07:55
Status : Hors ligne

[R] If/Endif & Switch/EndSwitch

#1

Message par Tespark » mer. 10 avr. 2019 18:43

Bonjour,

je me permet de vous solliciter à nouveau car je me demande comment raccourcir les lignes que je crée pour un programme.

J'ai tout un tas de ligne comme cet exemple :
If $readA1 < 0.6 And $CalculClass < 19 Then
                GUICtrlSetBkColor($inpVM0Clac2, 0x0000FF)
        EndIf
        If $readA1 >= 0.6 And $readA1 <= 0.8 And $CalculClass >= 19 And $CalculClass <= 100 Then
                GUICtrlSetBkColor($inpVM1Clac2, 0x0000FF)
        EndIf
        If $readA1 > 0.8 And $readA1 <= 1 And $CalculClass > 28 And $CalculClass <= 100 Then
                GUICtrlSetBkColor($inpVM2Clac2, 0x0000FF)
        EndIf
        If $readA1 > 1 And $readA1 <= 1.3 And $CalculClass > 38 And $CalculClass <= 100 Then
                GUICtrlSetBkColor($inpVM3Clac2, 0x0000FF)
        EndIf
        If $readA1 > 1.3 And $readA1 <= 1.6 And $CalculClass > 48 And $CalculClass <= 100 Then
                GUICtrlSetBkColor($inpVM4Clac2, 0x0000FF)
        EndIf
        If $readA1 > 1.6 And $CalculClass > 55 Then
                GUICtrlSetBkColor($inpVM5Clac2, 0x0000FF)
        EndIf
Je me suis dit que Switch/EndSwitch serait une solution mais je suis incapable d'arriver à le retranscrire !
Peut-être une solution plus simple ?

Je doute également sur le fait d'ajouter des and à mes lignes, est-ce que cela peux fausser un calcul ?
Trop de conditions ?

Merci :)
Modifié en dernier par Tespark le jeu. 11 avr. 2019 09:04, modifié 1 fois.

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 685
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: [..] If/Endif & Switch/EndSwitch

#2

Message par walkson » mer. 10 avr. 2019 20:08

Bonjour,
Comme ceci ?
test(0.3,8)
test(0.8,80)
test(2,80)
test(0.3,105)

Func test($readA1, $CalculClass)
        Select
                Case $readA1 < 0.6 And $CalculClass < 19
                        MsgBox(0,"",1)
                Case $readA1 >= 0.6 And $readA1 <= 0.8 And $CalculClass >= 19 And $CalculClass <= 100
                        MsgBox(0,"",2)
                Case $readA1 > 0.8 And $readA1 <= 1 And $CalculClass > 28 And $CalculClass <= 100
                        MsgBox(0,"",3)
                Case $readA1 > 1 And $readA1 <= 1.3 And $CalculClass > 38 And $CalculClass <= 100
                        MsgBox(0,"",4)
                Case $readA1 > 1.3 And $readA1 <= 1.6 And $CalculClass > 48 And $CalculClass <= 100
                        MsgBox(0,"",5)
                Case $readA1 > 1.6 And $CalculClass > 55
                        MsgBox(0,"",6)
                Case Else
                        MsgBox(0,"","autre")

        EndSelect

EndFunc
 
Je l'ai mis sous forme de fonction pour tester mais ce n'est pas obligatoire. Sans fonction, il faudra déclarer $readA1et $CalculClass
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 07:55
Status : Hors ligne

Re: [..] If/Endif & Switch/EndSwitch

#3

Message par Tespark » mer. 10 avr. 2019 20:55

Merci pour cette réponse.
Mais pour être honnête je n'ai pas compris l'appel à la fonction.
test(0.3,8)
test(0.8,80)
test(2,80)
test(0.3,105)
Je vais travailler cette fonction avec Select/EndSelect :D

Merci pour cette solution qui permettra surement d'alléger le code source.

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 685
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: [..] If/Endif & Switch/EndSwitch

#4

Message par walkson » mer. 10 avr. 2019 21:18

C'est simple
pour test(0.3,8)
l'équivalent est test($readA1= 0.3, $CalculClass = 8)
pour test(0.3,105) vous obtenez MsgBox(0,"","autre") car rien ne correspond aux conditions

RMQ: je n'ai pas fait attention que plusieurs conditions peuvent se croiser, dans ce cas il faut utiliser ContinueCase pour lister toutes les conditions
Dans le cas contraire, la boucle s’arrête à la première condition trouvée
               
Case $readA1 < 0.6 And $CalculClass < 19
     MsgBox(0,"",1)
    ContinueCase
Case .............
ça fait un code très semblable au votre mais qui est plus lisible et un peu plus rapide
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 07:55
Status : Hors ligne

Re: [R] If/Endif & Switch/EndSwitch

#5

Message par Tespark » jeu. 11 avr. 2019 09:04

Bonjour,

merci pour cette explication, j'étais loin de cette logique :D
Mais en effet c'est simple.
je rajoute ContinueCase.
Merci beaucoup pour cette aide.

Répondre