字符相关操作

1、检查字符串是否全部为数字

<span style="font-size:18px;">**使用正则表达式检查是否为数字,如果返回X,则全部为数字
*  DATA:MATCHER TYPE REF TO CL_ABAP_MATCHER.
*  DATA:MATCH   TYPE C LENGTH 1.
*        MATCHER = CL_ABAP_MATCHER=>CREATE( PATTERN     = '\d+'
*                                   TEXT        = WA_BSIK1-ZUONR ).
*        MATCH = MATCHER->MATCH( ).
if match = 'X',则表示全部为数字</span>

2、将字符格式转换为金额

函数名:UNITS_STRING_CONVERT

作用:根据当前用户的金额显示方式,将带有分隔符的金额(字符型)转换为P类型的数值。例如:将“1,000.123”转换为 1000.123
(我一开始的时候是用replace将逗号替换掉,然后直接赋值给一个数值型的变量.但是通用性不太好)

先说说sap的数字显示的三种方式:

1. 小数点是逗号,分隔符是句号  N.NNN,NN(欧洲人的方式很奇怪:))     

2.小数点是句号,分隔符是逗号 N,NNN.NN 

3.小数点是逗号,分隔符是空格 N NNN,NN

系统以哪种方式显示,存储在用户表USR01的DCPFM字段,值分别是"空" 、“X”、“Y”。

调用函数的时候将这个字段将作为其中的一个输入参数.函数会根据当前显示转换.

例如:

DATA: l_clabs TYPE DECIMALS 3,
         l_dcpfm LIKE usr01-dcpfm.


SELECT 
SINGLE dcpfm INTO l_dcpfm
     FROM usr01
     WHERE bname sy-uname.

CALL 

FUNCTION 'UNITS_STRING_CONVERT'
 EXPORTING
   units_string       '123,456.789'
   dcpfm              l_dcpfm      "此时为X
    MLLN               'M'
    TSND               'T'
 IMPORTING
   units              l_clabs
 EXCEPTIONS
   invalid_type       1
   OTHERS             2.

3、replace 处理*号

 DATA: g_maktx TYPE makt-maktx.

PARAMETERS: p_maktx TYPE makt-maktx.

g_maktx = p_maktx.

REPLACE ALL OCCURRENCES OF '*' IN g_maktx WITH '%'.

SELECT matnr
       maktx
  INTO TABLE it_data UP TO 20 ROWS
  FROM makt
 WHERE maktx LIKE g_maktx.
4、字符串处理

1.对一个日期字符串进行修改赋值:

data:g_aktiv   TYPE   anla-aktiv.

g_aktiv+0(4) = p_gjahr.

g_aktiv+4(2p_peraf.    

g_aktiv+6(2'01'.

 

2.对一个字符串赋值:将取出来的月份赋值到一个字符串当中

DATAg_month   TYPE   LENGTH 2.

 

CLEAR wa_lnran.

LOOP AT gt_lnran INTO wa_lnran.

  g_month wa_lnran-bzdat+4(2).

  IF g_month <> p_peraf.

    DELETE TABLE gt_lnran FROM wa_lnran.

  ENDIF.

ENDLOOP.

 

3.字符串位置判断

DATA:L_STR(50).

MOVE 'WELCOME TO SAP WORLD' TO L_STR.

SEARCH L_STR FOR 'SAP'.

IF SY-SUBRC = 0.

WRITE: SY-FDPOD."返回要查找的字符串最开始出现的位置

ENDIF.

 

4.字符串的截取+

DATA: L_STR(50) TYPE C VALUE 'WELCOME TO SAP WORLD'.

DATA: L_STR1 TYPE C LENGTH 10.

L_STR1 = L_STR(10)."截取字符串前10位数

L_STR1 = L_STR + 5(10)."从字符串第5位数开始截取,共截取10位数

 

5.获取字符串的长度-STRLEN

DATA: L_STR(50) TYPE C VALUE 'WELCOME TO SAP WORLD'.

DATA: LEN TYPE C.

LEN = STRLEN(L_STR).

 

6.字符串合并-CONCATENATE INTO

DATA: L_STR1(10) TYPE C VALUE 'WELCOME',

      L_STR2(10) TYPE C VALUE 'TO',

      L_STR3(10) TYPE C VALUE 'SAPWORLD',

      L_RES      TYPE STRING .

CONCATENATE L_STR1 L_STR2 L_STR3 INTO L_RES.

CONCATENATE L_STR1 L_STR2 L_STR3 INTO L_RES SEPARATED BY ''."合并时加上指定的字符

CONCATENATE L_STR1 L_STR2 L_STR3 INTO L_RES RESPECTING BLANKS."合并时保留前后空格

 

7.字符串拆分-SPLIT... AT... INTO...

DATA: L_STR1(10) TYPE C,

      L_STR2(10) TYPE C,

      L_STR3(10) TYPE C.

DATA: STR(50) TYPE C VALUE 'WELCOME TO MY SAP WORLD'.

SPLIT STR AT SPACE INTO L_STR1 L_STR2 L_STR3."L_STR3的值为MY SAP WORLD.

 

8.按条件转换replace 'SAP' with 'ERP' INTO STR.

 

9.大小写转换

TRANSLATE STR TO UPPER CASE.

TRANSLATE STR TO LOWER CASE.


5.检查select-options里边是否有*:

检查select-options里边是否有*:
data: k type string,
         l type i.
find '*' in section offset 1 of s_matnr."1表示第一次出现
if sy-subrc = 0.
   l = strlen(s_matnr-low).
   l = l - 1.
concatenate s_matnr-low(l) '%' into k.
SELECT MATNR XCHPF INTO TABLE ITAB_MATNR FROM MARC
      WHERE WERKS IN S_WERKS
        AND MATNR LIKE k
        AND XCHPF = ''.



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值