ABAP CONCATENATE: Zeichenketten verbinden – Syntax und Alternativen

kategorie
ABAP-Statements
Veröffentlicht
autor
Johannes

Die CONCATENATE-Anweisung dient dazu, den Inhalt von zwei oder mehr zeichenartigen Datenobjekten (Variablen, Literale) zu einer einzigen Zeichenkette zusammenzufügen (zu verketten) und das Ergebnis in einer Zielvariablen zu speichern.

Syntax

CONCATENATE <quelle1> <quelle2> ... <quelleN>
INTO <zielvariable>
[SEPARATED BY <trennzeichen>]
[RESPECTING BLANKS].
" [CONDENSING]. " Veraltet, nicht mehr verwenden!
  • <quelle1> <quelle2> ... <quelleN>: Dies sind die Datenobjekte (Variablen, Konstanten oder Literale), deren Inhalte nacheinander verbunden werden sollen. Sie sollten normalerweise vom Typ STRING, C, N, D oder T sein. Andere Typen (z. B. numerische) werden in der Regel vor dem Verketten in ihre Zeichenketten-Darstellung konvertiert.
  • INTO <zielvariable>: Dies ist die Variable, die das Ergebnis der Verkettung aufnimmt. Der bisherige Inhalt dieser Variable wird überschrieben.
    • Idealerweise ist <zielvariable> vom Typ STRING, da sich die Länge dann dynamisch anpasst.
    • Ist <zielvariable> vom Typ C (Zeichenkette fester Länge) und das Ergebnis der Verkettung ist länger als die definierte Länge der Zielvariablen, wird das Ergebnis rechts abgeschnitten.
  • SEPARATED BY <trennzeichen> (Optional): Hiermit kann ein Trennzeichen (z. B. ein Leerzeichen space, ein Komma ',', ein Bindestrich '-') angegeben werden, das zwischen die einzelnen Quell-Elemente eingefügt wird. <trennzeichen> ist selbst ein zeichenartiges Datenobjekt.
  • RESPECTING BLANKS (Optional): Dieser Zusatz beeinflusst, wie nachfolgende Leerzeichen von Quellfeldern mit * fester Länge* (Typ C, N, D, T) behandelt werden.
    • Ohne RESPECTING BLANKS (Standardverhalten): Nachfolgende Leerzeichen in Feldern fester Länge werden * entfernt*, bevor sie verkettet werden.
    • Mit RESPECTING BLANKS: Nachfolgende Leerzeichen in Feldern fester Länge bleiben erhalten.
    • Wichtig: Bei Quellfeldern vom Typ STRING werden nachfolgende Leerzeichen immer berücksichtigt, unabhängig von diesem Zusatz. Daher ist RESPECTING BLANKS meist nur dann relevant, wenn man explizit die ursprüngliche Länge von Typ-C-Feldern inkl. ihrer Leerzeichen beibehalten will (und das Ziel vielleicht auch Typ C ist).

Moderne Alternativen (Bevorzugt!)

In modernem ABAP (ab Version 7.40 und höher) gibt es deutlich flexiblere und oft besser lesbare Alternativen zu CONCATENATE:

  1. String-Templates (Literale mit |...|): Erlauben das direkte Einbetten von Variablen und Ausdrücken in eine Zeichenkette.
    DATA(lv_name) = 'Welt'.
    DATA(lv_greeting) = |Hallo { lv_name }! Es ist { sy-timlo }.|.
  2. Verkettungsoperator (&&): Verbindet zwei Zeichenketten direkt.
    DATA(lv_part1) = 'Teil 1'.
    DATA(lv_part2) = 'Teil 2'.
    DATA(lv_combined) = lv_part1 && ' und ' && lv_part2.

Es wird dringend empfohlen, für Neuentwicklungen String-Templates oder den &&-Operator zu verwenden! CONCATENATE ist aber für das Verständnis und die Wartung von älterem Code wichtig.

Beispiele für CONCATENATE

1. Einfache Verkettung

DATA: firstname TYPE string VALUE 'Anna',
lastname TYPE string VALUE 'Schmidt',
fullname TYPE string.
CONCATENATE firstname lastname INTO fullname.
WRITE: / fullname. " Ausgabe: AnnaSchmidt

2. Verkettung mit Trennzeichen

DATA: city TYPE string VALUE 'Berlin',
zip_code TYPE string VALUE '10117',
address TYPE string.
" Mit Leerzeichen trennen
CONCATENATE zip_code city INTO address SEPARATED BY space.
WRITE: / address. " Ausgabe: 10117 Berlin
" Mit Komma und Leerzeichen trennen
CONCATENATE city zip_code INTO address SEPARATED BY ', '.
WRITE: / address. " Ausgabe: Berlin, 10117

3. Verkettung verschiedener Datentypen

DATA: item_count TYPE i VALUE 5,
item_desc TYPE string VALUE 'Apples',
output_str TYPE string.
CONCATENATE item_count item_desc 'available' INTO output_str SEPARATED BY space.
WRITE: / output_str. " Ausgabe: 5 Apples available

(Die Zahl 5 wird automatisch in eine Zeichenkette '5' konvertiert).

4. Umgang mit Leerzeichen bei Typ C (mit und ohne RESPECTING BLANKS)

DATA: field_c1 TYPE c LENGTH 10 VALUE 'Text Eins', " Hat 1 Leerzeichen am Ende
field_c2 TYPE c LENGTH 10 VALUE 'Zwei'. " Hat 6 Leerzeichen am Ende
target_str TYPE string.
" Standard: Nachfolgende Leerzeichen von field_c1 und field_c2 werden entfernt
CONCATENATE field_c1 field_c2 INTO target_str SEPARATED BY '|'.
WRITE: / target_str. " Ausgabe: Text Eins|Zwei
" Mit RESPECTING BLANKS: Nachfolgende Leerzeichen bleiben erhalten
CONCATENATE field_c1 field_c2 INTO target_str SEPARATED BY '|' RESPECTING BLANKS.
WRITE: / target_str. " Ausgabe: Text Eins |Zwei |

5. Vergleich mit String Template

" Entspricht Beispiel 2
address = |{ zip_code } { city }|.
WRITE: / address. " Ausgabe: 10117 Berlin
" Entspricht Beispiel 3
output_str = |{ item_count } { item_desc } available|.
WRITE: / output_str. " Ausgabe: 5 Apples available

Wichtige Hinweise / Best Practice

  • CONCATENATE ist die klassische Methode zur String-Verkettung in ABAP.
  • Seien Sie sich des Standardverhaltens bezüglich nachfolgender Leerzeichen bei Feldern fester Länge (wie Typ C) bewusst.
  • Verwenden Sie idealerweise STRING als Zieltyp, um Abschneiden zu vermeiden.
  • Bevorzugen Sie für neuen Code String-Templates (|...|) oder den Verkettungsoperator (&&), da diese meist lesbarer, flexibler und weniger fehleranfällig sind.