Aller au contenu
  1. Exemples/

Exemple d'un code ABAP pour la manipulation de chaînes de caractères

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

Documentation du Programme ABAP ZADA_PROG_UNIT_04
#

Vue d’ensemble
#

Ce programme est un guide complet sur la manipulation de chaînes de caractères en ABAP. Il couvre toutes les opérations essentielles pour traiter, transformer et manipuler du texte, avec des exercices pratiques complexes.

Structure du Programme
#

Fichier Rôle Contenu
ZADA_PROG_UNIT_04.txt Programme principal Orchestre l’appel de 10 routines
ZADA_PROG_UNIT_04_TOP.txt Déclarations globales Vide (non utilisé)
ZADA_PROG_UNIT_04_SCR.txt Écran de sélection Vide (non utilisé)
ZADA_PROG_UNIT_04_F01.txt Sous-programmes 10 FORM routines + 2 exercices complexes

Messages ABAP
#

Types de Messages
#

FORM message.
  " Message informatif
  MESSAGE 'Ceci est un MESSAGE informatif.' TYPE 'I'.
  
  " Message d'avertissement
  MESSAGE 'Attention : Opération risquée !' TYPE 'W'.
  
  " Message d'erreur
  MESSAGE 'Erreur : Opération impossible.' TYPE 'E'.
  
  " Message de succès
  MESSAGE 'Succès.' TYPE 'S'.
ENDFORM.

Tableau des Types de Messages
#

Type Code Description Icône Comportement
Information 'I' Message informatif ℹ️ Affiche une popup, attend validation
Warning 'W' Avertissement ⚠️ Message en bas d’écran, continue
Error 'E' Erreur Arrête le traitement
Success 'S' Succès Message en bas d’écran, continue
Abort 'A' Abandon 🛑 Termine le programme
Exit 'X' Sortie 🚪 Sort de la transaction

Option DISPLAY LIKE
#

" Affiche un message informatif avec l'apparence d'une erreur
MESSAGE 'Ceci est un MESSAGE informatif.' TYPE 'I' DISPLAY LIKE 'E'.

" Affiche une erreur avec l'apparence d'un message informatif
MESSAGE 'Erreur : Opération impossible.' TYPE 'E' DISPLAY LIKE 'I'.

Usage :

  • Changer l’apparence visuelle sans changer le comportement
  • TYPE : définit le comportement (arrêt, continuation)
  • DISPLAY LIKE : définit l’apparence (icône, couleur)

CONCATENATE - Concaténation
#

Principe
#

CONCATENATE assemble plusieurs chaînes de caractères en une seule.

Syntaxe de Base
#

FORM concatenate.
  CONSTANTS: lc_text1(20) TYPE c VALUE 'Hello',
             lc_text2(20) TYPE c VALUE 'World'.
  
  DATA lv_result(50) TYPE c.
  
  " Concaténation simple (sans séparateur)
  CONCATENATE lc_text1 lc_text2 INTO lv_result.
  " Résultat : 'Hello               World               '
ENDFORM.

Options de CONCATENATE
#

SEPARATED BY (avec séparateur)
#

CONSTANTS: lc_text1(20) TYPE c VALUE 'Hello',
           lc_text2(20) TYPE c VALUE 'World',
           lc_text3(20) TYPE c VALUE 'Bienvenue',
           lc_text4(20) TYPE c VALUE 'sur',
           lc_text5(20) TYPE c VALUE 'SAP'.

DATA lv_result(50) TYPE c.

" Avec séparateur '-'
CONCATENATE lc_text1 lc_text2 lc_text3 lc_text4 lc_text5
  INTO lv_result
  SEPARATED BY '-'.

" Résultat : 'Hello-World-Bienvenue-sur-SAP'

RESPECTING BLANKS (conservation des espaces)
#

DATA lv_result(100) TYPE c.

" Respecte les espaces à droite de chaque élément
CONCATENATE lc_text1 lc_text2 lc_text3 lc_text4 lc_text5
  INTO lv_result
  RESPECTING BLANKS.

" Résultat : 'Hello               World               Bienvenue           sur                 SAP                 '

Exemple Pratique : Construction d’un Identifiant
#

CONSTANTS:
  lc_air   TYPE string VALUE 'AIR',
  lc_model TYPE string VALUE 'A400M',
  lc_year  TYPE string VALUE '2025',
  lc_rank  TYPE string VALUE '18'.

DATA:
  lv_resul1     TYPE string,
  lv_resul2     TYPE string,
  lv_resulfinal TYPE string.

" Étape 1 : AIR-A400M
CONCATENATE lc_air lc_model INTO lv_resul1
  SEPARATED BY '-'.

" Étape 2 : 2025-18
CONCATENATE lc_year lc_rank INTO lv_resul2
  SEPARATED BY '-'.

" Étape 3 : AIR-A400M_2025-18
CONCATENATE lv_resul1 lv_resul2 INTO lv_resulfinal
  SEPARATED BY '_'.

" Résultat final : 'AIR-A400M_2025-18'

Comparaison des Options
#

Option Syntaxe Espaces Exemple Input Résultat
Sans option CONCATENATE A B INTO C Conserve espaces à droite 'Hello ', 'World ' 'Hello World '
SEPARATED BY CONCATENATE A B INTO C SEPARATED BY '-' Supprime espaces, ajoute séparateur 'Hello', 'World' 'Hello-World'
RESPECTING BLANKS CONCATENATE A B INTO C RESPECTING BLANKS Conserve tous les espaces 'Hello ', 'World ' 'Hello World '

CONDENSE - Suppression d’espaces
#

Principe
#

CONDENSE supprime les espaces superflus dans une chaîne de caractères.

CONDENSE Simple
#

FORM condense.
  CONSTANTS: lc_text1(20) TYPE c VALUE 'Hello    ',
             lc_text2(20) TYPE c VALUE '    World    '.
  
  DATA lv_result(50) TYPE c.
  
  CONCATENATE lc_text1 lc_text2 INTO lv_result.
  " Avant : 'Hello                   World               '
  
  CONDENSE lv_result.
  " Après : 'Hello World'
ENDFORM.

Effet :

  • Supprime les espaces au début
  • Supprime les espaces à la fin
  • Réduit les espaces multiples en un seul espace

CONDENSE NO-GAPS
#

DATA lv_result(50) TYPE c VALUE '  Hello    World    SAP  '.

CONDENSE lv_result NO-GAPS.

" Résultat : 'HelloWorldSAP'

Effet :

  • Supprime TOUS les espaces (début, fin, milieu)
  • Colle tous les mots ensemble

Exercice Pratique
#

DATA lv_ausecour(100) TYPE c 
  VALUE ' AUsEcOUr ! Je nAImE pAs    qUAnd     jE sUIs   Espacé  '.

" Étape 1 : CONDENSE simple
CONDENSE lv_ausecour.
" Résultat : 'AUsEcOUr ! Je nAImE pAs qUAnd jE sUIs Espacé'

" Étape 2 : CONDENSE NO-GAPS
CONDENSE lv_ausecour NO-GAPS.
" Résultat : 'AUsEcOUr!JenAImEpAsqUAndjEsUIsEspacé'

Tableau Comparatif
#

Commande Input Output
Aucune ' Hello World ' ' Hello World '
CONDENSE ' Hello World ' 'Hello World'
CONDENSE NO-GAPS ' Hello World ' 'HelloWorld'

SPLIT - Division de chaînes
#

Principe
#

SPLIT divise une chaîne de caractères en plusieurs parties selon un séparateur.

4.2 Syntaxe de Base
#

FORM split.
  DATA: lv_text1(20) TYPE c,
        lv_text2(20) TYPE c,
        lv_text3(20) TYPE c,
        lv_text4(20) TYPE c,
        lv_text5(20) TYPE c.

  CONSTANTS: lc_string(50) TYPE c VALUE 'Hello World Bienvenue sur SAP'.

  SPLIT lc_string
    AT space
    INTO lv_text1 lv_text2 lv_text3 lv_text4 lv_text5.
  
  " Résultat :
  " lv_text1 = 'Hello'
  " lv_text2 = 'World'
  " lv_text3 = 'Bienvenue'
  " lv_text4 = 'sur'
  " lv_text5 = 'SAP'
ENDFORM.

Séparateurs Courants
#

Séparateur Syntaxe Usage
Espace AT space Séparer les mots
Tiret AT '-' Codes composés (AIR-A400M)
Underscore AT '_' Identifiants (USER_NAME)
Point AT '.' Extensions de fichiers
Slash AT '/' Chemins, dates (JJ/MM/AAAA)
Virgule AT ',' Listes CSV

Exemple Pratique Multi-Séparateurs
#

" Objectif : SPLIT 'AIR-A400M_2025-18' pour obtenir AIR, A400M, 2025, 18

CONSTANTS: lc_airbus TYPE string VALUE 'AIR-A400M_2025-18'.

DATA:
  lv_split1 TYPE string,
  lv_split2 TYPE string,
  lv_split3 TYPE string,
  lv_split4 TYPE string.

" Étape 1 : Séparer au niveau de '-'
SPLIT lc_airbus
  AT '-'
  INTO lv_split1 lv_split2 lv_split3.

" Résultat intermédiaire :
" lv_split1 = 'AIR'
" lv_split2 = 'A400M_2025'
" lv_split3 = '18'

" Étape 2 : Séparer lv_split2 au niveau de '_'
SPLIT lv_split2
  AT '_'
  INTO lv_split2 lv_split4.

" Résultat final :
" lv_split1 = 'AIR'
" lv_split2 = 'A400M'
" lv_split3 = '18'
" lv_split4 = '2025'

SPLIT dans une Table Interne
#

DATA: lt_words TYPE TABLE OF string.

SPLIT lc_string AT space INTO TABLE lt_words.

" La table lt_words contient maintenant :
" lt_words[1] = 'Hello'
" lt_words[2] = 'World'
" lt_words[3] = 'Bienvenue'
" ...

TRANSLATE - Conversion de casse
#

Principe
#

TRANSLATE convertit une chaîne en majuscules ou minuscules.

Syntaxe
#

FORM translate.
  DATA lv_ausecour(100) TYPE c 
    VALUE ' AUsEcOUr ! Je nAImE pAs    qUAnd     jE sUIs   Espacé  '.

  " Conversion en MAJUSCULES
  TRANSLATE lv_ausecour TO UPPER CASE.
  " Résultat : ' AUSECOUR ! JE NAIME PAS    QUAND     JE SUIS   ESPACÉ  '

  " Conversion en minuscules
  TRANSLATE lv_ausecour TO LOWER CASE.
  " Résultat : ' ausecour ! je naime pas    quand     je suis   espacé  '
ENDFORM.

Options
#

Commande Effet Exemple Input Exemple Output
TRANSLATE var TO UPPER CASE Tout en MAJUSCULES 'Hello World' 'HELLO WORLD'
TRANSLATE var TO LOWER CASE Tout en minuscules 'Hello World' 'hello world'

Cas d’Usage
#

Normalisation : Uniformiser les données avant comparaison
Affichage : Mettre en forme pour l’utilisateur (ex: noms propres)
Validation : Comparer sans tenir compte de la casse

Exemple :

DATA: lv_input  TYPE string VALUE 'AbAp',
      lv_target TYPE string VALUE 'ABAP'.

TRANSLATE lv_input TO UPPER CASE.

IF lv_input = lv_target.
  WRITE: 'Correspondance trouvée !'.
ENDIF.

CLEAR - Réinitialisation
#

Principe
#

CLEAR réinitialise une variable à sa valeur par défaut (vide pour string, 0 pour integer, etc.).

Syntaxe
#

FORM clear.
  DATA:
    lv_clear1 TYPE string VALUE 'dqzkjdbkqzjdbkqjzzhbdjqzhbd',
    lv_clear2 TYPE string VALUE 'dqzkjdbkqzjdbkqjzzhbdjqzhbd',
    lv_clear3 TYPE string VALUE 'dqzkjdbkqzjdbkqjzzhbdjqzhbd'.

  " CLEAR simple
  CLEAR lv_clear1.
  " lv_clear1 = '' (vide)

  " CLEAR multiple
  CLEAR:
    lv_clear2,
    lv_clear3.
  " lv_clear2 = '' et lv_clear3 = '' (vides)
ENDFORM.

Valeurs par Défaut selon le Type
#

Type Valeur après CLEAR Exemple
STRING / C '' (chaîne vide) CLEAR lv_text''
I / N 0 CLEAR lv_count0
P 0.00 CLEAR lv_amount0.00
D '00000000' CLEAR lv_date'00000000'
T '000000' CLEAR lv_time'000000'
XFELD '' (vide) CLEAR lv_flag''
Structure Tous les champs réinitialisés CLEAR ls_data
Table interne Vide (toutes les lignes supprimées) CLEAR lt_table

Importance du CLEAR
#

" ⚠️ Problème sans CLEAR
DATA lv_total TYPE i.

LOOP AT lt_invoices INTO ls_invoice.
  lv_total = lv_total + ls_invoice-amount.  " Accumulation continue
ENDLOOP.

" Si on réexécute, lv_total contient l'ancienne valeur !

"  Solution avec CLEAR
DATA lv_total TYPE i.

CLEAR lv_total.  " Réinitialisation avant utilisation

LOOP AT lt_invoices INTO ls_invoice.
  lv_total = lv_total + ls_invoice-amount.
ENDLOOP.

Conseil :

Dans un programme, plus vous allez le construire, plus il y aura de variables, structures, tables, etc. Il sera nécessaire de réfléchir sur le positionnement (algorithmie) du programme pour s’assurer que nos variables soient correctes et n’emportent pas avec elles des données d’un précédent traitement.


OFFSET - Extraction de sous-chaînes
#

Principe
#

L’offset permet d’extraire une portion d’une chaîne de caractères en spécifiant :

  • La position de départ
  • La longueur à extraire

Syntaxe
#

variable(longueur)       " Depuis le début
variable+position(longueur)  " Depuis une position

Exemple : Extraction de Date
#

FORM offset.
  DATA lv_date TYPE d.  " Format AAAAMMJJ
  
  DATA: lv_year(4)  TYPE n,
        lv_month(2) TYPE n,
        lv_day(2)   TYPE n.
  
  lv_date = sy-datum.  " Exemple : 20251105
  
  " Extraction
  lv_year  = lv_date(4).      " Prend 4 caractères depuis le début
                               " Résultat : 2025
  
  lv_month = lv_date+4(2).    " Commence à position 4, prend 2 caractères
                               " Résultat : 11
  
  lv_day   = lv_date+6(2).    " Commence à position 6, prend 2 caractères
                               " Résultat : 05
ENDFORM.

Visualisation des Positions
#

Date : 2 0 2 5 1 1 0 5
Pos  : 0 1 2 3 4 5 6 7

lv_year  = lv_date(4)      → Position 0-3 → '2025'
lv_month = lv_date+4(2)    → Position 4-5 → '11'
lv_day   = lv_date+6(2)    → Position 6-7 → '05'

Exercice Pratique
#

CONSTANTS: lc_my_birthdate TYPE d VALUE '19861102'.

DATA: lv_exo_year(4)  TYPE n,
      lv_exo_month(2) TYPE n,
      lv_exo_day(2)   TYPE n.

lv_exo_year  = lc_my_birthdate(4).     " 1986
lv_exo_month = lc_my_birthdate+4(2).   " 11
lv_exo_day   = lc_my_birthdate+6(2).   " 02

Cas d’Usage de l’Offset
#

Cas Format Extraction
Date AAAAMMJJ Année (4), Mois +4(2), Jour +6(2)
Heure HHMMSS Heure (2), Minute +2(2), Seconde +4(2)
Code postal 31000 Département (2), Commune +2(3)
Référence ABC-2025-001 Préfixe, Année, Numéro

Offset avec Chaînes Dynamiques
#

DATA: lv_text    TYPE string VALUE 'ABCDEFGHIJ',
      lv_extract TYPE string.

lv_extract = lv_text+2(5).  " Résultat : 'CDEFG'

Exercices Avancés
#

Exercice 1 : Extraction et Transformation Complexe
#

Énoncé
#

DATA lv_initial_string(100) TYPE c 
  VALUE '05*   11_   JE_abap_   SUIS_king_UN_of   2025*'.

Objectifs :

  1. Récupérer la date du jour (à mettre dans lv_currentdate)
  2. Créer une phrase qui a du sens (à mettre dans lv_moi)
  3. La phrase doit être en minuscule
  4. Afficher les deux résultats dans un message informatif

Solution Détaillée
#

FORM Exercice_1.
  DATA lv_initial_string(100) TYPE c 
    VALUE '05*   11_   JE_abap_   SUIS_king_UN_of   2025*'.

  " ÉTAPE 1 : TRANSLATE en minuscules
  TRANSLATE lv_initial_string TO LOWER CASE.
  " Résultat : '05*   11_   je_abap_   suis_king_un_of   2025*'

  " ÉTAPE 2 : CONDENSE pour réduire les espaces
  CONDENSE lv_initial_string.
  " Résultat : '05* 11_ je_abap_ suis_king_un_of 2025*'

  " ÉTAPE 3 : SPLIT au niveau des espaces
  DATA:
    lv_split1 TYPE string,  " 05*
    lv_split2 TYPE string,  " 11_
    lv_split3 TYPE string,  " je_abap_
    lv_split4 TYPE string,  " suis_king_un_of
    lv_split5 TYPE string.  " 2025*

  SPLIT lv_initial_string
    AT space
    INTO lv_split1 lv_split2 lv_split3 lv_split4 lv_split5.

  " ÉTAPE 4A : Extraction de la DATE
  DATA:
    lv_day(2)   TYPE n,
    lv_month(2) TYPE n,
    lv_year(4)  TYPE n,
    lv_date(8)  TYPE n.

  lv_day   = lv_split1.  " 05* → 05 (conversion automatique)
  lv_month = lv_split2.  " 11_ → 11
  lv_year  = lv_split5.  " 2025* → 2025

  CONCATENATE lv_day lv_month lv_year
    INTO lv_date.
  " Résultat : '05112025'

  " ÉTAPE 4B : Extraction de la PHRASE
  DATA:
    lv_je(2)    TYPE c,
    lv_suis(4)  TYPE c,
    lv_un(2)    TYPE c,
    lv_king(4)  TYPE c,
    lv_of(2)    TYPE c,
    lv_abap(4)  TYPE c,
    lv_sentence TYPE string.

  " Découper 'je_abap_'
  SPLIT lv_split3
    AT '_'
    INTO lv_je lv_abap.

  " Découper 'suis_king_un_of'
  SPLIT lv_split4
    AT '_'
    INTO lv_suis lv_king lv_un lv_of.

  " Reconstruire la phrase : 'je suis un king of abap'
  CONCATENATE lv_je lv_suis lv_un lv_king lv_of lv_abap
    INTO lv_sentence
    SEPARATED BY space.

  " ÉTAPE 5 : MESSAGE final
  DATA lv_message TYPE string.

  CONCATENATE lv_date lv_sentence
    INTO lv_message
    SEPARATED BY space.

  MESSAGE lv_message TYPE 'I'.
  " Résultat : '05112025 je suis un king of abap'
ENDFORM.

Algorithme
#

1. TRANSLATE → minuscules
2. CONDENSE → réduction espaces
3. SPLIT (espace) → 5 parties
4. Traitement parallèle :
   4A. DATE : extraire jour/mois/année + CONCATENATE
   4B. PHRASE : SPLIT multi-niveaux + CONCATENATE
5. MESSAGE final

Exercice 2 : All I Want for Christmas
#

Énoncé
#

DATA lv_initial_string TYPE string 
  VALUE ' * 2025 24_12 *All-want christmas & for-I * you-is * carey mariah/by * and * $'.

Objectifs :

  1. Calculer la somme de l’année, du mois et de la date dans lv_money
  2. Reconstituer : 'All I WANT for christmas is YOU and <lv_money>$ (by MARIAH CAREY).'
  3. Respecter la forme exacte (majuscules sur WANT, YOU, MARIAH, CAREY)
  4. Afficher en Warning

Solution Détaillée
#

FORM Exercice_2.
  DATA lv_initial_string TYPE string 
    VALUE ' * 2025 24_12 *All-want christmas & for-I * you-is * carey mariah/by * and * $'.

  " Variables pour date et phrase
  DATA: lv_date     TYPE string,
        lv_sentence TYPE string.

  " ÉTAPE 1 : SPLIT sur '*' pour séparer date et phrase
  SPLIT lv_initial_string+2  " Ignore ' *' au début
    AT '*'
    INTO lv_date lv_sentence.
  
  " lv_date = ' 2025 24_12 '
  " lv_sentence = 'All-want christmas & for-I * you-is * carey mariah/by * and * $'

  " ÉTAPE 2 : Extraction de la date et calcul
  DATA:
    lv_string_day   TYPE string,
    lv_string_month TYPE string,
    lv_string_year  TYPE string,
    lv_day          TYPE i,
    lv_month        TYPE i,
    lv_year         TYPE i,
    lv_result       TYPE i.

  " Extraction par OFFSET
  lv_string_year  = lv_date+1(4).   " '2025'
  lv_string_month = lv_date+6(2).   " '24'
  lv_string_day   = lv_date+9(2).   " '12'

  " Conversion en entiers
  lv_year  = lv_string_year.   " 2025
  lv_month = lv_string_month.  " 24
  lv_day   = lv_string_day.    " 12

  " Calcul de la somme
  lv_result = lv_day + lv_month + lv_year.  " 2061

  " ÉTAPE 3 : Découpage de la phrase
  " lv_sentence = 'All-want christmas & for-I * you-is * carey mariah/by * and * $'

  DATA:
    lv_split1  TYPE string,   " All-want
    lv_split2  TYPE string,   " christmas
    lv_split3  TYPE string,   " &
    lv_split4  TYPE string,   " for-I
    lv_split5  TYPE string,   " *
    lv_split6  TYPE string,   " you-is
    lv_split7  TYPE string,   " *
    lv_split8  TYPE string,   " carey
    lv_split9  TYPE string,   " mariah/by
    lv_split10 TYPE string,   " *
    lv_split11 TYPE string,   " and
    lv_split12 TYPE string,   " *
    lv_split13 TYPE string.   " $

  SPLIT lv_sentence
    AT space
    INTO lv_split1 lv_split2 lv_split3 lv_split4 lv_split5 
         lv_split6 lv_split7 lv_split8 lv_split9 lv_split10 
         lv_split11 lv_split12 lv_split13.

  " ÉTAPE 4 : Extraction des mots depuis les splits
  DATA:
    lv_all       TYPE string,
    lv_i         TYPE string,
    lv_want      TYPE string,
    lv_for       TYPE string,
    lv_christmas TYPE string,
    lv_is        TYPE string,
    lv_you       TYPE string,
    lv_and       TYPE string,
    lv_sum       TYPE string,
    lv_dollar    TYPE string,
    lv_by        TYPE string,
    lv_mariah    TYPE string,
    lv_carey     TYPE string,
    lv_message   TYPE string.

  " Extraction avec SPLIT sur séparateurs multiples
  SPLIT lv_split1 AT '-' INTO lv_all lv_want.      " All-want → All, want
  SPLIT lv_split4 AT '-' INTO lv_for lv_i.         " for-I → for, I
  SPLIT lv_split6 AT '-' INTO lv_you lv_is.        " you-is → you, is
  SPLIT lv_split9 AT '/' INTO lv_mariah lv_by.     " mariah/by → mariah, by

  " Affectation directe
  lv_carey     = lv_split8.   " carey
  lv_christmas = lv_split2.   " christmas
  lv_and       = lv_split11.  " and
  lv_dollar    = lv_split13.  " $
  lv_sum       = lv_result.   " 2061

  " ÉTAPE 5 : Mise en forme
  " Majuscules sur WANT, YOU, MARIAH, CAREY
  TRANSLATE lv_want TO UPPER CASE.      " WANT
  TRANSLATE lv_you TO UPPER CASE.       " YOU
  TRANSLATE lv_mariah TO UPPER CASE.    " MARIAH
  TRANSLATE lv_carey TO UPPER CASE.     " CAREY

  " Ajout des parenthèses autour de 'by MARIAH CAREY'
  CONSTANTS:
    lc_open  TYPE string VALUE '(',
    lc_close TYPE string VALUE ').'.

  CONCATENATE lc_open lv_by INTO lv_by RESPECTING BLANKS.     " '(by'
  CONCATENATE lv_carey lc_close INTO lv_carey RESPECTING BLANKS.  " 'CAREY).'

  " Construction de '2061
  CONCATENATE lv_sum lv_dollar INTO lv_dollar RESPECTING BLANKS.
  CONDENSE lv_dollar NO-GAPS.  " '2061

  " ÉTAPE 6 : Construction du message final
  CONCATENATE
    lv_all        " All
    lv_i          " I
    lv_want       " WANT
    lv_for        " for
    lv_christmas  " christmas
    lv_is         " is
    lv_you        " YOU
    lv_and        " and
    lv_dollar     " 2061$
    lv_by         " (by
    lv_mariah     " MARIAH
    lv_carey      " CAREY).
    INTO lv_message
    SEPARATED BY space.

  " Résultat : 'All I WANT for christmas is YOU and 2061$ (by MARIAH CAREY).'

  MESSAGE lv_message TYPE 'W'.
ENDFORM.

Algorithme Détaillé
#

1. SPLIT sur '*' : séparer date et phrase
2. DATE :
   a. Extraction par OFFSET (année, mois, jour)
   b. Conversion en entiers
   c. Somme : 2025 + 24 + 12 = 2061
3. PHRASE :
   a. SPLIT sur espaces (13 parties)
   b. SPLIT multi-séparateurs (-, /)
   c. Affectation directe des mots simples
4. MISE EN FORME :
   a. TRANSLATE (majuscules sélectives)
   b. Ajout parenthèses
   c. CONCATENATE + CONDENSE pour dollar
5. CONCATENATE final avec espaces
6. MESSAGE Warning

Tableau Récapitulatif
#

Commandes de Manipulation
#

Commande Action Syntaxe Exemple
CONCATENATE Assemble plusieurs chaînes CONCATENATE A B INTO C [SEPARATED BY sep] 'Hello' + 'World' → 'HelloWorld'
CONDENSE Supprime espaces superflus CONDENSE variable [NO-GAPS] ' A B ' → 'A B'
SPLIT Divise une chaîne SPLIT str AT sep INTO v1 v2 ... 'A-B-C' → 'A', 'B', 'C'
TRANSLATE Change la casse TRANSLATE var TO UPPER/LOWER CASE 'Hello' → 'HELLO'
CLEAR Réinitialise CLEAR variable 'Text' → ''
OFFSET Extrait portion var(len) ou var+pos(len) 'ABCD'(2) → 'AB'

Options Avancées
#

Commande Option Effet
CONCATENATE SEPARATED BY Ajoute un séparateur
CONCATENATE RESPECTING BLANKS Conserve tous les espaces
CONDENSE NO-GAPS Supprime TOUS les espaces
SPLIT INTO TABLE Stocke dans table interne
MESSAGE DISPLAY LIKE Change l’apparence

Algorithmes et Bonnes Pratiques
#

Méthodologie de Résolution
#

Lorsque vous travaillez sur un exercice de manipulation de chaînes :

Étape 1 : ANALYSE

  • Identifier la chaîne d’entrée
  • Identifier le résultat attendu
  • Lister les transformations nécessaires

Étape 2 : DÉCOMPOSITION

  • Diviser le problème en sous-problèmes
  • Identifier les séparateurs
  • Planifier les étapes intermédiaires

Étape 3 : IMPLÉMENTATION

  • Commencer par les transformations globales (TRANSLATE, CONDENSE)
  • Puis découper (SPLIT)
  • Puis reconstruire (CONCATENATE)

Étape 4 : VÉRIFICATION

  • Tester avec des valeurs d’exemple
  • Utiliser le débogueur pour visualiser les variables intermédiaires

Ordre des Opérations
#

Pour un traitement optimal, suivre cet ordre :

1. TRANSLATE      (normalisation de la casse)
2. CONDENSE       (nettoyage des espaces)
3. SPLIT          (découpage)
4. TRAITEMENT     (extraction, calculs)
5. CONCATENATE    (reconstruction)
6. MESSAGE/WRITE  (affichage)

Erreurs Courantes
#

Erreur Problème Solution
Espaces résiduels Espaces non supprimés Utiliser CONDENSE avant SPLIT
Variables trop courtes Troncature de données Vérifier la taille des variables
Séparateurs multiples Complexité du SPLIT Faire plusieurs SPLIT successifs
Casse incorrecte Majuscules/minuscules Utiliser TRANSLATE au bon moment
Variables non réinitialisées Données résiduelles Utiliser CLEAR avant réutilisation

Conseils de Performance
#

À FAIRE :

  • Utiliser TYPE string pour longueur variable
  • CONDENSE avant SPLIT pour simplifier
  • Planifier l’algorithme sur papier avant de coder
  • Utiliser des noms de variables explicites

À ÉVITER :

  • Variables TYPE c trop courtes
  • Oublier CLEAR dans les boucles
  • SPLIT complexes sans décomposition
  • Trop de variables intermédiaires

Débogage
#

Pour déboguer efficacement :

" Afficher les variables intermédiaires
WRITE: / 'Après TRANSLATE:', lv_variable.
WRITE: / 'Après CONDENSE:', lv_variable.
WRITE: / 'lv_split1:', lv_split1.
WRITE: / 'lv_split2:', lv_split2.

" Ou utiliser le débogueur (/h)
BREAK-POINT.

Programme Principal
#

REPORT ZADA_PROG_UNIT_04.

INCLUDE ZADA_PROG_UNIT_04_TOP.  " Vide
INCLUDE ZADA_PROG_UNIT_04_SCR.  " Vide
INCLUDE ZADA_PROG_UNIT_04_F01.  " 10 FORM routines + 2 exercices

START-OF-SELECTION.
  PERFORM message.        " Messages ABAP
  PERFORM calcul.         " Calculs simples
  PERFORM concatenate.    " Concaténation
  PERFORM condense.       " Suppression espaces
  PERFORM split.          " Division chaînes
  PERFORM translate.      " Conversion casse
  PERFORM clear.          " Réinitialisation
  PERFORM offset.         " Extraction sous-chaînes
  PERFORM Exercice_1.     " Exercice complexe 1
  PERFORM Exercice_2.     " Exercice complexe 2

Résumé des Concepts Clés
#

Messages
#

  • 6 types : I, W, E, S, A, X
  • DISPLAY LIKE pour changer l’apparence
  • Usage selon le contexte (information, erreur, succès)

Manipulation de Chaînes
#

  • CONCATENATE : assembler
  • CONDENSE : nettoyer
  • SPLIT : découper
  • TRANSLATE : changer casse
  • CLEAR : réinitialiser
  • OFFSET : extraire

Algorithmes
#

  • Analyse → Décomposition → Implémentation → Vérification
  • Ordre optimal : TRANSLATE → CONDENSE → SPLIT → TRAITEMENT → CONCATENATE
  • Déboguer avec WRITE ou BREAK-POINT

Bonnes Pratiques
#

  • Variables explicites
  • TYPE string pour flexibilité
  • CLEAR avant réutilisation
  • Planification algorithmique
  • Tests avec exemples

Conclusion
#

Ce programme constitue une référence complète sur la manipulation de chaînes en ABAP :

  • Toutes les commandes essentielles
  • Options avancées
  • Exercices complexes réels
  • Méthodologie de résolution
  • Bonnes pratiques et pièges à éviter

Il sert de guide pratique pour tout développeur ABAP devant traiter, transformer ou analyser des données textuelles, avec des exemples concrets inspirés de situations réelles (identifiants, dates, phrases, messages).


Ressources
#

Télécharger les fichiers

Articles connexes

Exemple d'un code ABAP pour les structures conditionnelles
·13 mins· loading · loading
SAP ERP Back-End
Exemple d'un code ABAP avec variables, constantes et types de données
·11 mins· loading · loading
SAP ERP Back-End
Les instructions en ABAP
··24 mins· loading · loading
SAP ERP Back-End
Démonstration de la structure modulaire d'un programme ABAP
·5 mins· loading · loading
SAP ERP Back-End
Documentation du premier programme ABAP avec erreur
·3 mins· loading · loading
SAP ERP Back-End
Les instructions DBTAB en ABAP
·29 mins· loading · loading
SAP ERP Back-End