1. SPLIT f AT g INTO h1 ... hn.
2. SPLIT f AT g INTO TABLE itab.
As with any string processing statement, all the operands are processed here as type C fields (regardless of type). No internal conversion is performed.
Splits the contents of the f according to the delimiter g and
places them in the fields h1 to hn (n >= 2).
g is used in its defined length.
SY-SUBRC = 0:
All hi fields (1 <= i <= n) were big enough.
SY-SUBRC = 4:
One of the hi fields was not big enough, so the value had to be truncated.
DATA: NAMES(30) VALUE 'Charly, John, Peter', ONE(10), TWO(10), DELIMITER(2) VALUE ','. SPLIT NAMES AT DELIMITER INTO ONE TWO.
Now, ONE has the value "Charly" and
TWO has the value "John, Pete".
SY-SUBRC is set to 4, since TWO was not big enough to include "John, Peter".
DATA: NAMES2(30) VALUE 'Charly, John, Peter', THREE(10) VALUE 'New York', FOUR(10), FIVE(10), SIX(10) VALUE 'SAP'. SPLIT NAMES2 AT ',' INTO THREE FOUR FIVE SIX. IF THREE = 'Charly' AND FOUR = ' John' AND FIVE = ' Peter' AND SIX = SPACE. WRITE 'SPLIT is OK'. ENDIF.
Outputs "SPLIT is OK".
Unless the number of target fields is greater than the number of delimiters in the source field, very little information ought to be lost. Therefore, the last target field in this case contains the "rest", including the delimiters (see first example).
Stores the components of f in the internal table itab. For each part of f, a "special" table line is created.
f is considered without trailing blanks.
DATA: BEGIN OF ITAB OCCURS 10, WORD(20), END OF ITAB. SPLIT 'STOP Two STOP Three STOP ' AT 'STOP' INTO TABLE ITAB.
Now, ITAB has three lines. The first line is blank, the second contains 'Two' and the third contains 'Three'.
The runtime required for the SPLIT command in the first example for variant 1 is about 15 msn (standardized microseconds). If the sub-fields of f are written to an internal table, about 30 msn are needed.
CONCATENATE, SEARCH, SHIFT