[ABAP] Substrings

* alte Variante
DATA: tel TYPE string.
DATA: vor TYPE string.

tel = '+49-(0)1234-556677'.
vor = tel+0(3). " -> '+49' (name+start(length))

tel+1(2) = '42'. " '49' durch '42' im String ersetzen

WRITE: / tel.
WRITE: / vor.

* neu ab 7.02
res = substring( val = 'ABCDEFGH' off = 3 len = 4 ).    " DEFG
res = substring_from( val = 'ABCDEFGH' sub = 'DEF' ).   " DEFGH
res = substring_after( val = 'ABCDEFGH' sub = 'DEF' ).  " GH
res = substring_before( val = 'ABCDEFGH' sub = 'DEF' ). " ABC
res = substring_to( val = 'ABCDEFGH' sub = 'DEF' ).     " ABCDEF

[ABAP] Strings aufsplitten (analog zu PHP explode)

Variante 1 (beliebige Anzahl Splitelemente)

DATA: lv_satz TYPE string VALUE 'Horst;Udo;Heinz;Ede'.
DATA(it_elem) = VALUE stringtab( ).

SPLIT lv_satz AT ';' INTO TABLE it_elem.

Variante 2 (vordefinierte Anzahl Splitelemente)

DATA: lv_satz TYPE string VALUE 'abc,def,ghi'.
DATA: t11 TYPE string.
DATA: t22 TYPE string.
DATA: t33 TYPE string.
  
SPLIT satz AT ',' INTO t11 t22 t33.

WRITE: / t11, t22, t33.

[ABAP] Strings durchsuchen

DATA: f TYPE string VALUE 'TEST_TEST',
      g TYPE string VALUE 'ST',
      res TYPE match_result_tab.

FIELD-SYMBOLS <match> LIKE LINE OF res.

FIND ALL OCCURRENCES OF g IN f RESULTS res. " Zeichenfolge g in f suchen, Ergebnisausgabe in res

LOOP AT res ASSIGNING <match>. 
  WRITE: / 'offset: ', <match>-offset, 'length: ', <match>-length.
ENDLOOP.

IF sy-subrc EQ 0.
  ... " f enthält g
ENDIF.

[ABAP] Strings verketten / Variablen ausgeben

DATA: s TYPE string.
DATA: var1 TYPE i.
DATA: var2 TYPE i.

var1 = 1.
var2 = 2.

* gut: mit Verkettungsoperator -> &&
* Leerzeichen zwischen den Teilstrings beachten
s = 'Fortschritt ' && var1 && ' / ' && var2.

WRITE: / s.

* besser: Zeichenketten-Templates ab Version 7.31
s = | Fortschritt { var1 } / { var2 } |.

WRITE: / s.

weiterführende Infos: Link und Link2