Stringoperationen (ABAP): Unterschied zwischen den Versionen

Aus MattWiki
Keine Bearbeitungszusammenfassung
 
(3 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.


Welcher Teil davon gilt für den Datentyp NUMC?
Dieser Artikel beschäftigt sich mit eingebauten zeichenartigen Typen.


== Teilstring ==
== Teilstring ==
Zeile 43: Zeile 43:
</syntaxhighlight>
</syntaxhighlight>


== Konvertierung in Groß-/Kleinschreibung ==
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">
<syntaxhighlight lang="abap">
DATA: I_TEXT TYPE STRING.
DATA: I_TEXT TYPE STRING.
Zeile 53: Zeile 73:
WRITE:
WRITE:
/ 'I_TEXT:    ', I_TEXT.
/ '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>
</syntaxhighlight>


Zeile 64: Zeile 92:
APPEND pa_token TO lt_fields.
APPEND pa_token TO lt_fields.
</syntaxhighlight>
</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 ==
== Weitere Quellen ==

Aktuelle Version vom 7. Juni 2019, 23: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/