Stringoperationen (ABAP)

Aus MattWiki
(Weitergeleitet von Stringfunktionen (ABAP))

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/