SAP hat mit SAP NetWeaver 7.02 im ABAP Stack einige neue, interessante Stringfunktionen hinzugefügt. Die neuen Funktionen ersetzen einerseits bestehende ABAP Kommandos, andererseits liefern die Funktionen teilweise völlig neue Funktionalitäten. Nachfolgend gehe ich auf die einzelnen Stringfunktionen näher ein und zeige anhand von Beispielen die Anwendung der Funktionen.
cmax/cmin – Zeichenartige Extremwertfunktion
Mit den neuen Extremwertfunktionen cmax bzw. cmin können bis zu 9 zeichenartige Argumente verglichen werden und man erhält die größte oder das kleinste der übergebenen Zeichen als Ergebnis. Verglichen werden die Zeichen auf Basis der verwendeten Codepage von links nach rechts.
Beispiele:
1 |
l_result = cmax( val1 = 'AAAC' val2 = 'AAAB' val3 = 'AAAD' ). |
Ergebnis: AAAD
1 |
l_result = cmax( val1 = 'AAAC' val2 = 'AZAB' val3 = 'AAAD' ). |
Ergebnis: AZAB
1 |
l_result = cmin( val1 = 'AAAC' val2 = 'AAAB' val3 = 'AAAD' ). |
Ergebnis: AAAB
1 |
l_result = cmin( val1 = 'AAAC' val2 = '0AAC' val3 = 'AAAD' ). |
Ergebnis: 0AAC
condense – Verdichtungsfunktion
Die Zeichenkettenfunktion condense verdichtet den Inhalt einer Zeichenkette. Im Gegensatz zum ABAP Kommando bietet die Funktion darüber hinaus jedoch noch einige weitere Möglichkeiten. Beispielsweise können mit der Funktion auch führende oder endende Zeichen entfernt werden.
Nachfolgendes Beispiel entfernt die führenden und endenden X und verdichtet die X zwischen abc und def auf ein X:
1 |
l_string = condense( val = ‘XXXabcXXXdefXXX‘ del = ‘X‘ from = ‘X‘ to = ‘X‘ ). |
Ergebnis: abcXdef
concat_lines_of – Verkettungsfunktion
Diese Funktion verkettet die Zeilen einer internen Tabelle in eine Zeichenkette. Mit dem Zusatz sep kann ein Separator als Trenner zwischen den Zeilen eingefügt werden. Mit dem folgenden Beispiel werden alle Zeilen der Tabelle TAB in einen String, getrennt durch einen Strichpunkt verkettet:
1 |
L_string = concate_lines_of( table = tab sep = ‘;‘ ). |
escape – Fluchtsymbolfunktion
Die Funktion escape ermöglicht das regelbasierte Ersetzen eines Strings durch Fluchtsymbole. Die möglichen Regeln sind in cl_abap_format als Konstanten definiert.
1 2 |
DATA l_string0 TYPE string. DATA l_string1 TYPE string. |
1 2 |
l_string0 = 'http://www.cadaxo.com'. l_string1 = escape( val = l_string0 format = cl_abap_format=>e_url_full ). |
1 |
WRITE: / l_string0, / l_string1. |
Ergebnis:
1 2 |
http://www.cadaxo.com http%3A%2F%2Fwww.cadaxo.com |
insert – Einfügefunktion
Diese Funktion ermöglicht das Einfügen einer Zeichenkette an der ersten oder einer bliebigen Stelle einer anderen Zeichenkette. Nachfolgend ein Beispiel mit dem an der bestehenden Zeichenkette an einer spezifischen Stelle eine andere Zeichenkette eingefügt wird. Nach Ausführen der folgenden Zeilen enthält l_string den Wert ‘News in ABAP‘.
1 2 |
L_string = ‘NewsABAP‘. L_result = insert( val = l_string sub = ‘ in ‘ off = 5 ). |
match – Abgleichfunktion
Die Funktion match durchsucht einen Text nach einer bestimmten Regex-Übereinstimmung und liefert die gefundene Teilmenge zurück. Groß-/Kleinschreibung wird standardmäßig berücksichtigt, kann jedoch übersteuert werden. Für weitere Informationen zu Regex in SAP bitte die SAP Online Dokumentation verwenden.
repeat – Wiederholfunktion
Hier wird eine Zeichenkette zurückgegeben, welche den Inhalt einer anderen Zeichenkette beliebig oft wiederholt. Mir fällt aktuell keine sinnvolle Anwendung ein, aber hier jedenfalls ein Beispiel, welches die Zeichenkette ‘ABC‘ 5-mal wiederholt und in das Feld l_string stellt:
1 |
L_string = repeat( val = ‘ABC‘ occ = 5 ). |
replace – Ersetzungsfunktion
Mit replace wird ein Teilbereich einer Zeichenkette durch eine Übergebene Zeichenkette ersetzt. Einerseits besteht die Möglichkeit den Teilbereich über eine Offset- bzw. Längenangabe oder über ein Regex zu ermitteln.
Beispiele:
1 |
l_result = replace( val = 'ABAP xx GOOD' off = 6 len = 0 with = 'IS' ). |
Ergebnis: ‘ABAP xISx GOOD‘
1 |
l_result = replace( val = 'ABAP xx GOOD' off = 4 len = 4 with = 'IS' ). |
Ergebnis: ‘ABAPISGOOD‘
reverse – Umdrehfunktion
Auch diese Funktion klingt zwar sehr interessant, aber in meinem bisherigen ABAP Leben hab ich so eine Funktion noch nicht vermisst. Trotzdem hier kurz ein Beispiel, welches als Ergebnis den Inhalt einer Zeichenkette komplett umdreht:
1 2 |
L_string = ‘PABA‘. L_string = reverse( l_string ). |
Ergebnis: ABAP
Für ältere SAP Systeme existiert der Funktionbaustein STRING_REVERSE welcher den gleichen Zweck erfüllt.
shift_left/shift_right – Verschiebefunktion
Diese neuen Funktionen ersetzen im Prinzip das Kommando SHIFT bieten aber mit dem SUB-Zusatz (Substring) eine zusätzliche Funktion.
Beispiele:
1 |
l_result = shift_left( val = 'ABCD' places = 2 ). |
Ergebnis: ‘CD‘
1 |
l_result = shift_left( val = 'ABCD' circular = 2 ). |
Ergebnis: ‘CDAB‘
1 |
l_result = shift_left( val = 'ABCD' sub = 'AB' ). |
Ergebnis: ‘CD‘
substring, substring_… – Teilfeldfunktion
Mit Hilfe dieser neuen Funktionen kann aus einer übergebenen Zeichenkette ein Teilfeld ermittelt werden. Ein wesentlicher Vorteil dieser neuen Funktion liegt darin, dass hier auch Regular Expressions verwendet werden können. Nachfolgend Beispiele für alle vorhandenen Substring-Funktionen:
1 |
l_result = substring( val = 'ABCDEFGH' off = 3 len = 4 ). |
Ergebnis: ‘DEFG‘ – Bei dieser Variante ist es jedoch sinnvoller (und schneller) mit l_result = l_field+3(4) zu arbeiten.
1 |
l_result = substring_from( val = 'ABCDEFGH' sub = 'DEF' ). |
Ergebnis: ‘DEFGH‘
1 |
l_result = substring_after( val = 'ABCDEFGH' sub = 'DEF' ). |
Ergebnis: ‘GH‘
1 |
l_result = substring_before( val = 'ABCDEFGH' sub = 'DEF' ). |
Ergebnis: ‘ABC‘
1 |
l_result = substring_to( val = 'ABCDEFGH' sub = 'DEF' ). |
Ergebnis: ‘ABCDEF‘
to_upper, to_lower, to_mixed, from_mixed – Groß-/Kleinschreibungsfunktionen
Auch hier handelt es sich um Funktionen, die teilweise bestehende Kommandos ersetzen. „to_upper“ und „to_lower“ wandeln die Inhalte einer Zeichenkette in Groß- bzw. Kleinbuchstaben um. Völlig gleiches Ergebnis wie bei dem Kommando TRANSLATE TO UPPER/LOWER CASE.
Neu und interessant sind die beiden Funktionen to_mixed bzw. from_mixed. „to_mixed“ setzt alle Buchstaben ab der 2. Position in Kleinbuchstaben um. „from_mixed“ fügt von links nach rechts ab der 2. Position das erste im Zusatz sep angegebene Zeichen ein. Durch die Zusätze sep, case und min kann auf das Verhalten beider Funktionen Einfluss genommen werden.
Beispiel:
1 |
l_result = to_mixed( val = 'CADAXO GMBH' ). |
Ergebnis: ‘Cadaxo gmbh‘
translate – Umsetzfunktion
Auch hier wieder eine Funktion, die ähnlich zum bekannten ABAP Kommando TRANSLATE … USING … ist. Die Funktion liefert eine Zeichenkette zurück, bei der die Zeichen, die in FROM vorkommen durch das Zeichen ersetzt werden, welche in TO an der gleichen Stelle wie in FROM vorkommen. (Sorry für den verwirrenden Satz, einfach ein paar Mal durchlesen, dann wird’s klarer J )
Beispiel:
1 |
l_result = translate( val = 'ABCD' from = 'AC' to = 'YZ' ). |
Ergebnis: ‘YBZD‘
distance – Ähnlichkeitsfunktion
Diese Funktion ist sehr interessant. Sie gibt den Editierabstand (Levenshtein-Distanz) zweier Zeichenketten zurück. Das ist die minimale Anzahl von Einfüge-, Lösch- oder Ersetzungsvorgängen, die notwendig sind, um die eine Zeichenkette in die andere Zeichenkette zu überführen. Mit dem Zusatz max kann ein Wert angegeben werden, der die Berechnung abbricht, sobald die Anzahl der Änderungsvorgänge größer wird. Die Verwendung der Funktion könnte z. B. bei Doublettenprüfungen interessant sein.
Beispiele:
1 |
l_int = distance( val1 = 'CADAXO GMBH' val2 = 'ADAXOGMBH' ). |
Ergebnis: 2 (Ein „C“ und ein Leerzeichen müssen eingefügt werden)
1 |
l_int = distance( val1 = 'ABCD' val2 = 'EFGH' ). |
Ergebnis: 4 (Alle Zeichen müssen ausgetauscht werden)