Stringoperationen (ABAP): Unterschied zwischen den Versionen
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Matt (Diskussion | Beiträge) |
||
(6 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 == | == Teilstring == | ||
Zeile 28: | Zeile 30: | ||
== Strings zusammensetzen == | == 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"> | <syntaxhighlight lang="abap"> | ||
DATA: I_TEXT TYPE STRING. | DATA: I_TEXT TYPE STRING. | ||
Zeile 41: | Zeile 74: | ||
/ 'I_TEXT: ', I_TEXT. | / 'I_TEXT: ', I_TEXT. | ||
</syntaxhighlight> | </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/