Les conditions en ABAP #
IF … ENDIF #
Objectifs #
- Comprendre le fonctionnement de l’instruction
IFen ABAP - Savoir tester une ou plusieurs conditions avec
IF,ELSEIFetELSE - Apprendre à combiner les conditions avec
ANDetOR - Prévenir les erreurs et comportements inattendus (ex : division par zéro)
- Savoir organiser correctement les conditions pour respecter la priorité
AND/OR
Définition #
L’instruction
IFpermet de tester une condition sur une variable et d’exécuter un traitement uniquement si cette condition est vraie. Elle peut être complétée parELSEIFpour tester d’autres conditions etELSEpour gérer tous les cas restants.
Comme un passage piéton : si le feu est vert, vous traversez ; si le feu est orange, vous ralentissez ; sinon vous attendez.
IFest la structure de contrôle la plus simple pour gérer une logique conditionnelle dans ABAP. La bonne utilisation deANDetORpermet de combiner plusieurs conditions logiques efficacement.
Syntaxe #
IF log_exp1.
[statement_block1]
[ELSEIF log_exp2.
[statement_block2]]
...
[ELSE.
[statement_blockn]]
ENDIF.
log_exp: expression logique à testerELSEIF: permet de tester une autre condition si la première est fausseELSE: exécute le traitement si toutes les conditions précédentes sont fausses
Les blocs
IF/ELSEIF/ELSEdoivent être correctement indentés pour une meilleure lisibilité du code.
Exemples #
Exemple simple #
WRITE:/ ' - IF SIMPLE...'.
DATA: lv_a TYPE I,
lv_b TYPE I,
lv_c TYPE I.
lv_b = 3.
lv_c = 2.
lv_a = lv_b + lv_c.
IF lv_a = 5.
WRITE:/ 'Condition confirmée, lv_a = 5'.
ENDIF.
Vérifier si un objet a la valeur attendue avant de passer à l’action suivante.
Avec ELSEIF et ELSE #
WRITE:/ ' - IF ELSEIF...'.
DATA lv_month TYPE I.
lv_month = SY-DATUM+4(2).
IF lv_month = 1.
WRITE:/'C''est le mois de janvier'.
ELSEIF lv_month = 2.
WRITE:/'C''est le mois de février'.
ELSEIF lv_month = 3.
WRITE:/'C''est le mois de mars'.
ELSEIF lv_month = 4.
WRITE:/'C''est le mois d''avril'.
ELSEIF lv_month = 5.
WRITE:/'C''est le mois de mai'.
ELSE.
WRITE:/'Autre mois de l''année'.
ENDIF.
ELSEIFpermet d’éviter d’empiler plusieurs IF imbriqués et rend le code plus lisible.
Utilisation de AND / OR #
WRITE:/ ' - IF ELSEIF AND/OR...'.
DATA: lv_month TYPE i,
lv_day TYPE i.
lv_month = SY-DATUM+4(2).
lv_day = SY-DATUM+6(2).
IF lv_month = 12 OR lv_month = 1 OR lv_month = 2.
WRITE:/'C''est l''hiver'.
ELSEIF lv_month = 3 OR lv_month = 4 OR lv_month = 5.
WRITE:/'C''est le printemps'.
ELSEIF lv_month = 6 OR lv_month = 7 OR lv_month = 8.
WRITE:/'C''est l''été'.
ELSEIF lv_month = 9 OR lv_month = 10 OR lv_month = 11.
WRITE:/'C''est l''automne'.
ENDIF.
IF lv_month = 1 AND lv_day = 1.
WRITE:/'Bonne année'.
ELSEIF lv_month = 12 AND lv_day = 25.
WRITE:/'Joyeux Noël'.
ELSEIF lv_month = 5 AND lv_day = 1.
WRITE:/'Bonne fête du travail'.
ELSE.
WRITE:/'Bonne journée'.
ENDIF.
L’opérateur
ANDvérifie que toutes les conditions sont vraies, tandis queORvérifie qu’au moins une condition est vraie.
Priorité AND / OR #
L’opérateur AND a toujours la priorité sur OR.
Pour éviter toute ambiguïté, utilisez des parenthèses.
WRITE:/ ' - IF PRIORITY...'.
IF ( lv_month = 1 OR lv_month = 2 ) AND lv_day = 1.
WRITE:/ 'Nouvel an ou autre événement en janvier/février'.
ENDIF.
Toujours clarifier la logique avec des parenthèses pour éviter des résultats inattendus.
Éviter un dump #
WRITE:/ ' - IF PREVENTIF ANTI DUMP...'.
DATA: lv_a TYPE I,
lv_b TYPE I,
lv_result TYPE I.
lv_a = 5.
lv_b = 0.
IF lv_b > 0.
lv_result = lv_a / lv_b.
WRITE lv_result.
ELSE.
WRITE 'La valeur de lv_b est égale à 0, opération impossible'.
ENDIF.
Vérifiez les conditions pour éviter des erreurs runtime, comme la division par zéro.
Résumé #
IFteste une condition et exécute le bloc si elle est vraie.ELSEIFpermet de tester des conditions alternatives.ELSEcapture tous les autres cas non couverts.AND/ORpermettent de combiner plusieurs conditions.- Utiliser toujours un contrôle pour éviter les erreurs comme la division par zéro.
[!TIP] Comme des feux de circulation et panneaux : selon la situation, l’action change.
Opérateurs de comparaison #
Objectifs #
- Comprendre le rôle des opérateurs de comparaison en ABAP
- Savoir appliquer les opérateurs pour tester l’égalité, la différence et les relations d’ordre
- Savoir utiliser les mots-clés (
EQ,GT,LE, etc.) dans les instructions ABAP
Définition #
Les opérateurs de comparaison permettent de tester des conditions entre deux valeurs. Ils peuvent être utilisés pour tous les types de données : numériques, alphanumériques ou texte.
Ces opérateurs servent principalement dans les instructions
IF,WHILEou toute condition logique. Ils renvoient vrai ou faux selon le résultat de la comparaison.
Tableau des opérateurs #
| Operation | Signe | Keyword | Signification |
|---|---|---|---|
| Égal | = |
EQ |
EQual |
| Strictement supérieur à | > |
GT |
Greater Than |
| Supérieur ou égal à | >= |
GE |
Greater or Equal |
| Strictement inférieur à | < |
LT |
Lower Than |
| Inférieur ou égal à | <= |
LE |
Lower or Equal |
| Différent | <> |
NE |
Not Equal |
=ouEQvérifie l’égalité stricte>ouGTet<ouLTcomparent les valeurs numériques ou alphabétiques>=ouGEet<=ouLEincluent l’égalité dans la comparaison<>ouNEvérifie que deux valeurs sont différentes
Comme mesurer et comparer deux objets pour savoir lequel est plus grand, plus petit, identique ou différent.
Préférer les mots-clés (
EQ,NE,GT, etc.) dans les instructions ABAP pour une meilleure lisibilité et clarté du code, surtout lors de la lecture par d’autres développeurs.
CASE … ENDCASE #
Objectifs #
- Comprendre le fonctionnement de l’instruction
CASEen ABAP - Savoir tester une variable et exécuter des traitements selon sa valeur
- Apprendre à utiliser
WHEN,ORetWHEN OTHERSpour gérer tous les cas possibles - Éviter les comportements inattendus en prévoyant un traitement par défaut
Définition #
L’instruction CASE permet de vérifier la valeur d’une (seule) variable et d’exécuter différents traitements selon cette valeur.
Comme un feu tricolore : selon la couleur (valeur), vous effectuez une action différente (stop, avancer, ralentir).
Le
CASEest souvent plus lisible qu’une série deIF ... ELSEIF ... ELSEquand on a plusieurs valeurs à tester pour la même variable.
Syntaxe #
CASE operand.
[WHEN operand1 [OR operand2 [OR operand3 [...]]].
[statement_block1]]
...
[WHEN OTHERS.
[statement_blockn]]
ENDCASE.
operand: variable à testerWHEN: définit une ou plusieurs valeurs et le traitement associéOR: permet d’associer plusieurs valeurs pour un même traitementWHEN OTHERS: optionnel, capture tous les cas non prévus
Toujours prévoir un
WHEN OTHERSpour éviter des comportements inattendus si la valeur de la variable n’est pas dans les cas définis.
Préférer
CASElorsque plusieurs valeurs d’une même variable doivent déclencher des traitements distincts, pour une meilleure lisibilité et maintenance du code.
Exemple #
WRITE:/ ' - CASE ENDCASE...'.
DATA: lv_month TYPE i.
lv_month = SY-DATUM+4(2).
CASE lv_month.
WHEN 12 OR 1 OR 2.
WRITE:/'C''est l''hiver'.
WHEN 3 OR 4 OR 5.
WRITE:/'C''est le printemps'.
WHEN 6 OR 7 OR 8.
WRITE:/'C''est l''été'.
WHEN 9 OR 10 OR 11.
WRITE:/'C''est l''automne'.
WHEN OTHERS.
WRITE:/'Y a plus de saison!'.
ENDCASE.
Le programme lit la variable
lv_monthcomme si on lisait un choix de menu : selon la valeur, une action spécifique est effectuée.
Résumé #
CASEteste une variable pour exécuter différents traitements selon sa valeur.WHENdéfinit les valeurs possibles et le traitement associé.ORpermet de regrouper plusieurs valeurs sous un même traitement.WHEN OTHERScapture toutes les valeurs non prévues pour éviter des erreurs.[!TIP] Comme un menu avec plusieurs options : selon le choix de l’utilisateur, une action différente sera exécutée.
IS INITIAL #
Objectifs #
- Comprendre l’utilisation de
IS INITIALpour tester si une variable est vide ou contient sa valeur par défaut - Savoir utiliser
IS NOT INITIALpour vérifier qu’une variable contient une valeur - Appliquer
IS INITIALavecIFpour les conditions simples - Appliquer
IS INITIALavecCASEpour gérer plusieurs cas - Simplifier les tests de variables non initialisées ou vides
Définition #
L’instruction IS INITIAL permet de tester si une variable est initialisée ou non.
IS INITIALretourne vrai si la variable est vide ou contient la valeur par défaut pour son type.IS NOT INITIALretourne vrai si la variable contient une valeur.
Comme vérifier si une boîte est vide ou contient quelque chose
Très pratique pour éviter des erreurs lorsque l’on travaille sur des variables qui peuvent ne pas être encore remplies
Syntaxe #
Avec IF #
IF operand IS [NOT] INITIAL.
[statement_block]
ENDIF.
Avec CASE #
CASE operand.
[WHEN IS [NOT] INITIAL].
[statement_block1]
...
[WHEN OTHERS].
[statement_blockn]
ENDCASE.
Le
IS INITIALfonctionne pour tous les types de variables : chaînes, nombres, dates, heures, tables internes.
IF IS INITIAL #
WRITE:/ ' - IS INITIAL + IF...'.
DATA: lv_text TYPE string,
lv_num TYPE i.
lv_text = ''.
lv_num = 0.
IF lv_text IS INITIAL.
WRITE:/ 'La variable lv_text est vide'.
ENDIF.
IF lv_num IS NOT INITIAL.
WRITE:/ 'La variable lv_num contient une valeur'.
ENDIF.
Vérifier une boîte avant de l’utiliser : si elle est vide, on peut la remplir, sinon on lit son contenu
Résumé #
IS INITIALteste si une variable est vide ou contient sa valeur par défaut.IS NOT INITIALteste si la variable contient une valeur.- Fonctionne pour tous les types de variables : chaînes, nombres, dates, tables internes.
[!TIP] Comme vérifier si une boîte est vide ou remplie avant d’agir sur son contenu
BETWEEN #
Objectifs #
- Comprendre l’utilisation de
BETWEENpour tester si une variable est dans une plage - Savoir appliquer
BETWEEN low AND highavecIF - Savoir appliquer
BETWEEN low AND highavecCASE - Simplifier les comparaisons numériques grâce à
BETWEEN - Combiner
BETWEENavec d’autres tests commeIS INITIALpour des conditions robustes
Définition #
L’instruction BETWEEN permet de tester si une variable se situe dans une plage de valeurs.
BETWEEN low AND highretourne vrai si la variable est comprise entrelowethighinclusivement.- Peut être utilisé avec
IFouCASE.
Comme vérifier si une valeur se situe entre deux bornes sur une règle graduée
Idéal pour tester des intervalles de scores, des âges, ou toute variable numérique devant respecter une plage précise
Syntaxe #
Avec IF #
WRITE:/ ' - BETWEEN + IF...'.
DATA: lv_variable TYPE i.
IF lv_variable BETWEEN 1 AND 100.
WRITE: 'La variable lv_variable est comprise entre 1 et 100.'.
ELSE.
WRITE: 'La variable lv_variable n''est pas comprise entre 1 et 100.'.
ENDIF.
Plutôt que d’écrire
IF lv_variable >= 1 AND lv_variable <= 100,BETWEENsimplifie la lecture et réduit le risque d’erreur.
Avec CASE #
WRITE:/ ' - BETWEEN + CASE...'.
DATA: lv_variable TYPE i.
CASE lv_variable.
WHEN BETWEEN 1 AND 100.
WRITE: 'La variable lv_variable est comprise entre 1 et 100.'.
WHEN OTHERS.
WRITE: 'La variable lv_variable n''est pas comprise entre 1 et 100.'.
ENDCASE.
Le
BETWEENest compatible avecWHENdans unCASE, ce qui rend les blocs plus lisibles pour les plages numériques.
Résumé #
BETWEEN low AND highteste si une variable est comprise entre deux valeurs inclusives.- Fonctionne avec
IFetCASE.- Simplifie les conditions comparatives sur des plages numériques.
[!TIP] Comme vérifier si une valeur se situe entre deux bornes sur une règle graduée, plus lisible et moins sujet aux erreurs que plusieurs comparaisons séparées
CONTAINS ONLY (CO) #
Objectifs #
- Comprendre l’opérateur
CO(Contains Only) et son utilité - Vérifier qu’une chaîne ne contient que des caractères autorisés
- Savoir utiliser
IF ... CO ... ENDIFpour des contrôles simples - Connaître la sensibilité à la casse de
CO - Utiliser
SY-FDPOSpour connaître la position du dernier caractère vérifié - Appliquer
COpour valider ou filtrer des entrées utilisateur
Définition #
L’opérateur CO (Contains Only) permet de vérifier qu’une chaîne de caractères ne contient que certains caractères définis dans une autre chaîne.
C’est comme vérifier que les lettres d’un mot appartiennent toutes à un alphabet donné.
“HELLO” ne contient que des lettres de A à Z → vrai. “HELLO1” contient un chiffre → faux.
Idéal pour contrôler des saisies utilisateur ou valider que des codes ne contiennent que des caractères autorisés
Syntaxe #
IF oper1 CO oper2.
[statement_block]
ENDIF.
oper1→ la chaîne à analyser.oper2→ les caractères autorisés dansoper1.- Si
oper1contient uniquement des caractères présents dansoper2, la condition est vraie.
L’opérateur
COvérifie chaque caractère deoper1et renvoie TRUE uniquement si tous sont présents dansoper2. La position du dernier caractère vérifié est stockée dansSY-FDPOS.
Exemple basique #
WRITE:/ ' - IF CONTAINS ONLY...'.
CONSTANTS: lc_oper1 TYPE CHAR5 VALUE 'Hello',
lc_oper2 TYPE CHAR5 VALUE 'Hello'.
IF lc_oper1 CO lc_oper2.
WRITE:/ 'lc_oper1 contient uniquement les caractères de ', lc_oper2,
' à la position ', SY-FDPOS.
ELSE.
WRITE:/ 'lc_oper1 ne contient pas uniquement les caractères de ', lc_oper2.
ENDIF.
Explication #
lc_oper1etlc_oper2contiennent'Hello'.IF lc_oper1 CO lc_oper2.vérifie que tous les caractères delc_oper1sont danslc_oper2.- Ici la condition est vraie, et
SY-FDPOS = 5indique la position du dernier caractère. - Si
lc_oper2valait'Hell', la condition serait fausse.
COest sensible à la casse :'HELLO'≠'Hello'.- Très utile pour valider que les codes ou chaînes saisies respectent un alphabet ou un ensemble de caractères autorisés.
Résumé #
CO= Contains Only → teste si tous les caractères d’une chaîne appartiennent à un ensemble autorisé.- Retourne TRUE si la chaîne respecte l’ensemble, FALSE sinon.
- La position du dernier caractère vérifié est disponible dans
SY-FDPOS.- Idéal pour valider ou filtrer des saisies utilisateur.
[!TIP] Vérifier que tous les ingrédients d’un plat proviennent d’une seule liste autorisée, sans intrus.
CONTAINS ANY (CA) #
Objectifs #
- Comprendre l’opérateur
CA(Contains Any) et son fonctionnement - Vérifier si une chaîne contient au moins un caractère d’une autre chaîne
- Savoir utiliser
IF ... CA ... ENDIFpour des contrôles simples - Utiliser
SY-FDPOSpour obtenir la position du premier caractère trouvé - Appliquer
CApour détecter la présence de caractères spécifiques dans une entrée utilisateur
Définition #
L’opérateur CA (Contains Any) permet de vérifier si une chaîne de caractères (oper1) contient au moins un caractère présent dans une autre chaîne (oper2).
La condition est vraie dès qu’un seul caractère de oper2 est trouvé dans oper1.
Imagine
oper2comme une “boîte de lettres à rechercher”. Si tu ouvresoper1et que tu y trouves au moins une de ces lettres, la conditionCAest validée.
- “HELLO” CA “XYZ” → faux (aucune lettre commune)
- “HELLO” CA “AEIOU” → vrai (il y a “E” et “O”)
- “HELLO” CA “LLO” → vrai (le “L” apparaît très vite)
Pratique pour détecter la présence de caractères spécifiques dans des saisies utilisateur (lettres, chiffres, symboles)
Syntaxe #
IF oper1 CA oper2.
[statement_block]
ENDIF.
oper1→ la chaîne testéeoper2→ la chaîne contenant les caractères recherchés- Condition vraie si au moins un caractère de
oper2est présent dansoper1
L’opérateur
CAparcourtoper1et retourne TRUE dès qu’il trouve un caractère présent dansoper2. La variable systèmeSY-FDPOSindique la position du premier caractère trouvé.
Exemple #
WRITE:/ ' - IF CONTAINS ANY...'.
CONSTANTS: lc_oper1 TYPE CHAR5 VALUE 'Hello',
lc_oper2 TYPE CHAR3 VALUE 'llo'.
IF lc_oper1 CA lc_oper2.
WRITE:/ 'lc_oper1 contient au moins un caractère de ', lc_oper2,
' à la position ', SY-FDPOS.
ELSE.
WRITE:/ 'lc_oper1 ne contient aucun caractère de ', lc_oper2.
ENDIF.
lc_oper1 = 'Hello',lc_oper2 = 'llo'- La condition est vraie car
letosont présents danslc_oper1 SY-FDPOS = 2→ position du premier caractère trouvé
CAest sensible à la casse :'HELLO'≠'Hello'- Très utile pour vérifier la présence de chiffres, lettres ou symboles dans un champ texte
Résumé #
CA= Contains Any → vérifie sioper1contient au moins un caractère deoper2.- Condition TRUE dès qu’un seul caractère correspond
SY-FDPOSretourne la position du premier caractère trouvé- Idéal pour vérifier la présence de caractères spécifiques dans une chaîne
[!TIP] C’est comme chercher une lettre précise dans une boîte pour savoir si elle s’y trouve
CONTAINS STRING (CS) #
Objectifs #
- Comprendre l’opérateur
CS(Contains String) et son fonctionnement - Vérifier si une chaîne contient une sous-chaîne complète
- Différencier
CS(sous-chaîne) deCA(caractère individuel) - Apprendre à utiliser
IF ... CS ... ENDIFpour des contrôles simples - Identifier quand utiliser
FINDpour obtenir la position exacte ou faire des recherches avancées
Définition #
L’opérateur CS (Contains String) permet de vérifier si une chaîne de caractères (oper1) contient une sous-chaîne complète (oper2).
Contrairement à CA (Contains Any), qui ne recherche qu’un caractère, CS recherche une séquence entière de caractères dans une autre chaîne.
Imagine
oper1comme un livre etoper2comme une phrase précise que tu veux retrouver. Si la phrase exacte est présente, la conditionCSest vraie.
- “HELLO WORLD” CS “WORLD” → vrai
- “HELLO WORLD” CS “WOR” → vrai
- “HELLO WORLD” CS “WORD” → faux (lettres hors séquence)
- “HELLO WORLD” CS “hello” → faux (sensible à la casse)
Le
CSest utile pour vérifier si un texte contient une séquence précise sans parcourir chaque caractère individuellement.
Syntaxe #
IF oper1 CS oper2.
[statement_block]
ENDIF.
oper1→ chaîne principaleoper2→ sous-chaîne recherchée- Condition vraie si
oper2est présente dansoper1
Exemple #
WRITE:/ ' - IF CONTAINS STRING...'.
CONSTANTS: lc_oper1 TYPE CHAR11 VALUE 'Hello World',
lc_oper2 TYPE CHAR5 VALUE 'World'.
IF lc_oper1 CS lc_oper2.
WRITE:/ 'lc_oper1 contient la chaîne de caractères ', lc_oper2.
ELSE.
WRITE:/ 'lc_oper1 ne contient pas la chaîne de caractères ', lc_oper2.
ENDIF.
lc_oper1= “Hello World”lc_oper2= “World”- Condition vraie car “World” est une sous-chaîne de “Hello World”
- Résultat affiché :
lc_oper1 contient la chaîne de caractères World
Pour obtenir la position exacte de la sous-chaîne ou effectuer des recherches plus complexes (insensible à la casse, mot complet…), utiliser plutôt
FIND.
Résumé #
CS= Contains String → vérifie sioper1contient la sous-chaîne exacteoper2.- Sensible à la casse.
- Condition vraie si la séquence complète est présente.
- Pour des recherches plus détaillées, utiliser
FIND.[!TIP] C’est comme chercher une phrase exacte dans un livre plutôt que vérifier lettre par lettre
NO STRING (NS) #
Objectifs #
- Comprendre l’opérateur
NS(No String) et son fonctionnement - Vérifier si une chaîne ne contient pas une sous-chaîne spécifique
- Différencier
NS(absence de sous-chaîne) deCS(présence de sous-chaîne) - Apprendre à utiliser
IF ... NS ... ENDIFpour contrôler l’absence d’une séquence - Identifier les cas pratiques où la vérification de l’absence est nécessaire
Définition #
L’opérateur NS (No String) est l’inverse de CS (Contains String).
Il permet de vérifier qu’une chaîne de caractères (oper1) ne contient pas une autre sous-chaîne (oper2).
Imagine
oper1comme un livre etoper2comme une phrase précise que tu cherches. Si cette phrase n’existe pas dans le texte, la conditionNSest vraie.
- “HELLO WORLD” NS “WORLD” → faux
- “HELLO WORLD” NS “SAP” → vrai
- “HELLO WORLD” NS “hello” → vrai (sensible à la casse)
Syntaxe #
IF oper1 NS oper2.
[statement_block]
ENDIF.
oper1→ chaîne principaleoper2→ sous-chaîne recherchée- Condition vraie si
oper2n’est pas présente dansoper1
Exemple #
WRITE:/ ' - IF NO STRING...'.
CONSTANTS: lc_oper1 TYPE CHAR11 VALUE 'Hello World',
lc_oper2 TYPE CHAR3 VALUE 'SAP'.
IF lc_oper1 NS lc_oper2.
WRITE:/ 'lc_oper1 ne contient pas la chaîne de caractères ', lc_oper2.
ELSE.
WRITE:/ 'lc_oper1 contient la chaîne de caractères ', lc_oper2.
ENDIF.
lc_oper1= “Hello World”lc_oper2= “SAP”- Condition vraie car “SAP” n’existe pas dans “Hello World”
- Résultat affiché :
lc_oper1 ne contient pas la chaîne de caractères SAP
Différence avec CS #
CS(Contains String) → vrai si la sous-chaîne est trouvéeNS(No String) → vrai si la sous-chaîne n’est pas trouvée
Résumé #
NS= No String → vérifie queoper1ne contient pasoper2- Sensible à la casse
- Inverse logique de
CS- Très utile pour détecter l’absence d’un mot ou d’une séquence spécifique dans une chaîne
[!TIP] C’est comme vérifier qu’une phrase précise n’apparaît pas dans un livre
COVERS PATTERN (CP) #
Objectifs #
- Comprendre l’opérateur
CP(Covers Pattern) et son usage - Vérifier si une chaîne correspond à un PATTERN avec caractères génériques (* et +)
- Utiliser
IF…CP…ENDIFpour des comparaisons flexibles - Identifier les situations pratiques : noms de fichiers, extensions, formats textuels
- Reconnaître la sensibilité à la casse et les types de VARIABLES compatibles (C ou STRING)
Définition #
L’opérateur CP (Covers Pattern) permet de tester si une chaîne (oper1) correspond à un PATTERN (oper2) qui peut contenir des caractères génériques (* et +).
Comme un filtre de recherche dans un explorateur de fichiers : “*.png” renvoie tous les fichiers terminant par “.png”.
Le
CPest sensible à la casse. “Hello” ne correspond pas à “*hello”.
Syntaxe #
IF oper1 CP oper2.
[statement_block]
ENDIF.
- oper1 → CHAINE à tester
- oper2 → MODELE contenant éventuellement :
-
- → remplace n’importe quelle suite de caractères (même vide)
-
- → remplace exactement un caractère
-
Utiliser
CPpour valider des formats de fichiers, codes produits ou motifs textuels particuliers.
Exemples #
WRITE:/ ' - IF COVERS PATTERN...'.
CONSTANTS: lc_oper1 TYPE CHAR9 VALUE 'image.png',
lc_oper2 TYPE CHAR5 VALUE '*.png'.
IF lc_oper1 CP lc_oper2.
WRITE:/ 'Le fichier lu est au format PNG'.
ELSE.
WRITE:/ 'Le fichier lu n''est pas au format PNG'.
ENDIF.
Explication :
- lc_oper1 = “image.png”
- lc_oper2 = “*.png”
- Le “*” signifie “peu importe ce qu’il y a avant .png”.
- Résultat : “Le fichier lu est au format PNG”
Autres exemples #
- ‘abc123’ CP ‘abc*’ → VRAI (commence par “abc”)
- ‘abc123’ CP ‘*123’ → VRAI (finit par “123”)
- ‘abc123’ CP ‘a+*’ → VRAI (premier caractère “a”, suivi d’au moins un autre)
- ‘hello’ CP ‘*o’ → VRAI (se termine par “o”)
- ‘hello’ CP ‘*x’ → FAUX (ne finit pas par “x”)
CPfonctionne uniquement avec les types de VARIABLESCouSTRING.
Résumé #
CP= COVERS PATTERN → teste la correspondance d’une CHAINE avec un PATTERN.- Caractères génériques * → plusieurs caractères, + → un caractère
- Sensible à la casse
- Très utile pour filtrer fichiers, extensions ou formats textuels
[!TIP] Comme un filtre de recherche avancé : on peut dire “montre-moi tous les fichiers commençant par ‘abc’ et finissant par ‘.txt’”.
NO PATTERN (NP) #
Objectifs #
- Comprendre l’opérateur
NP(No Pattern) et son rôle - Vérifier si une CHAINE ne correspond pas à un PATTERN avec jokers (* et +)
- Utiliser
IF…NP…ENDIFpour des comparaisons inverses - Identifier les applications pratiques : exclure des fichiers, formats ou motifs textuels
- Reconnaître la sensibilité à la casse et les types de VARIABLES compatibles (C ou STRING)
Définition #
L’opérateur NP (No Pattern) est l’inverse de CP (Covers Pattern).
Il permet de vérifier si une CHAINE (oper1) ne correspond pas au PATTERN (oper2) contenant des caractères génériques (* et +).
Si
CPest comme un filtre qui sélectionne les fichiers correspondants (ex : “*.png” pour ne garder que les images), alorsNPest son opposé — il exclut tout ce qui correspond à ce modèle. C’est comme dire : “je veux tout sauf les fichiers .png”.
Le
NPest sensible à la casse. “Hello” et “hello” seront considérés différents.
Syntaxe #
IF oper1 NP oper2.
[statement_block]
ENDIF.
- oper1 → CHAINE à tester
- oper2 → PATTERN à ne pas respecter (avec * et + comme jokers)
Exclure certains fichiers ou formats non désirés, valider que des entrées ne correspondent pas à un motif interdit.
Exemples #
WRITE:/ ' - IF NO PATTERN...'.
CONSTANTS: lc_oper1 TYPE CHAR9 VALUE 'texte.txt',
lc_oper2 TYPE CHAR5 VALUE '*.png'.
IF lc_oper1 NP lc_oper2.
WRITE:/ 'Le fichier lu n''est pas au format PNG'.
ELSE.
WRITE:/ 'Le fichier lu est au format PNG'.
ENDIF.
Explication :
- lc_oper1 = “texte.txt”
- lc_oper2 = “*.png”
- Le programme teste si “texte.txt” NE correspond PAS au modèle “*.png”.
- Résultat : “Le fichier lu n’est pas au format PNG”
Autres exemples #
- ‘photo.jpg’ NP ‘*.png’ → VRAI (ne correspond pas au modèle)
- ‘photo.png’ NP ‘*.png’ → FAUX (correspond au modèle)
- ‘hello’ NP ‘h+*’ → FAUX (commence bien par “h”)
- ‘data123’ NP ‘abc’ → VRAI (ne contient pas “abc”)
Le motif (oper2) doit être une chaîne de type
CouSTRING.
Résumé #
NP= NO PATTERN → teste qu’une chaîne ne correspond pas à un PATTERN donné.- Opposé de
CP(Covers Pattern).- Caractères génériques : * pour plusieurs caractères, + pour un seul.
- Sensible à la casse.
- Très utile pour exclure des fichiers, formats ou motifs textuels indésirables.
[!TIP] Comme dire “je veux tout sauf ce type de fichier ou ce motif précis”.