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 (TypSTRING
,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änge0
. - 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 imDATA
-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 Endelv_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.