*&---------------------------------------------------------------------*
*& Include          ZADA_PROG_UNIT_04_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form MESSAGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM message .

*  MESSAGE 'Ceci est un MESSAGE informatif.' TYPE 'I' DISPLAY LIKE 'E'.
*
*  MESSAGE 'Attention : Opération risquée !' TYPE 'W'.
*
*  MESSAGE 'Erreur : Opération impossible.' TYPE 'E' DISPLAY LIKE 'I'.
*
*  MESSAGE 'Succès.' TYPE 'S'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form CALCUL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM calcul .

  DATA: lv_var1   TYPE i,
        lv_var2   TYPE i,
        lv_result TYPE i.

  lv_var1 = 100.
  lv_var2 = 200.

  lv_result = ( lv_var1 * lv_var2 ) * lv_var2.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form CONCATENATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM concatenate .

*  WRITE:/ '     - CONCATENATE...'.
*
*  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_resul1(50)  TYPE c,
*        lv_resul2(50)  TYPE c,
*        lv_resul3(100) TYPE c.
*
*  " CONCATENATE simple
*  CONCATENATE lc_text1 lc_text2 lc_text3 lc_text4 lc_text5
*    INTO lv_resul1.
*
*  " CONCATENATE avec séparateur
*  CONCATENATE lc_text1 lc_text2 lc_text3 lc_text4 lc_text5
*    INTO lv_resul2
*    SEPARATED BY '-'.
*
*  " CONCATENATE en respectant les espaces
*  CONCATENATE lc_text1 lc_text2 lc_text3 lc_text4 lc_text5
*    INTO lv_resul3
*    RESPECTING BLANKS.
*
*  WRITE:/ 'Sans option :     ', lv_resul1,
*        / 'SEPARATED BY:     ', lv_resul2,
*        / 'RESPECTING BLANKS:', lv_resul3.


  "Alexis
  "Michel
  "Adrien
  "Alain
  "Julie
  "Alexandre


  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.

  "AIR-A400M_2025-18

  "Concatenate avec le tiret comme séparateur
  CONCATENATE lc_air lc_model INTO lv_resul1
    SEPARATED BY '-'.
  " Resultat : AIR-A400M

  CONCATENATE lc_year lc_rank INTO lv_resul2
    SEPARATED BY '-'.
  " Resultat : AIR-A400M_2025-18

  "Concatenate avec le underscore comme séparateur
  CONCATENATE lv_resul1 lv_resul2 INTO lv_resulfinal
    SEPARATED BY '_'.

*  WRITE:/ lv_resulfinal.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form condense
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM condense .

*  WRITE:/ '     - CONDENSE...'.
*
*  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.
*
*  " CONCATENATION initiale
*  CONCATENATE lc_text1 lc_text2 lc_text3 lc_text4 lc_text5
*    INTO lv_result.
*
*  WRITE:/ 'Sans CONDENSE :         ', lv_result.
*
*  " CONDENSE pour supprimer les espaces superflus
*  CONDENSE lv_result.
*  WRITE:/ 'Avec CONDENSE :         ', lv_result.
*
*  " CONDENSE NO-GAPS pour supprimer tous les espaces
*  CONDENSE lv_result NO-GAPS.
*  WRITE:/ 'Avec CONDENSE NO GAPS : ', lv_result.


* EXERCICE

  "Mathieu
  "Donovan
  "Adrien
  "Anthony
  "Julie
  "Alain
  "Aurélien
  "Jean-cédric
  "Lucas
  "Michel
  "Alexis
  "Paul
  "Alexandre

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

  CONDENSE lv_ausecour.
  CONDENSE lv_ausecour NO-GAPS.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form split
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM split .

*  WRITE:/ '     - 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.


* EXERCICE
*
*   SPLIT AIR-A400M_2025-18 au niveau des tirets et de l'underscore

  "Michel
  "Alexandre
  "Lucas
  "Julie
  "Alain
  "Adrien
  "Aurélien
  "Cédric
  "Anthony
  "Paul
  "Alexis


*  SPLIT lc_string
*    AT space
*    INTO lv_text1 lv_text2 lv_text3 lv_text4 lv_text5.

*   SEPARE MOI variable/constante
*      AU NIVEAU DE CE SEPARATEUR space
*      ET TU METS CA DANS lv_text1 lv_text2...

  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,
    lv_split5 TYPE string.

  "1er séparateur '-'
  SPLIT lc_airbus
    AT '-'
    INTO lv_split1 lv_split2 lv_split3.

  "2e séparateur '_' ('A400M_2025'
  SPLIT lv_split2
    AT '_'
    INTO lv_split2 lv_split5.



ENDFORM.
*&---------------------------------------------------------------------*
*& Form translate
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM translate .

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

  TRANSLATE lv_ausecour TO UPPER CASE.

  TRANSLATE lv_ausecour TO LOWER CASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form clear
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM clear .

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

  CLEAR lv_clear1.

  CLEAR:
    lv_clear2,
    lv_clear3.


  " 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 corrects et
  " n'emportent pas avec elles des données d'un précédent traitement.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form offset
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM offset .

*  DATA: lv_date TYPE d. "AAAAMMJJ
*
*  DATA: lv_year TYPE i,
*        lv_month(2) TYPE n,
*        lv_day(2) TYPE n.
*
*  lv_date = sy-datum. "20251105
*
*  lv_year  = lv_date(4).  "Résultat : 2025
*  lv_month = lv_date+4(2)."Résultat : 11
*  lv_day   = lv_date+6(2)."Résultat : 05

  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).
  lv_exo_month = lc_my_birthdate+4(2).
  lv_exo_day   = lc_my_birthdate+6(2).

  "Adrien
  "Michel
  "Alexandre
  "Lucas
  "Alain
  "Anthony
  "Alexis
  "Aurélien
  "Julie


ENDFORM.
*&---------------------------------------------------------------------*
*& Form Exercice_1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM Exercice_1 .

*&---------------------------------------------------------------------*
*& CONSIGNES
*&---------------------------------------------------------------------*

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

*&---------------------------------------------------------------------*
*& EXERCICE
*&---------------------------------------------------------------------*

* A partir de la string lv_initial_string
* Etablissez un algorithme et appliquez le sous-forme de code
* pour
*
* 1. Récupérer :
*   - la date du jour (à mettre dans la variable lv_currentdate)
*   - Créer une phrase qui a du sens (à mettre dans lv_moi)
*   - La phrase doit être en minuscule
*
* 2. Afficher les deux résultats dans un message informatif.

*&---------------------------------------------------------------------*
*& CORRECTION
*&---------------------------------------------------------------------*

*  1. TRANSLATE ********************************************************

  TRANSLATE lv_initial_string TO LOWER CASE.
  " RESULTAT :
  "   '05*   11_   JE_abap_   SUIS_king_UN_of   2025*'
  "   sera TRANSLATE en
  "   '05*   11_   je_abap_   suis_king_un_of   2025*'

*  2. CONDENSE

  CONDENSE lv_initial_string.
  " RESULTAT :
  "   '05*   11_   je_abap_   suis_king_un_of   2025*'
  "   sera CONDENSE en
  "   '05* 11_ je_abap_ suis_king_un_of 2025*'

*  3. SPLIT

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

  SPLIT lv_initial_string
    AT space
    INTO lv_split1
         lv_split2
         lv_split3
         lv_split4
         lv_split5.

  " RESULTAT :
  "   lv_split1 = 05*
  "   lv_split2 = 11_
  "   lv_split3 = je_abap_
  "   lv_split4 = suis_king_un_of
  "   lv_split5 = 2025*

*  4. PROCESS DATE & SENTENCE

*  4.A 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*
  lv_month = lv_split2. " 11_
  lv_year  = lv_split5. " 2025*

  CONCATENATE lv_day lv_month lv_year
    INTO lv_date.

*  4.B 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.

  " RESULTAT :
  "   lv_split1 = 05*
  "   lv_split2 = 11_
  "   lv_split3 = je_abap_
  "   lv_split4 = suis_king_un_of
  "   lv_split5 = 2025*

  SPLIT lv_split3
    AT '_'
    INTO lv_je
         lv_abap.

  SPLIT lv_split4
    AT '_'
    INTO lv_suis
         lv_king
         lv_un
         lv_of.

  CONCATENATE lv_je
              lv_suis
              lv_un
              lv_king
              lv_of
              lv_abap
    INTO lv_sentence
    SEPARATED BY space.

*  5. MESSAGE

  DATA:
    lv_message TYPE string.

  CONCATENATE lv_date lv_sentence
    INTO lv_message
    SEPARATED BY space.

*  MESSAGE lv_message TYPE 'I'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form Exercice_2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM Exercice_2 .

*&---------------------------------------------------------------------*
*& CONSIGNES
*&---------------------------------------------------------------------*

*  A partir de la variable :

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

*  1. Le client souhaite calculer la somme de l'année, du mois et de la date
*     dans la variable lv_money
*
*  2. Il faut reconstituer la phrase exacte
*     'All I WANT for christmas is YOU and <lv_money>$ (by MARIAH CAREY).'
*     en respectant la forme exacte voulu par le client.
*     Il faudra mettre la valeur de lv_money à la place de <lv_money>.

*  3. Afficher le message finale en Warning

*&---------------------------------------------------------------------*
*& CORRECTIONS
*&---------------------------------------------------------------------*

  DATA:
    lv_date     TYPE string,
    lv_sentence TYPE string.

  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.

  SPLIT lv_initial_string+2
    AT '*'
    INTO lv_date
         lv_sentence.

  lv_string_day   = lv_date+9(2).
  lv_string_month = lv_date+6(2).
  lv_string_year  = lv_date+1(4).

  lv_day = lv_string_day.
  lv_month = lv_string_month.
  lv_year = lv_string_year.

  lv_result = lv_day + lv_month + lv_year.

***********************
*  lv_sentence :
*  All-want christmas & for-I * you-is * carey mariah/by * and * $

  CONSTANTS:
    lc_open  TYPE string VALUE '(',
    lc_close TYPE string VALUE ').'.

  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    " All-want
         lv_split2    " christmas
         lv_split3    " &
         lv_split4    " for-I
         lv_split5    " *
         lv_split6    " you-is
         lv_split7    " *
         lv_split8    " carey
         lv_split9    " mariah/by
         lv_split10   " *
         lv_split11   " and
         lv_split12   " *
         lv_split13.  " $

  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.

  SPLIT lv_split1
    AT '-'
    INTO lv_all lv_want.

  SPLIT lv_split4
    AT '-'
    INTO lv_for lv_i.

  SPLIT lv_split6
    AT '-'
    INTO lv_you lv_is.

  SPLIT lv_split9
    AT '/'
    INTO lv_mariah lv_by.

  lv_carey     = lv_split8.
  lv_christmas = lv_split2.
  lv_and       = lv_split11.
  lv_dollar    = lv_split13.
  lv_sum       = lv_result.

  TRANSLATE lv_want TO UPPER CASE.
  TRANSLATE lv_you TO UPPER CASE.
  TRANSLATE lv_mariah TO UPPER CASE.
  TRANSLATE lv_carey TO UPPER CASE.

  CONCATENATE lc_open lv_by INTO lv_by RESPECTING BLANKS.
  CONCATENATE lv_carey lc_close INTO lv_carey RESPECTING BLANKS.
  CONCATENATE lv_sum lv_dollar INTO lv_dollar RESPECTING BLANKS.

  CONDENSE lv_dollar NO-GAPS.

  CONCATENATE
    lv_all
    lv_i
    lv_want
    lv_for
    lv_christmas
    lv_is
    lv_you
    lv_and
    lv_dollar
    lv_by
    lv_mariah
    lv_carey
    INTO lv_message
    SEPARATED BY space.

  MESSAGE lv_message TYPE 'W'.

ENDFORM.