正常都是 SPLIT 变量 AT '分割符' INTO 变量一 变量二 .
要么就是 INTO TABLE GT_TAB这种
但是上述的分割符都是单一的 下面说的可以多个为整体 或 单个为整体 或 以长度来分割
*SEGMENT
*根据分隔符获取指定位置的字符串,可以用来拆分字符串,INDEX 用来指定位置,指定位置不存在时,
*会抛出异常 CX_SY_STRG_PAR_VAL
一:通过 SEP 指定的分隔符会被当做一个整体进行操作,当分隔符连续出现时,该位置会返回空字符串;
DO.
TRY.
DATA(lv_sep) = segment( val = 'AB;CD ;EF ; ;GH'
index = sy-index
sep = ' ;' ).
CATCH cx_sy_strg_par_val.
EXIT.
ENDTRY.
IF sy-subrc = 0.
DATA:lt_sep LIKE TABLE OF lv_sep.
APPEND lv_sep to lt_sep.
ENDIF.
ENDDO.
CALL METHOD cl_demo_output=>display( lt_sep ).
二:*而通过 SPACE 指定的分隔符中,每个字符都会被视作单独的分隔符,且在分隔符连续出现时也不会单独返回空串
*而通过 SPACE 指定的分隔符中,每个字符都会被视作单独的分隔符,且在分隔符连续出现时也不会单独返回空串
DO.
TRY.
DATA(lv_space) = segment( val = 'AB CD - EF_GH'
index = sy-index
space = ' -_' ).
CATCH cx_sy_strg_par_val.
EXIT.
ENDTRY.
IF sy-subrc = 0.
DATA:lt_space LIKE TABLE OF lv_space.
APPEND lv_space to lt_space.
ENDIF.
ENDDO.
CALL METHOD cl_demo_output=>display( lt_space ).
下面就是按照长度来拆分了需要用到函数TEXT_SPLIT
需要注意的一点就是中文是占俩个字节的
DATA:lv_text_form TYPE i.
DATA:lv_in TYPE char255.
DATA:len TYPE i VALUE '2'.
DATA:lv_out TYPE string.
DATA:lv_rest TYPE string.
DATA:BEGIN OF ls_poitemtext,
text_form TYPE string,
text_line TYPE string,
END OF ls_poitemtext.
DATA:lt_poitemtext LIKE TABLE OF ls_poitemtext.
CLEAR:lv_text_form,lv_in,lv_out,lv_rest.
lv_in = '测试文件121sacs'. "中文为俩位 字母一位
WHILE lv_in IS NOT INITIAL.
CALL FUNCTION 'TEXT_SPLIT'
EXPORTING
length = len "拆分长度
text = lv_in "传入文本值
IMPORTING
line = lv_out "按长度拆得文本值
rest = lv_rest. "剩余文本值
lv_in = lv_rest.
ADD 1 TO lv_text_form.
ls_poitemtext-text_form = lv_text_form.
ls_poitemtext-text_line = lv_out.
APPEND ls_poitemtext TO lt_poitemtext.
ENDWHILE.