Stringoperationen (ABAP): Unterschied zwischen den Versionen

Aus MattWiki
Keine Bearbeitungszusammenfassung
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Sammlung von Codebeispielen zur Nutzung von ABAP Stringfunktionen.
Sammlung von Codebeispielen zur Nutzung von ABAP Stringfunktionen.
Dieser Artikel beschäftigt sich mit eingebauten zeichenartigen Typen.
== Teilstring ==
Extrahieren eines Teilstrings aus einem Gesamtstring:
<syntaxhighlight lang="abap">
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"
</syntaxhighlight>


== Teilen von Strings ==
== Teilen von Strings ==
Zeile 13: Zeile 28:
C_DATA = LV_SPLIT1.
C_DATA = LV_SPLIT1.
</syntaxhighlight>
</syntaxhighlight>
== Strings zusammensetzen ==
Strings können entweder inline oder mit speziellen Befehlen zusammengesetzt werden.
<syntaxhighlight lang="abap">
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
</syntaxhighlight>
Strings mit Leerschritten getrennt zusammensetzen:
<syntaxhighlight lang="abap">
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)
</syntaxhighlight>
== Konvertierung ==
=== In Groß-/Kleinschreibung ===
<syntaxhighlight lang="abap">
DATA: I_TEXT TYPE STRING.
TRANSLATE I_TEXT TO UPPER CASE.
CONCATENATE '*' I_TEXT '*' INTO I_TEXT.
WRITE:
/ 'I_TEXT:    ', I_TEXT.
</syntaxhighlight>
=== TIMS in STRING ===
<syntaxhighlight lang="abap">
DATA: LV_TIME_AS_STR TYPE STRING.
LV_TIME_AS_STR = CONV string( sy-timlo ).
</syntaxhighlight>
== Tabelle von Strings ==
<syntaxhighlight lang="abap">
PARAMETERS: pa_token TYPE c LENGTH 70.
DATA: lt_fields TYPE stringtab.
" Liste mit Spaltennamen erstellen
APPEND pa_token TO lt_fields.
</syntaxhighlight>
== Numerische Textfelder ==
<syntaxhighlight lang="abap">
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.
</syntaxhighlight>
== Zeichen ersetzen mit regulären Ausdrücken ==
=== Führende Ausrufezeichen ersetzen ===
<syntaxhighlight lang="abap">
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.
</syntaxhighlight>
=== Ungültige Zeichen oder Leerschritte ersetzen ===
<syntaxhighlight lang="abap">
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.
</syntaxhighlight>
== 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/


[[Kategorie:ABAP]]
[[Kategorie:ABAP]]

Aktuelle Version vom 7. Juni 2019, 22:01 Uhr

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/