ABAP: String-Handling mit Codebeispielen (Länge, concat, split etc.)

Einige String-Operationen werden immer wieder gebraucht, egal, mit welcher Programmiersprache du arbeitest.

Hier sind ABAP-Codebeispiele für die wichtigsten Tricks mit Strings:

Die Stringlänge in ABAP ermitteln

Nehmen wir an, du hast einen String und willst die Länge ermitteln. Das geht mit dem Befehl strlen. Das Parameter des Befehls ist dein String. Das Ergebnis ist vom Typ i, das ist der normale Typ für Integer innerhalb von ABAP („eingebauter Typ“).

data: lf_somestring type string,
      lf_strlen type i.

lf_somestring = '12345678'.

lf_strlen = strlen( lf_somestring ).

write: / 'String length:', lf_strlen.

ABAP: Strings zusammenfügen (CONCATENATE)

Der ABAP-Befehl zum zusammenfügen von Strings heißt CONCATENATE. Dieser Befehl ist etwas sperrig, wenn es darum geht, Leerzeichen in den String einzufügen. In der Grundversion werden die Teilstrings direkt aneinander geklebt, also ohne Leerzeichen. Es ist auch nicht möglich, die Leerzeichen mit ‚ ‚ oder mittels der Konstanten space einzufügen.

Wenn man Leerzeichen zwischen den Teilstrings einfügen will, dann muss man sie gesondert bestellen, mittels des Befehlszusates „SEPARATED BY SPACE“. Statt Space kann man hier auch jedes andere Zeichen verwenden, z.B. einen Doppelpunkt.

Die folgenden Beispiele illustrieren die richtige Verwendung. Sie zeigen auch, was nicht geht, obwohl man erwarten würde, dass es geht:

data: lv_result type string.

CONCATENATE 'Hello'  'World' INTO lv_result.
WRITE: / 'Result:', lv_result.
" => Result: HelloWorld

" this does not work!
CONCATENATE 'Hello' ' ' 'World' INTO lv_result.
WRITE: / 'Result:', lv_result.
" => Result: HelloWorld

CONCATENATE 'Hello'  'World' INTO lv_result separated by space.
WRITE: / 'Result:', lv_result.
" => Result: Hello:World

CONCATENATE 'Hello'  'World' INTO lv_result separated by ':'.
WRITE: / 'Result:', lv_result.
" => Result: Hello:World

" this also does not work!
CONCATENATE 'Hello'  space 'World' INTO lv_result.
WRITE: / 'Result:', lv_result.
" => Result: HelloWorld

" this also does not work!
CONCATENATE 'Hello'  ', ' 'World' INTO lv_result.
WRITE: / 'Result:', lv_result.
" => Result: Hello,World

ABAP: Mit CONCATENATE eine Tabelle von Strings zusammensetzen

Der Concatenate-Befehl ist auch in der Lage, eine ganze Tabelle von Strings zu einem einzigen String zusammenzusetzen. Auch hier muss man Leerzeichen als Trennzeichen gesondert bestellen.

TYPES: tt_string TYPE TABLE OF string.
DATA: lt_strings TYPE tt_string,
      lf_string  TYPE string.
DATA: lv_result TYPE string.

lf_string = 'Hello'.
APPEND lf_string TO lt_strings.

lf_string = 'World'.
APPEND lf_string TO lt_strings.

lf_string = 'ABAP'.
APPEND lf_string TO lt_strings.

CONCATENATE LINES OF lt_strings INTO lv_result SEPARATED BY space.

WRITE: / 'Result:', lv_result.

Die Ausgabe lautet dann

Result: Hello World ABAP

ABAP: Leerzeichen in einem String entfernen oder normieren

In ABAP gibt es einen eigenen Befehl CONDENSE, um Leerzeichen in einem String zu normieren oder auch gänzlich zu entfernen.

DATA: lv_string TYPE string.

" Initialize the string with leading, trailing, and consecutive spaces
lv_string = '   This   is   an   example   string.   '.

" Display the original string
WRITE: / 'Original String:', lv_string.

" Use CONDENSE to remove leading, trailing, and consecutive spaces
CONDENSE lv_string.

" Display the modified string after using CONDENSE
WRITE: / 'Modified String:', lv_string.

CONDENSE lv_string NO-GAPS.

WRITE: / 'no gaps:', lv_string.

Die Ausgabe lautet:

Original String:    This   is   an   example   string.
Modified String: This is an example string.
no gaps: Thisisanexamplestring.

Man sieht: CONDENSE ohne den Zusatz „no-gaps“ normiert die Leerzeichen:

  • Führende Leerzeichen werden komplett entfernt.
  • Nachfolgende Leerzeichen werden komplett entfernt.
  • aufeinanderfolgende Leerzeichen werden normiert: zwischen zwei Wörtern steht nur noch ein einziges Leerzeichen.

Mit dem Zusatz „no-gaps“ werden alle Leerzeichen komplett entfernt.

ABAP: SPLIT: einen String an einem Trennzeichen in eine Liste aufspalten

Der SPLIT-Befehl trennt einen String auf in eine Liste von Teilstrings.

Hier ist ein Beispiel. Der String enthält Wörter, die mit einem Komma (und ohne Leerzeichen) voneinander getrennt sind. Beim SPLIT-Befehl muss genau angegeben werden, wie das Trennzeichen lautet. Hier ist es ‚,‘.

DATA lv_string TYPE string.
DATA lt_substrings TYPE TABLE OF string.

" Initialize the string with a delimiter
lv_string = 'Apple,Orange,Banana,Grapes'.

" Display the original string
WRITE: / 'Original String:', lv_string.

" Use SPLIT to split the string into substrings based on the comma delimiter
SPLIT lv_string AT ',' INTO TABLE lt_substrings.

" Display the substrings
WRITE: / 'Substrings:'. 
LOOP AT lt_substrings INTO lv_string.
  WRITE: / lv_string.
ENDLOOP.

Die Ausgabe lautet:

Original String: Apple,Orange,Banana,Grapes
Substrings:
Apple
Orange
Banana
Grapes

Angenommen, die Wortliste sei durch Leerzeichen getrennt, dann kann man das Trennzeichen mit ‚ ‚ bezeichnen. Leichter zu lesen ist aber dieses hier:

SPLIT lv_string AT space INTO TABLE lt_substrings.

ABAP: Strings mit REPEAT wiederholen

Mit dem REPEAT-Befehl kannst du einen String wiederholen. Du könntest das natürlich auch „zu Fuß“ in einer Schleife mittels CONCATENATE erreichen. Aber direkter geht es mit REPEAT:

DO 10 TIMES.
  DATA(lv_asterisks) TYPE string.
  lv_asterisks = repeat( '*' sy-index ).

  WRITE: / lv_asterisks.
ENDDO.

Die Ausgabe lautet dann:

*
**
***
****
*****
******
*******
********
*********
**********

ABAP: einen String in Großbuchstaben bzw. Kleinbuchstaben wandeln

Manchmal brauchst du einen String ausschließlich in Großbuchstaben oder ausschließlich in Kleinbuchstaben. In ABAP geht das so:

data: lf_text type string value 'Hello World'.

data(lf_uppercase) = to_upper( lf_text ).
data(lf_lowercase) = to_lower( lf_text ).

write: / 'Uppercase', lf_uppercase.
write: / 'Lowercase', lf_lowercase.

Die Ausgabe lautet dann:

Uppercase HELLO WORLD
Lowercase hello world

Mehr ABAP-Tipps findest du hier.

heiko

Dipl.-Ing. Heiko Evermann

Vorheriger Artikel