ABAP - Schlüsselwortdokumentation →  ABAP - Referenz →  Interne Daten verarbeiten →  Zeichen- und Bytekettenverarbeitung →  Anweisungen für die Zeichen- und Bytekettenverarbeitung → 

SPLIT

Kurzreferenz

Syntax

SPLIT dobj AT sep INTO
      { {result1 result2 [...]} | {TABLE result_tab} }
      [IN {CHARACTER|BYTE} MODE].

Zusatz:


... IN {CHARACTER|BYTE} MODE


Wirkung

Der Inhalt des Operanden dobj wird gemäß der in sep enthaltenen Trennzeichenfolge in Segmente zerlegt und die Ergebnisse werden entweder in einzelnen Zielfeldern result1 result2 ... oder in den Zeilen einer internen Tabelle result_tab abgelegt.

Bei dobj und sep handelt es sich um zeichenartige Ausdruckspositionen.

Der Operand dobj wird von links nach rechts nach allen Vorkommen des Inhalts des Operanden sep durchsucht, wobei die Groß-/Kleinschreibung berücksichtigt wird. Alle Segmente, die zwischen dem Anfang des Operanden und der ersten Fundstelle, zwischen den Fundstellen und zwischen der letzten Fundstelle und dem Ende des Operanden liegen, werden nacheinander den einzelnen Zielfeldern result1 result2 ... wie folgt zugewiesen oder an die interne Tabelle result_tab angehängt:

Falls der Inhalt des Operanden sep direkt am Anfang von dobj gefunden wird oder direkt aufeinander folgend in dobj vorkommt, ist das Ergebnis der jeweiligen Zerlegung ein leerer String. Falls der Inhalt von sep am Ende von dobj steht, wird die Suche dort abgeschlossen und nach rechts keine Zerlegung mehr durchgeführt.

Falls der Inhalt des Operanden sep nicht gefunden wird oder ein leerer String ist, ist das Ergebnis der Zerlegung ein einziges Segment, das den gesamten Inhalt von dobj enthält und dem ersten einzelnen Zielfeld bzw. der ersten Zeile der internen Tabelle zugewiesen wird.

Bei der Zeichenkettenverarbeitung werden bei Separatoren sep fester Länge die schließenden Leerzeichen berücksichtigt, im Operand dobj und in den durch die Zerlegung entstandenen Segmenten nicht.

Systemfelder

sy-subrc Bedeutung
0 Die Segmente wurden ohne Abschneiden in die Zielfelder bzw. die interne Tabelle übertragen.
4 Beim Übertragen mindestens eines Segments in die Zielfelder bzw. die interne Tabelle wurde rechts abgeschnitten.

Hinweise

Beispiel

Das Textfeld text wird an seinen Leerzeichen zum einen in die drei Strings str1, str2 und str3 und zum anderen in eine interne Tabelle vom Zeilentyp string zerlegt. Da die drei Strings nicht für alle sieben Teile ausreichen, enthält str3 nach der Zerlegung "drag it is getting old", während die interne Tabelle sieben Zeilen enthält, für jedes Wort in text eine.

DATA text TYPE string.

text = `What a drag it is getting old`.

SPLIT text AT space INTO: DATA(str1) DATA(str2) DATA(str3),
                          TABLE DATA(itab).

Zusatz

... IN {CHARACTER|BYTE} MODE

Wirkung

Der optionale Zusatz IN {CHARACTER|BYTE} MODE bestimmt, ob eine Zeichen- oder Bytekettenverarbeitung durchgeführt wird. Falls der Zusatz nicht angegeben ist, wird eine Zeichenkettenverarbeitung durchgeführt. Je nach Verarbeitungsart müssen die Operanden dobj, sep und die Zielfelder result1 result2 ... bzw. die Zeilen der internen Tabelle result_tab zeichen- oder byteartig sein.

Beispiel

Der Bytestring xstr wird bei den Bytes von Wert hexadezimal 20, was in der Codepage UTF-8 für ein Leerzeichen steht, in eine interne Tabelle vom Zeilentyp xstring zerlegt.

DATA(xstr) = cl_abap_codepage=>convert_to( `Like a Hurricane` ).

SPLIT xstr AT CONV xstring( '20' )
              INTO TABLE DATA(xtab) IN BYTE MODE.

LOOP AT xtab INTO xstr.
  cl_demo_output=>write( cl_abap_codepage=>convert_from( xstr ) ).
ENDLOOP.
cl_demo_output=>display( ).