Aller au contenu
  1. Documentation/

Les conditions en ABAP

··19 mins· loading · loading · · ·
SAP ERP Back-End
Adrien D'acunto
Auteur
Adrien D’acunto
Sommaire

Les conditions en ABAP
#

IF … ENDIF
#

Objectifs
#

  • Comprendre le fonctionnement de l’instruction IF en ABAP
  • Savoir tester une ou plusieurs conditions avec IF, ELSEIF et ELSE
  • Apprendre à combiner les conditions avec AND et OR
  • 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 IF permet 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 par ELSEIF pour tester d’autres conditions et ELSE pour 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.

IF est la structure de contrôle la plus simple pour gérer une logique conditionnelle dans ABAP. La bonne utilisation de AND et OR permet 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 à tester
  • ELSEIF : permet de tester une autre condition si la première est fausse
  • ELSE : exécute le traitement si toutes les conditions précédentes sont fausses

Les blocs IF/ELSEIF/ELSE doivent ê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.

ELSEIF permet 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 AND vérifie que toutes les conditions sont vraies, tandis que OR vé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é
#

  • IF teste une condition et exécute le bloc si elle est vraie.
  • ELSEIF permet de tester des conditions alternatives.
  • ELSE capture tous les autres cas non couverts.
  • AND / OR permettent 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, WHILE ou 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
  • = ou EQ vérifie l’égalité stricte
  • > ou GT et < ou LT comparent les valeurs numériques ou alphabétiques
  • >= ou GE et <= ou LE incluent l’égalité dans la comparaison
  • <> ou NE vé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 CASE en ABAP
  • Savoir tester une variable et exécuter des traitements selon sa valeur
  • Apprendre à utiliser WHEN, OR et WHEN OTHERS pour 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 CASE est souvent plus lisible qu’une série de IF ... ELSEIF ... ELSE quand 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 à tester
  • WHEN : définit une ou plusieurs valeurs et le traitement associé
  • OR : permet d’associer plusieurs valeurs pour un même traitement
  • WHEN OTHERS : optionnel, capture tous les cas non prévus

Toujours prévoir un WHEN OTHERS pour éviter des comportements inattendus si la valeur de la variable n’est pas dans les cas définis.

Préférer CASE lorsque 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_month comme si on lisait un choix de menu : selon la valeur, une action spécifique est effectuée.

Résumé
#

  • CASE teste une variable pour exécuter différents traitements selon sa valeur.
  • WHEN définit les valeurs possibles et le traitement associé.
  • OR permet de regrouper plusieurs valeurs sous un même traitement.
  • WHEN OTHERS capture 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 INITIAL pour tester si une variable est vide ou contient sa valeur par défaut
  • Savoir utiliser IS NOT INITIAL pour vérifier qu’une variable contient une valeur
  • Appliquer IS INITIAL avec IF pour les conditions simples
  • Appliquer IS INITIAL avec CASE pour 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 INITIAL retourne vrai si la variable est vide ou contient la valeur par défaut pour son type.
  • IS NOT INITIAL retourne 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 INITIAL fonctionne 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 INITIAL teste si une variable est vide ou contient sa valeur par défaut.
  • IS NOT INITIAL teste 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 BETWEEN pour tester si une variable est dans une plage
  • Savoir appliquer BETWEEN low AND high avec IF
  • Savoir appliquer BETWEEN low AND high avec CASE
  • Simplifier les comparaisons numériques grâce à BETWEEN
  • Combiner BETWEEN avec d’autres tests comme IS INITIAL pour des conditions robustes

Définition
#

L’instruction BETWEEN permet de tester si une variable se situe dans une plage de valeurs.

  • BETWEEN low AND high retourne vrai si la variable est comprise entre low et high inclusivement.
  • Peut être utilisé avec IF ou CASE.

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, BETWEEN simplifie 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 BETWEEN est compatible avec WHEN dans un CASE, ce qui rend les blocs plus lisibles pour les plages numériques.

Résumé
#

  • BETWEEN low AND high teste si une variable est comprise entre deux valeurs inclusives.
  • Fonctionne avec IF et CASE.
  • 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 ... ENDIF pour des contrôles simples
  • Connaître la sensibilité à la casse de CO
  • Utiliser SY-FDPOS pour connaître la position du dernier caractère vérifié
  • Appliquer CO pour 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 dans oper1.
  • Si oper1 contient uniquement des caractères présents dans oper2, la condition est vraie.

L’opérateur CO vérifie chaque caractère de oper1 et renvoie TRUE uniquement si tous sont présents dans oper2. La position du dernier caractère vérifié est stockée dans SY-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_oper1 et lc_oper2 contiennent 'Hello'.
  • IF lc_oper1 CO lc_oper2. vérifie que tous les caractères de lc_oper1 sont dans lc_oper2.
  • Ici la condition est vraie, et SY-FDPOS = 5 indique la position du dernier caractère.
  • Si lc_oper2 valait 'Hell', la condition serait fausse.
  • CO est 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 ... ENDIF pour des contrôles simples
  • Utiliser SY-FDPOS pour obtenir la position du premier caractère trouvé
  • Appliquer CA pour 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 oper2 comme une “boîte de lettres à rechercher”. Si tu ouvres oper1 et que tu y trouves au moins une de ces lettres, la condition CA est 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ée
  • oper2 → la chaîne contenant les caractères recherchés
  • Condition vraie si au moins un caractère de oper2 est présent dans oper1

L’opérateur CA parcourt oper1 et retourne TRUE dès qu’il trouve un caractère présent dans oper2. La variable système SY-FDPOS indique 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 l et o sont présents dans lc_oper1
  • SY-FDPOS = 2 → position du premier caractère trouvé
  • CA est 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 si oper1 contient au moins un caractère de oper2.
  • Condition TRUE dès qu’un seul caractère correspond
  • SY-FDPOS retourne 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) de CA (caractère individuel)
  • Apprendre à utiliser IF ... CS ... ENDIF pour des contrôles simples
  • Identifier quand utiliser FIND pour 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 oper1 comme un livre et oper2 comme une phrase précise que tu veux retrouver. Si la phrase exacte est présente, la condition CS est 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 CS est 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 principale
  • oper2 → sous-chaîne recherchée
  • Condition vraie si oper2 est présente dans oper1

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 si oper1 contient la sous-chaîne exacte oper2.
  • 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) de CS (présence de sous-chaîne)
  • Apprendre à utiliser IF ... NS ... ENDIF pour 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 oper1 comme un livre et oper2 comme une phrase précise que tu cherches. Si cette phrase n’existe pas dans le texte, la condition NS est 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 principale
  • oper2 → sous-chaîne recherchée
  • Condition vraie si oper2 n’est pas présente dans oper1

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ée
  • NS (No String) → vrai si la sous-chaîne n’est pas trouvée

Résumé
#

  • NS = No String → vérifie que oper1 ne contient pas oper2
  • 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 IFCPENDIF pour 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 CP est 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 CP pour 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”)

CP fonctionne uniquement avec les types de VARIABLES C ou STRING.

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 IFNPENDIF pour 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 CP est comme un filtre qui sélectionne les fichiers correspondants (ex : “*.png” pour ne garder que les images), alors NP est son opposé — il exclut tout ce qui correspond à ce modèle. C’est comme dire : “je veux tout sauf les fichiers .png”.

Le NP est 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 C ou STRING.

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”.

Articles connexes

Les instructions en ABAP
··24 mins· loading · loading
SAP ERP Back-End
Introduction ABAP
·16 mins· loading · loading
SAP ERP Back-End
Structure d'un programme ABAP
··14 mins· loading · loading
SAP ERP Back-End
Variables & Déclarations en ABAP
··11 mins· loading · loading
SAP ERP Back-End
Boucles en ABAP
··11 mins· loading · loading
SAP ERP Back-End
Dracula Theme
·1 min· loading · loading
SAP ERP