【SAP】 ABAP 字符串处理
- 去除前导零
DATA lv_char1 TYPE c LENGTH 10. lv_char1 = '0000021211'. **********************************************************************方式1 使用shift SHIFT lv_char1 LEFT DELETING LEADING '0'. write:/ lv_char1. **********************************************************************方式2 使用CONVERSION_EXIT_ALPHA_OUTPUT CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = lv_char1 IMPORTING output = lv_char1. WRITE:/ lv_char1. **********************************************************************方式3 使用表达式 lv_char1 = |{ lv_char1 ALPHA = out }|. WRITE:/ lv_char1.
- 新增前导零
DATA lv_char1 TYPE c LENGTH 10. lv_char1 = '0000021211'. DATA lv_char1 TYPE c LENGTH 10. lv_char1 = '21211'. WRITE:/ lv_char1. **********************************************************************方式1 CONVERSION_EXIT_ALPHA_INPUT CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = lv_char1 IMPORTING output = lv_char1. WRITE:/ lv_char1. **********************************************************************方式2 lv_char1 = |{ lv_char1 ALPHA = IN }|. WRITE:/ lv_char1.
- 拆分字符串 SPLIT
- split 将字符传dobj按照特定字符sep进行拆分
SPLIT dobj AT sep INTO { {result1 result2 [...]} | {TABLE result_tab} } [IN {CHARACTER|BYTE} MODE].
- split 将字符传dobj按照特定字符sep进行拆分
- 截取字符串 SHIFT
- shift dobj up to substr [mode]
查找字符串中substr的位置,并向左截取或者向右截取字符串 - shift dobj [by n places] [mode] mode可以为left和right
字符串向左或者向右移动n个字符,如果n大于字符串的长度,则结果为空值 - shift dobj { {LEFT DELETING LEADING} | {RIGHT DELETING TRAILING} } str
把字符串中前的(LEFT)或者后的(RIGHT)的字符str都去掉
- shift dobj up to substr [mode]
- 字符替换 REPLACE
- 关键字写法
- replace oldStr in fullStr with newStr 默认是只替换匹配到的第一个字符
- replace [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] oldSubStr in fullString with newSubStr.
- REPLACE SECTION [OFFSET off] [LENGTH len] OF dobj WITH new [IN {CHARACTER|BYTE} MODE].
- REPLACE {str1} WITH {str2} INTO {c} [LENGTH {l}] 该写法已过时
- 实例代码
data lv_str type string. data:lv_chr1 type c LENGTH 100, lv_chr2 type c length 100. lv_chr2 = '13%-一般产品-腾讯云服务'. replace '-' in lv_chr2 with ''. write:/ lv_chr2. "13%一般产品-腾讯云服务 lv_chr2 = '13%-一般产品-腾讯云服务'. replace all occurrences of '-' in lv_chr2 with ''. write:/ lv_chr2. "13%一般产品腾讯云服务 replace section offset 3 length 4 of lv_chr2 with 'test'. write:/ lv_chr2. "13%test腾讯云服务
- 函数写法
- 可以在部分操作位中使用,减少中间变量的使用
- replace( val = text [off = off] [len = len] with = new )
- replace(val = text {sub = substring}|{regex = regex} with = new [case = case] [occ = occ] )
- 实例代码:
lv_chr2 = '13%-一般产品-技术'. *replace section offset 3 length 4 of lv_chr2 with 'test'. write:/ replace( val = lv_chr2 off = 3 len = 4 with = 'test'). "13%test技术 lv_chr2 = '13%-一般产品-技术'. *replace all occurrences of '-' in lv_chr2 with ''. write:/ replace( val = lv_chr2 sub = '-' with = '' occ = 0 )."13%一般产品技术 occ 可以是正数也可以为负数,0标识全部替换
- 关键字写法
- 大小写转换
- 函数写法
- to_upper(string)
- to_lower(string)
- 关键字写法
- translate str to {UPPER|LOWER} CASE
- 实例代码
lv_chr1 = 'abc001'. translate lv_chr1 to upper case. write:/ lv_chr1. write:/ to_lower( lv_chr1 ). translate lv_chr1 to lower case. write:/ lv_chr1. write:/ to_upper( lv_chr1 ).
- 函数写法
- 拼接字符串
- 关键字 CONCATENATE
- CONCATENATE {dobj1 dobj2 ...}|{LINES OF itab} INTO result [IN {CHARACTER|BYTE} MODE] [SEPARATED BY sep] [RESPECTING BLANKS].
- &&字符
- 字符串模板
- 区别
- 使用concatenate 会忽略 需要拼接字符串的尾部空格
- 使用字符串操作符会忽略所拼接字符串的尾部空格,被拼接的第二个字符串头部如果有多个空格,则会合并成一个
- 使用字符串模板则会去除所有拼接字符的尾部空格
- 实例代码
data lv_str type string. data:lv_chr1 type c LENGTH 100, lv_chr2 type c length 100. lv_chr1 = ' abba '. lv_chr2 = ' dfsf '. CONCATENATE lv_chr1 lv_chr2 into data(lv_chr3) separated by ': '. write:/ lv_chr3. lv_chr3 = lv_chr1 && ': ' && lv_chr2. write:/ lv_chr3. write:/ |{ lv_chr1 }:{ lv_chr2 }|.
- 关键字 CONCATENATE
- 压缩字符
- 关键字 CONDENSE
- condense string [no-gaps]. 没有no-gaps时,会将首尾的空格移除并将字符串中间的多个空格压缩成1个,如果使用了no-gaps则删除所有空格。
- 函数 CONDENSE
- condense( [val =] text [del = del] [from = from] [to = to] )
如果del不为空,则字符串中已del开头和结尾的部分都会删除,如果为空,则不会有删除。
如果from有值,则会将字符串中跟from值匹配的子字符替换为to的第一个字符。
del、from、to 的默认值都是空格。
- condense( [val =] text [del = del] [from = from] [to = to] )
- 实例代码
data lv_str type string. data:lv_chr1 type c LENGTH 100, lv_chr2 type c length 100. lv_chr1 = ' ERROR\ 处理出错 \ MSG \错误 '. condense lv_chr1 . write:/ lv_chr1. "ERROR\ 处理出错 \ MSG \错误 condense lv_chr1 no-gaps. write:/ lv_chr1. "ERROR\处理出错\MSG\错误 lv_chr1 = ' ERROR\ 处理出错 \ MSG \错误 '. write:/ condense( lv_chr1 ). "ERROR\ 处理出错 \ MSG \错误 write:/ condense( val = lv_chr1 to = ''). "ERROR\ 处理出错 \ MSG \错误 write:/ condense( val = lv_chr1 from = 'ERROR' to = 'ERR'). "E\ 处理出错 \ MSG \错误
- 关键字 CONDENSE
- 查找字符串
- 函数FIND
- 关键字 FIND
- 语法
FIND [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern IN [SECTION [OFFSET off] [LENGTH len] OF] dobj [IN {CHARACTER|BYTE} MODE] [find_options]
- substr 不能为空字符
- find关键字的效率要高于操作符 cs
- 关键字 serch 已经被标记为过时的写法
- 语法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?