Stringoperationen (ABAP)

Aus MattWiki

Sammlung von Codebeispielen zur Nutzung von ABAP Stringfunktionen.

Dieser Artikel beschäftigt sich mit eingebauten zeichenartigen Typen.

Teilstring

Extrahieren eines Teilstrings aus einem Gesamtstring:

DATA: LV_STRINGIN   TYPE STRING,
      LV_STRINGOUT  TYPE STRING.

LV_STRINGIN = 'Hallo Welt und guten Morgen Deutschland'.

LV_STRINGOUT = LV_STRINGIN+6(4).   # Kopiere vier Zeichen startend vom 7. Zeichen (1. Zeichen wird mit Null gerechnet).

# LV_STRINGOUT enthält am Ende "Welt"

Teilen von Strings

Teilen eines Strings anhand eines Trennzeichens in zwei Teile.

Das Trennzeichen (Hier: Leerzeichen) wird dabei entfernt.

DATA: LV_SPLIT1  TYPE STRING,
      LV_SPLIT2  TYPE STRING,
      LV_SPLCHAR TYPE CHAR1 VALUE ' '.

SPLIT C_DATA AT LV_SPLCHAR INTO LV_SPLIT1 LV_SPLIT2.

C_DATA = LV_SPLIT1.

Strings zusammensetzen

Strings können entweder inline oder mit speziellen Befehlen zusammengesetzt werden.

DATA: LV_STR1   TYPE STRING,
      LV_STR2   TYPE STRING,
      LV_STROUT TYPE STRING.

LV_STROUT = LV_STR1 LV_STR2.                   # Inline (?)

CONCATENATE LV_STR1 LV_STR2 INTO LV_STROUT.    # Mit CONCATENATE

Strings mit Leerschritten getrennt zusammensetzen:

DATA: LV_STR1   TYPE STRING,
      LV_STR2   TYPE STRING,
      LV_STROUT TYPE STRING.

LV_STR1 = 'Hallo'.
LV_STR2 = 'Welt'.

CONCATENATE LV_STR1 LV_STR2 
  INTO LV_STROUT
  SEPARATED BY SPACE.

" Ergebnis: Hallo Welt (Mit Leerschritt)

Konvertierung

In Groß-/Kleinschreibung

DATA: I_TEXT TYPE STRING.

TRANSLATE I_TEXT TO UPPER CASE.

CONCATENATE '*' I_TEXT '*' INTO I_TEXT.

WRITE:
/ 'I_TEXT:    ', I_TEXT.

TIMS in STRING

DATA: LV_TIME_AS_STR TYPE STRING.

LV_TIME_AS_STR = CONV string( sy-timlo ).

Tabelle von Strings

PARAMETERS: pa_token TYPE c LENGTH 70.

DATA: lt_fields TYPE stringtab.

" Liste mit Spaltennamen erstellen
APPEND pa_token TO lt_fields.

Numerische Textfelder

DATA: e_text    TYPE string,
      lv_vers   TYPE n LENGTH 7,
      lv_vers1  TYPE n LENGTH 4,
      lv_vers2  TYPE n LENGTH 3.

START-OF-SELECTION.

  lv_vers = '2018014'.

  WRITE:
  / 'NUMC before: ', lv_vers.

  lv_vers1 = lv_vers(4).
  lv_vers2 = lv_vers+4(3).

  IF lv_vers2 > 12.
    lv_vers1 = lv_vers1 + 1.
    lv_vers2 = lv_vers2 - 12.
  ENDIF.

  CONCATENATE lv_vers1 lv_vers2 INTO e_text.
  WRITE:
  / 'NUMC after: ', e_text.


Zeichen ersetzen mit regulären Ausdrücken

Führende Ausrufezeichen ersetzen

DATA: i_text     TYPE string,
      e_text     TYPE string.

START-OF-SELECTION.

  i_text = '!Hallo Welt und guten Morgen Deutschland.'.

  WRITE:
  / '*** Führende Ausrufezeichen durch Unterstriche ersetzen ***',
  / 'I_TEXT:    ', i_text.

  e_text = i_text.
  Replace ALL OCCURRENCES OF regex '\A(!)' in e_text WITH '_'.

  WRITE:
  / 'E_TEXT:    ', e_text.

Ungültige Zeichen oder Leerschritte ersetzen

DATA: i_text     TYPE string,
      e_text     TYPE string.

START-OF-SELECTION.

  i_text = '!Hallo Welt und guten Morgen Deutschland.'.

  WRITE:
  / '*** Nicht zugelassene Zeichen durch Unterstriche ersetzen (hier: a und e) ***',
  / 'I_TEXT:    ', i_text.

  e_text = i_text.
  Replace ALL OCCURRENCES OF regex '[^!"%&()*+,-./:;<=>?_ 0123456789BCDFGHIJKLMNOPQRSTUVWXYZbcdfghijklmnopqrstuvwxyz.]' in e_text WITH '_'.

  WRITE:
  / 'E_TEXT:    ', e_text.

  i_text = '!Hallo Welt und guten Morgen Deutschland.'.

  WRITE:
  / '*** Leerzeichen durch Unterstriche ersetzen ***',
  / 'I_TEXT:    ', i_text.

  e_text = i_text.
  Replace ALL OCCURRENCES OF regex '[ ]' in e_text WITH '_'.

  WRITE:
  / 'E_TEXT:    ', e_text.

NUMC, DATS, TIMS

Die Datentypen c und string sind allgemeine zeichenartige Datentypen, während n, d und t spezielle Eigenschaften haben. Sie sind die einzigen eingebauten ABAP-Typen, die es passend zu speziellen Typen NUMC, DATS und TIMS des ABAP Dictionary gibt. Alle anderen speziellen Datentypen des ABAP Dictionary sind allgemeinen ABAP-Typen zugeordnet.

Weitere Quellen

http://www.saptraininghq.com/10-must-know-sap-abap-character-string-coding-techniques/