抗体的博客

爱好太多,空闲时间太少,还好有了博客,让我可以记录自己的想法

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次拆分的时候,

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

阅读更多
个人分类: SAP
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭