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_count → 0 |
| P | 0.00 |
CLEAR lv_amount → 0.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 :
- Récupérer la date du jour (à mettre dans
lv_currentdate) - Créer une phrase qui a du sens (à mettre dans
lv_moi) - La phrase doit être en minuscule
- 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 :
- Calculer la somme de l’année, du mois et de la date dans
lv_money - Reconstituer :
'All I WANT for christmas is YOU and <lv_money>$ (by MARIAH CAREY).' - Respecter la forme exacte (majuscules sur WANT, YOU, MARIAH, CAREY)
- 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 stringpour longueur variable CONDENSEavantSPLITpour simplifier- Planifier l’algorithme sur papier avant de coder
- Utiliser des noms de variables explicites
À ÉVITER :
- Variables
TYPE ctrop courtes - Oublier
CLEARdans 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 LIKEpour 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 stringpour 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).