Page 1 sur 1

[R] Présentation d'une longue condition

Posté : sam. 07 déc. 2019 10:23
par GMH
Bonjour,

Dans mon code, il n'est pas rare que je sois conduit à créer une longue condition du type :
If $lettre = "b" Or $lettre = "d" Or $lettre = "g" Or $lettre = "h" Or $lettre = "i" Or $lettre = "k" ..... etc...... Then
Ces longues conditions dépassent largement la largeur de l'écran de l'éditeur.

Y a-t-il moyen d'écrire plus intelligemment une longue condition ?

Je vous remercie de votre réponse.

Re: [..] Présentation d'une longue condition

Posté : sam. 07 déc. 2019 11:21
par rgx
- (espace + underscore) permet de couper une ligne dans l'éditeur (sauf dans une chaine)

Mais sinon, pourquoi ne pas utiliser Switch plutôt que des tas de Or ?
(Cela permet en plus de jouer avec des intervalles)

Code : Tout sélectionner

For $i = 97 To 122
    $lettre = Chr($i)    
    Switch $lettre
    	Case "b", "d", "g", "h", "i", "k"
            ConsoleWrite($lettre & " Oui" & @CRLF)       
        Case "x" To "z"
            ConsoleWrite($lettre & " x-z" & @CRLF)           
        Case Else
            ConsoleWrite($lettre & " Non" & @CRLF)         
    EndSwitch
Next
:wink:

Re: [..] Présentation d'une longue condition

Posté : sam. 07 déc. 2019 11:34
par Tlem
Bonjour.
Sinon une alternative plus courte au code de GMH et qui évite la modification en profondeur :

Code : Tout sélectionner

If StringInStr("bdghik", $lettre) Then ...

Re: [..] Présentation d'une longue condition

Posté : sam. 07 déc. 2019 16:31
par mikell
Thierry, ton code marche si $lettre ne contient effectivement qu'une seule lettre, parce que "hik" matche

Sinon ya le bon vieux regex If StringRegExp($lettre, '^[bdghik]$') Then ...
Mais j'aime bien la solution Switch, very versatile :mrgreen:

Re: [..] Présentation d'une longue condition

Posté : sam. 07 déc. 2019 18:21
par Tlem
Je me base sur ce que GMH a donné en information.
D'après son code il test une variable qui contient une seule et unique lettre, d'où ma proposition simplifiée. ^^

Re: [..] Présentation d'une longue condition

Posté : sam. 07 déc. 2019 19:00
par GMH
Merci à tous trois pour ces solutions.

If StringInStr("bdghik", $lettre) Then ...
If StringRegExp($lettre, '^[bdghik]$') Then ...

Les 2 solutions ci-dessus sont-elles adaptables lorsque les conditions sont l'existence de mots plutôt que de caractères uniques tels que :
If $mot = "le" Or $mot = "la" Or $mot = "les" Or $mot = "un" .....etc...... Then
Merci encore pour vos idées et votre attention.

Re: [..] Présentation d'une longue condition

Posté : sam. 07 déc. 2019 19:09
par mikell
Le regex marche mais il faut le formuler différemment :
If StringRegExp($mot, '^(le|la|les|un|une)$') Then ...
^ : début de string
| : alternative
$ : fin de string
les balises de début et de fin sont nécessaires sinon n'importe quel mot contenant "le" , "la", etc... sera accepté

Re: [R] Présentation d'une longue condition

Posté : sam. 07 déc. 2019 19:17
par GMH
Super !

Grand merci encore et bon week-end.