情景:有一个字符串(比如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次拆分的时候,
字符串长度不够拆的也不会报错。