abap字符串拆分成固定的几部分

情景:有一个字符串(比如12345678),

      我们想得到它的前四位的数字(比如 1 2 3 4)

我们使用SAP的标准function TEXT_SPLIT可以实现想要的功能。

这个function,

输入参数 length每次拆分length个字符,text是要拆分的原串。

输出参数line表示的是拆分所得的字符,rest表示原串被拆分后剩下的新串。

测试代码如下所示:

DATA: lv_str TYPE pqa_comno VALUE '12345678',
      lv_str1 TYPE c,
      lv_str2 TYPE c,
      lv_str3 TYPE c,
      lv_str4 TYPE c.
DATA: len TYPE i VALUE 4.
PERFORM split_comno USING lv_str len CHANGING lv_str1 lv_str2 lv_str3 lv_str4.
WRITE:/ '拆分后各部分的值为: '.
WRITE:/ lv_str1.
WRITE:/ lv_str2.
WRITE:/ lv_str3.
WRITE:/ lv_str4.

FORM split_comno USING iv_str TYPE pqa_comno
                       iv_len TYPE i
                 CHANGING iv_str1 TYPE c
                          iv_str2 TYPE c
                          iv_str3 TYPE c
                          iv_str4 TYPE c.

  DATA: lv_tmpc     TYPE c,
        lv_reststr  TYPE pqa_comno.
  lv_reststr = lv_str.
  DO iv_len TIMES.
    IF STRLEN( lv_reststr ) > 0.
      CALL FUNCTION 'TEXT_SPLIT'
        EXPORTING
          length = 1
          text   = lv_reststr
        IMPORTING
          line   = lv_tmpc
          rest   = lv_reststr.
      CASE sy-index.
        WHEN 1.
          iv_str1 = lv_tmpc.
        WHEN 2.
          iv_str2 = lv_tmpc.
        WHEN 3.
          iv_str3 = lv_tmpc.
        WHEN 4.
          iv_str4 = lv_tmpc.
      ENDCASE.
    ENDIF.
  ENDDO.
ENDFORM.                    "split_comno

程序运行后的结果为:

拆分后各部分的值为:

   1

   2

   3

   4

同样的道理,如果我们每次想拆分出2个字符的话,可以用下面的程序来实现。

DATA: lv_str TYPE pqa_comno VALUE '1234567',
      lv_str1 TYPE string,
      lv_str2 TYPE string,
      lv_str3 TYPE string,
      lv_str4 TYPE string.
DATA: len TYPE i VALUE 4.
PERFORM split_comno USING lv_str len CHANGING lv_str1 lv_str2 lv_str3 lv_str4.
WRITE:/ '拆分后各部分的值为: '.
WRITE:/ lv_str1.
WRITE:/ lv_str2.
WRITE:/ lv_str3.
WRITE:/ lv_str4.

*&---------------------------------------------------------------------*
*&      Form  split_comno
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->IV_STR     text
*      -->IV_LEN     text
*      -->IV_STR1    text
*      -->IV_STR2    text
*      -->IV_STR3    text
*      -->IV_STR4    text
*----------------------------------------------------------------------*
FORM split_comno USING iv_str TYPE pqa_comno
                       iv_len TYPE i
                 CHANGING iv_str1 TYPE string
                          iv_str2 TYPE string
                          iv_str3 TYPE string
                          iv_str4 TYPE string.
  DATA: lv_tmpc     TYPE string,
        lv_reststr  TYPE pqa_comno.
  lv_reststr = lv_str.
  DO iv_len TIMES.
    IF STRLEN( lv_reststr ) > 0.
      CALL FUNCTION 'TEXT_SPLIT'
        EXPORTING
          length = 2
          text   = lv_reststr
        IMPORTING
          line   = lv_tmpc
          rest   = lv_reststr.
      CASE sy-index.
        WHEN 1.
          iv_str1 = lv_tmpc.
        WHEN 2.
          iv_str2 = lv_tmpc.
        WHEN 3.
          iv_str3 = lv_tmpc.
        WHEN 4.
          iv_str4 = lv_tmpc.
      ENDCASE.
    ENDIF.
  ENDDO.
ENDFORM.                    "split_comno

程序运行的结果为:

  12

  34

  56

  7

通过上面第二个例子,我们可以看出,与使用+0(2)这种方式来拆分字符串相比。

使用function TEXT_SPLIT来实现的话,原有的字符串为7位的,第4次拆分的时候,

字符串长度不够拆的也不会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值