ABAP Funktion STRLEN erklärt: Länge von Zeichenketten ermitteln

kategorie
ABAP-Functions
Veröffentlicht
autor
Johannes

Die Funktion STRLEN dient dazu, die Länge einer zeichenartigen Variablen zur Laufzeit zu ermitteln. Sie gibt die Anzahl der “relevanten” Zeichen als ganze Zahl (Typ I) zurück. Was als “relevant” gilt, hängt vom Datentyp der übergebenen Variablen ab.

Syntax

Da STRLEN eine Funktion ist, wird sie innerhalb eines ABAP-Ausdrucks aufgerufen, z. B. auf der rechten Seite einer Zuweisung oder als Teil einer Bedingung:

DATA(laenge) = strlen( <variable> ). " Zuweisung an eine Variable 'laenge' (Typ I)
" Oder in einer Bedingung:
IF strlen( <variable> ) > 10.
" ... Code ...
ENDIF.
" Oder als Parameter für eine andere Funktion/Methode:
some_method( text = ... length = strlen( <variable> ) ).
  • strlen( ... ): Der Funktionsaufruf (Groß-/Kleinschreibung ist hier unerheblich, STRLEN geht auch).
  • <variable>: Das Argument – die zeichenartige Variable, deren Länge bestimmt werden soll (Typ STRING, C, N, D, T). Byte-artige Typen (X, XSTRING) sind nicht erlaubt.

Funktionsweise und Verhalten (Abhängig vom Datentyp)

Das Ergebnis von STRLEN variiert je nach Datentyp des Arguments <variable>:

1. Argument vom Typ STRING

  • STRLEN gibt die aktuelle Anzahl der Zeichen im String zurück.
  • Ein leerer String ('') ergibt die Länge 0.
  • Nachfolgende Leerzeichen, die explizit Teil des String-Wertes sind, werden mitgezählt.

2. Argument vom Typ C, N, D, T (Zeichenketten fester Länge)

  • STRLEN gibt die Anzahl der Zeichen zurück, wobei nachfolgende Leerzeichen nicht mitgezählt werden.
  • Die Funktion misst effektiv die Länge bis zum letzten Zeichen, das kein Leerzeichen ist.
  • Wenn das Feld nur Leerzeichen enthält, ist das Ergebnis 0.
  • Wichtig: STRLEN liefert hier nicht die im DATA-Statement definierte feste Länge des Feldes!

Abgrenzung zu DESCRIBE FIELD ... LENGTH

Die ältere Anweisung DESCRIBE FIELD <feld> LENGTH <laenge> IN CHARACTER MODE. ermittelt bei Typ C die definierte feste Länge, bei Typ STRING die aktuell belegte Länge. STRLEN liefert bei Typ C hingegen die Länge ohne die nachfolgenden Leerzeichen.

Beispiele

1. Mit Typ STRING

DATA lv_string TYPE string.
DATA lv_length TYPE i.
lv_string = ''.
lv_length = strlen( lv_string ).
WRITE: / 'String leer :', lv_length. " Ausgabe: 0
lv_string = 'SAP'.
lv_length = strlen( lv_string ).
WRITE: / 'String "SAP" :', lv_length. " Ausgabe: 3
lv_string = 'Test '. " Mit 2 Leerzeichen am Ende
lv_length = strlen( lv_string ).
WRITE: / 'String "Test " :', lv_length. " Ausgabe: 6 (Leerzeichen zählen mit!)

2. Mit Typ C (Feste Länge)

DATA lv_char TYPE c LENGTH 10.
DATA lv_len_c TYPE i.
lv_char = 'ABAP'. " Wird intern zu 'ABAP ' (auf 10 aufgefüllt)
lv_len_c = strlen( lv_char ).
WRITE: / 'Typ C "ABAP" :', lv_len_c. " Ausgabe: 4 (Nachfolgende Leerzeichen zählen nicht!)
lv_char = ' Hallo '. " Wird intern zu ' Hallo '
lv_len_c = strlen( lv_char ).
WRITE: / 'Typ C " Hallo " :', lv_len_c. " Ausgabe: 8 (Führende/interne zählen, nachfolgende nicht!)
CLEAR lv_char. " Enthält jetzt nur Leerzeichen ' '
lv_len_c = strlen( lv_char ).
WRITE: / 'Typ C (nur Leerz.):', lv_len_c. " Ausgabe: 0

3. Verwendung in IF-Bedingung

DATA input_str TYPE string.
input_str = sy-datum+6(2). " Nur den Tag holen
IF strlen( input_str ) = 2.
WRITE: / 'Tages-Extraktion scheint gültig (Länge 2).'.
ELSE.
WRITE: / 'Tages-Extraktion unerwartet (Länge <> 2).'.
ENDIF.

Zusammenfassend:

STRLEN ist eine sehr nützliche eingebaute Funktion zur Ermittlung der effektiven Länge von zeichenartigen Variablen in ABAP. Ihr Verhalten unterscheidet sich bei STRING und festen Zeichentypen (wie C) insbesondere hinsichtlich der Behandlung nachfolgender Leerzeichen. Sie ist ideal für Längenprüfungen und als Basis für Substring-Operationen.