[R] Présentation d'une longue condition

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
GMH
Niveau 6
Niveau 6
Messages : 209
Enregistré le : dim. 24 juin 2012 14:56
Status : Hors ligne

[R] Présentation d'une longue condition

#1

Message 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.
Modifié en dernier par GMH le sam. 07 déc. 2019 19:17, modifié 1 fois.
rgx
Niveau 3
Niveau 3
Messages : 32
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

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

#2

Message 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:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11572
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#3

Message 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 ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6024
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#4

Message 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:
" 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
Tlem
Site Admin
Site Admin
Messages : 11572
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#5

Message 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. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
GMH
Niveau 6
Niveau 6
Messages : 209
Enregistré le : dim. 24 juin 2012 14:56
Status : Hors ligne

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

#6

Message 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.
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6024
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#7

Message 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é
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
GMH
Niveau 6
Niveau 6
Messages : 209
Enregistré le : dim. 24 juin 2012 14:56
Status : Hors ligne

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

#8

Message par GMH »

Super !

Grand merci encore et bon week-end.
Répondre