关闭

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

标签: stringfunctionrestsapc测试
1912人阅读 评论(0) 收藏 举报
分类:

情景:有一个字符串(比如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次拆分的时候,

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:116578次
    • 积分:2881
    • 等级:
    • 排名:第12334名
    • 原创:170篇
    • 转载:83篇
    • 译文:3篇
    • 评论:3条
    最新评论