Page 1 sur 1

[R] If/Endif & Switch/EndSwitch

Posté : mer. 10 avr. 2019 19:43
par Tespark
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 :)

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

Posté : mer. 10 avr. 2019 21:08
par walkson
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

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

Posté : mer. 10 avr. 2019 21:55
par Tespark
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.

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

Posté : mer. 10 avr. 2019 22:18
par walkson
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

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

Posté : jeu. 11 avr. 2019 10:04
par Tespark
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.