字符串处理

  1. SPLIT dobj AT sep INTO { {result1 result2 ...} | {TABLE result_tab} }

    必须指定足够目标字段。否则,用字段dobj的剩余部分填充最后目标字段并包含分界符;或者使用内表动态接收

    DATA: L_STR  TYPE STRING,
    L_STR1 TYPE C,
    L_STR2 TYPE C. DATA: BEGIN OF LT_STR OCCURS 0,
    STR TYPE C,
    END OF LT_STR. L_STR = '1/2'.
    SPLIT L_STR AT '/' INTO L_STR1 L_STR2. "根据‘/’截断字符创 L_STR 放于L_STR1、L_STR2
    WRITE: L_STR1,L_STR2,/. SPLIT L_STR AT '/' INTO TABLE LT_STR. "根据‘/’截断字符创 L_STR 放于表LT_STR
    LOOP AT LT_STR.
    WRITE: LT_STR-STR,/.
    ENDLOOP.
  2. SHIFT dobj { [ {BY num PLACES} | { UP TO sub_string } ] [ [ LEFT|RIGHT ] [ CIRCULAR ] ] }

    ​ | { { LEFT DELETING LEADING } | { RIGHT DELETING LEADING } } pattern

    对于固定长度字符串类型,shift产生的空位会使用空格或十六进制的0(如果为X类型串时)来填充

    向右移动时前面会补空格,固定长度类型字符串与String结果是不一样:String类型右移后不会被截断,只是字串前面补相应数量的空格,但如果是C类型时,则会截断;左移后后面是否被空格要看是否是固定长度类型的字符串还是变长的String类型串,左移后C类型会补空格,String类型串不会(会缩短)

    CIRCULAR:将移出的字符串放在左边或者左边

    pattern:只要前导或尾部字符在指定的pattern字符集里就会被去掉,直到第一个不在模式pattern的字符止

    DATA(STR) = `0123456789`.
    SHIFT STR. "打印出 123456789 DATA: TEXT TYPE STRING VALUE 'I know you know',
    OFF TYPE I.
    FIND 'you' IN TEXT MATCH OFFSET OFF.
    SHIFT TEXT BY OFF PLACES. "从 ‘you’ 的地方截断字符串TEXT,保留'you' 和之后的字符串 you know
    *SHIFT TEXT UP TO 'you'. "从 ‘you’ 的地方截断字符串TEXT,保留'you' 和之后的字符串 you know DATA(TEXT) = '0123456789'.
    *SHIFT TEXT RIGHT. "从右边截断第一个字符 012345678
    SHIFT TEXT LEFT. "从左边截断第一个字符 123456789 SHIFT TEXT UP TO 'you' LEFT CIRCULAR. "打印出来是 ‘you know I know’
    SHIFT TEXT UP TO 'you' RIGHT CIRCULAR. "打印出来是 ‘know I know you’ DATA(xstr) = CONV xstring( `AABBCCDDEEFF` ).
    SHIFT xstr IN BYTE MODE. "打印出来 BBCCDDEEFF DATA TEXT TYPE STRING VALUE `I know you know `.
    SHIFT TEXT RIGHT DELETING TRAILING 'no kw'. "I know you DATA TXT TYPE STRING VALUE '0000011111'.
    SHIFT TXT RIGHT DELETING TRAILING '1'. "00000
    SHIFT TXT LEFT DELETING LEADING '0'. "11111
  3. CONDENSE [NO-GAPS].

    如果是C类型只去掉前面的空格(因为是定长,即使后面空格去掉了,左对齐时后面会补上空格),如果是String类型,则后面空格也会被去掉;

    字符串中间的多个连续的空格使用一个空格替换(String类型也是这样);

    NO-GAPS:字符串中间的所有空格都也都会去除(String类型也是这样);空格去掉后会左对齐

    DATA: BEGIN OF SENTENCE,
    WORD1 TYPE C LENGTH 30 VALUE 'She',
    WORD2 TYPE C LENGTH 30 VALUE 'feeds',
    WORD3 TYPE C LENGTH 30 VALUE 'you',
    WORD4 TYPE C LENGTH 30 VALUE 'tea',
    WORD5 TYPE C LENGTH 30 VALUE 'and',
    WORD6 TYPE C LENGTH 30 VALUE 'oranges',
    END OF SENTENCE,
    TEXT TYPE STRING.
    TEXT = SENTENCE.
    CONDENSE TEXT. " She feeds you tea and oranges
    CONDENSE TEXT NO-GAPS. "Shefeedsyouteaandoranges
  4. CONCATENATE { dobj1 dobj2 ...} | { LINES OF itab } INTO result [SEPARATED BY sep] [RESPECTING BLANKS].

    C、D、N、T类型的前导空格会保留,尾部空格都会被去掉,但对String类型所有空格都会保留;对于C、D、N、T类型的字符串有一个RESPECTING BLANKS选项可使用,表示尾部空格也会保留。注:使用 `` 对String类型进行赋值时才会保留尾部空格

    TYPES HEX TYPE X LENGTH 1.
    DATA ITAB TYPE TABLE OF HEX WITH EMPTY KEY. ITAB = VALUE #(
    ( CONV HEX( '48' ) )
    ( CONV HEX( '65' ) )
    ( CONV HEX( '6C' ) )
    ( CONV HEX( '6C' ) )
    ( CONV HEX( '6F' ) ) ). CONCATENATE LINES OF ITAB INTO DATA(XSTR) IN BYTE MODE. "48656C6C6F
  5. strlen(arg)、Xstrlen(arg)

    String类型的尾部空格会计入字符个数中,但C类型的变量尾部空格不会计算入

    DATA: STR TYPE STRING      VALUE `12345     `,
    TXT TYPE C LENGTH 10 VALUE '12345 ',
    LEN TYPE I. LEN = STRLEN( STR ). "10
    LEN = STRLEN( TXT ). "5
  6. substring( val = TEXT [off = off] [len = len] )

    DATA  RESULT TYPE STRING.
    RESULT = SUBSTRING( VAL = 'ABCDEFGH' OFF = 2 LEN = 2 ). "CD
    RESULT = SUBSTRING_FROM( VAL = 'ABCDEFGH' SUB = 'CD' ). "CDEFGH
    RESULT = SUBSTRING_AFTER( VAL = 'ABCDEFGH' SUB = 'CD' ). "EFGH
    RESULT = SUBSTRING_BEFORE( VAL = 'ABCDEFGH' SUB = 'CD' ). "AB
    RESULT = SUBSTRING_TO( VAL = 'ABCDEFGH' SUB = 'CD' ). "ABCD
  7. count( val = TEXT {sub = substring}|{regex = regex} )

    匹配指定字符串substring或正则式regex出现的子串次数,返回的类型为i整型类型

    DATA(RESULT1) = COUNT(            VAL = `xxx123yyy` REGEX = `\d+` ).	"1
    DATA(RESULT2) = COUNT_ANY_OF( VAL = `xxx123yyy` SUB = `123` ). "3
    DATA(RESULT3) = COUNT_ANY_NOT_OF( VAL = `xxx123yyy` SUB = `x` ). "6
  8. match( val = TEXT REGEX = REGEX occ = occ)

    返回的为匹配到的字符串。注:每次只匹配一个。

    occ:表示需匹配到第几次出现的子串。如果为正,则从头往后开始计算,如果为负,则从尾部向前计算

    MATCH( VAL = 'x1 x2 x3' REGEX = 'x.' OCC = 2 )	"x2
  9. find( val = TEXT {sub = substring}|{regex = regex}[occ = occ] )

    查找substring或者匹配regex的子串的位置。如果未找到,则返回 -1,返回的为offset,所以从0开始

    DATA(RESULT1) = FIND(            VAL = `xxx123yyy` REGEX = `\d+` ).	"3
    DATA(RESULT2) = FIND_END( VAL = `xxx123yyy` REGEX = `\d+` ). "6
    DATA(RESULT3) = FIND_ANY_OF( VAL = `xxx123yyy` SUB = `123` ). "3
    DATA(RESULT4) = FIND_ANY_NOT_OF( VAL = `xxx123yyy` SUB = `x` ). "3

ABAP-字符串常用处理方法的更多相关文章

  1. python3【基础】-字符串 常用的方法

    字符串一个最重要的特性就是不可修改. name.capitalize() 首字母大写 name.casefold() 大写全部变小写 name.center(50,"-") 输出 ...

  2. Python语言学习:字符串常用的方法

    python字符串常用的方法 1. find( ):在字符串中搜索指定的值并返回它被找到的位置,如果没有找到,则返回-1 string.find(value,start,end) #value:必需, ...

  3. python字符串常用的方法解析

    这是本人在学习python过程中总结的一些关于字符串的常用的方法. 文中引用了python3.5版本内置的帮助文档,大致进行翻译,并添加了几个小实验. isalnum S.isalnum() -> ...

  4. js入门之字符串常用的方法

    一. 概念理解基本包装类型 1. 基本包装类型 三种基本包装类型 String var s = new String('123dddd'); Number Boolean 简单类型没有方法和属性 之所 ...

  5. js字符串常用判断方法

    转自:http://blog.sina.com.cn/s/blog_6819fa800100j5t6.html 一.方法介绍 function obj$(id)                     ...

  6. JS操作字符串常用的方法

    JS操作String对象的方法 charAt(index):返回指定索引处的字符串charCodeAt(index):返回指定索引处的字符的Unicode的值concat(str1,str2,...) ...

  7. python之字符串常用的方法

    1. 去掉空格或换行符 s='. hello .world .\n' new_s = s.strip()#默认去掉字符串前后的空格和换行符 new_s = s.strip('.')#可传参去掉字符串前 ...

  8. Python字符串常用的方法——真心觉得比java,c好用

    # Strings have many methods wo can use rand_string=" life is a beautiful struggle " print( ...

  9. js字符串常用的方法总结,及其用法

    JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...

  10. C#字符串string的常用使用方法

    1--->字符串的声明: 1.string s=new string(char[] arr)     //根据一个字符数组声明字符串,即将字符字组转化为字符串. 2.string s=new s ...

随机推荐

  1. Anaconda, conda, pyenv, virtualenv的区别

    1.Python环境 Python解释器--Python.exe Python包集合--Lib,包括自带包和第三方包 2.Anaconda--一个科学计算环境,Python的发行版本 包括了Conda ...

  2. Java之再初识二

    本篇博客将继续介绍Java基础知识 1.Java包含哪些数据类型 2.Java基本数据类型转换包含哪两类 3.为什么需要包装类 4.int与integer有什么区别,它们之间如何相互转化的 5.逻辑运 ...

  3. JSP2.2自定义标签、EL函数

    简介 JSTL是一个JSP标准标签库,可以解决大部分问题,但是如果我们需要一些更特殊的功能,就需要自定义类似JSTL中标签的标签.如果EL表达式无法满足我们的需求,我们也可以自定义EL函数. tld后 ...

  4. Book of Shaders 03 - 学习随机与噪声生成算法

    0x00 随机 我们不能预测天空中乌云的样子,因为它的纹理总是具有不可预测性.这种不可预测性叫做随机 (random). 在计算机图形学中,我们通常使用随机来模拟自然界中的噪声.如何获得一个随机值呢, ...

  5. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  6. 02 Writing Your First Program 写你的第一个C程序

    Let's print "Hi" 打印输出"Hi" In your first computer program, let's print something ...

  7. matplotlib.pyplot.imshow如何显示灰度图

    转载:https://www.zhihu.com/question/24058898 作者:采石工链接:https://www.zhihu.com/question/24058898/answer/1 ...

  8. 《C++ primerplus》第13章练习题

    1.对CD类的派生练习.基类CD类存储作者和作品号等信息,派生类Classic额外增加一格"主要作品"的信息.主函数使用拷贝构造函数.按引用传递参数的函数和指针来测试基类和派生类的 ...

  9. 通过VNC远程连接Linux实例

    无法使用Workbench和远程连接软件(例如PuTTY.Xshell.SecureCRT等)连接Linux实例时,您可以通过控制台的VNC远程连接实例,查看云服务器操作界面的实时状态. 前提条件 已 ...

  10. Windows10系统下wsappx占用CPU资源过高?wsappx是什么?如何关闭wsappx进程?

    在Windows10系统开机的时候,wsappx进程占用的CPU资源非常高,导致电脑运行速度缓慢,那么我们如何关闭wsappx进程,让电脑加快运行速度呢?下面就一起来看一下操作的方法吧. [现象] 1 ...