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 TypSTRING
,C
,N
,D
oderT
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 TypSTRING
, da sich die Länge dann dynamisch anpasst. - Ist
<zielvariable>
vom TypC
(Zeichenkette fester Länge) und das Ergebnis der Verkettung ist länger als die definierte Länge der Zielvariablen, wird das Ergebnis rechts abgeschnitten.
- Idealerweise ist
SEPARATED BY <trennzeichen>
(Optional): Hiermit kann ein Trennzeichen (z. B. ein Leerzeichenspace
, 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* (TypC
,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 istRESPECTING 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).
- Ohne
Moderne Alternativen (Bevorzugt!)
In modernem ABAP (ab Version 7.40 und höher) gibt es deutlich flexiblere und oft besser lesbare Alternativen zu
CONCATENATE
:
- 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 }.|. - 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 trennenCONCATENATE zip_code city INTO address SEPARATED BY space.WRITE: / address. " Ausgabe: 10117 Berlin
" Mit Komma und Leerzeichen trennenCONCATENATE 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 entferntCONCATENATE field_c1 field_c2 INTO target_str SEPARATED BY '|'.WRITE: / target_str. " Ausgabe: Text Eins|Zwei
" Mit RESPECTING BLANKS: Nachfolgende Leerzeichen bleiben erhaltenCONCATENATE 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 2address = |{ zip_code } { city }|.WRITE: / address. " Ausgabe: 10117 Berlin
" Entspricht Beispiel 3output_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.