Fonction ABAP STRLEN expliquee : Determiner la longueur des chaines

Catégorie
ABAP-Functions
Publié
Auteur
Johannes

La fonction STRLEN sert a determiner la longueur d’une variable de type caractere a l’execution. Elle retourne le nombre de caracteres “pertinents” sous forme d’entier (Type I). Ce qui est considere comme “pertinent” depend du type de donnees de la variable passee.

Syntaxe

Comme STRLEN est une fonction, elle est appelee dans une expression ABAP, par exemple du cote droit d’une affectation ou dans une condition :

DATA(longueur) = strlen( <variable> ). " Affectation a une variable 'longueur' (Type I)
" Ou dans une condition :
IF strlen( <variable> ) > 10.
" ... Code ...
ENDIF.
" Ou comme parametre pour une autre fonction/methode :
some_method( text = ... length = strlen( <variable> ) ).
  • strlen( ... ) : L’appel de fonction (la casse est indifferente, STRLEN fonctionne aussi).
  • <variable> : L’argument - la variable de type caractere dont la longueur doit etre determinee (Type STRING, C, N, D, T). Les types byte (X, XSTRING) ne sont pas autorises.

Fonctionnement et comportement (Selon le type de donnees)

Le resultat de STRLEN varie selon le type de donnees de l’argument <variable> :

1. Argument de type STRING

  • STRLEN retourne le nombre actuel de caracteres dans la chaine.
  • Une chaine vide ('') donne une longueur de 0.
  • Les espaces en fin de chaine qui font explicitement partie de la valeur de la chaine sont comptes.

2. Argument de type C, N, D, T (Chaines de longueur fixe)

  • STRLEN retourne le nombre de caracteres, les espaces en fin de chaine n’etant pas comptes.
  • La fonction mesure effectivement la longueur jusqu’au dernier caractere qui n’est pas un espace.
  • Si le champ ne contient que des espaces, le resultat est 0.
  • Important : STRLEN ne retourne pas la longueur fixe definie dans l’instruction DATA !

Distinction avec DESCRIBE FIELD ... LENGTH

L’ancienne instruction DESCRIBE FIELD <champ> LENGTH <longueur> IN CHARACTER MODE. determine pour le type C la longueur definie fixe, pour le type STRING la longueur actuellement occupee. STRLEN retourne pour le type C la longueur sans les espaces en fin de chaine.

Exemples

1. Avec le type STRING

DATA lv_string TYPE string.
DATA lv_length TYPE i.
lv_string = ''.
lv_length = strlen( lv_string ).
WRITE: / 'String vide :', lv_length. " Sortie : 0
lv_string = 'SAP'.
lv_length = strlen( lv_string ).
WRITE: / 'String "SAP" :', lv_length. " Sortie : 3
lv_string = 'Test '. " Avec 2 espaces a la fin
lv_length = strlen( lv_string ).
WRITE: / 'String "Test " :', lv_length. " Sortie : 6 (Les espaces comptent !)

2. Avec le type C (Longueur fixe)

DATA lv_char TYPE c LENGTH 10.
DATA lv_len_c TYPE i.
lv_char = 'ABAP'. " Devient internement 'ABAP ' (complete a 10)
lv_len_c = strlen( lv_char ).
WRITE: / 'Type C "ABAP" :', lv_len_c. " Sortie : 4 (Les espaces en fin ne comptent pas !)
lv_char = ' Hello '. " Devient internement ' Hello "
lv_len_c = strlen( lv_char ).
WRITE: / 'Type C " Hello " :', lv_len_c. " Sortie : 8 (En tete/internes comptent, fin non !)
CLEAR lv_char. " Contient maintenant uniquement des espaces ' "
lv_len_c = strlen( lv_char ).
WRITE: / 'Type C (espaces) :', lv_len_c. " Sortie : 0

3. Utilisation dans une condition IF

DATA input_str TYPE string.
input_str = sy-datum+6(2). " Recuperer uniquement le jour
IF strlen( input_str ) = 2.
WRITE: / 'Extraction du jour semble valide (Longueur 2).'.
ELSE.
WRITE: / 'Extraction du jour inattendue (Longueur <> 2).'.
ENDIF.

En resume :

STRLEN est une fonction integree tres utile pour determiner la longueur effective des variables de type caractere en ABAP. Son comportement differe entre STRING et les types de caracteres fixes (comme C) notamment concernant le traitement des espaces en fin de chaine. Elle est ideale pour les verifications de longueur et comme base pour les operations de sous-chaines.