SAP拆分( 单字符 多字符 长度)

本文详细介绍了ABAP编程中的Segment函数,如何使用不同方式(SEP、SPACE和长度)进行字符串拆分,以及处理异常的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正常都是  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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ABAP 成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值