ABAP常用字符串操作收集整理

摘要:
Mlen=5查找模式SEARCHdobjFORpattern[IN{BYTE | CHARACTER}MODE][STARTINGATp1][ENDINGATp2][缩写][ANDMARK]。ifsy-subrc=thenSY FDPOS=返回dobj Aboutpattern中的图案位置:

字符串首字符索引为 0; Character Fields: C,N, D, T, string (CNDT=> CN Data Time)

1. 字符串连接
CONCATENATE dobj1 dobj2 ...  INTO result
            [IN { BYTE | CHARACTER } MODE]
            [SEPARATED BY sep].

2.字符串分隔, split 一个string的部分到一个内表或一系列的变量
SPLIT dobj AT sep INTO
      { {result1 result2 ...} | {TABLE result_tab} }
      [IN {BYTE|CHARACTER} MODE].

3. 字符串查找, 在一个字符串中查找模式串(FIND or SEARCH)
FIND sub_string
  IN SECTION [OFFSET off] [LENGTH len] OF dobj   --> 灰色部分用来缩小目的串被查找的范围
  [ IN { BYTE | CHARACTER } MODE ]
  [ { RESPECTING | IGNORING } CASE ]
  [ MATCH OFFSET moff ] [MATCH LENGTH mlen ].

FIND 'knows'
    IN SECTION OFFSET 5 OF  'Everybody knows this is nowhere'
    MATCH OFFSET moff   "  => moff = 10
    MATCH LENGTH mlen. " => mlen= 5

在字符串dobj中查找pattern
SEARCH dobj FOR pattern  [IN { BYTE | CHARACTER } MODE]
       [STARTING AT p1] [ENDING AT p2]
       [ABBREVIATED]
       [AND MARK].
if sy-subrc = 0. then SY-FDPOS = 返回pattern在dobj中的位置
About pattern:
'pat'   - 忽略尾部空格
'.pat.' -不忽略尾部空格
'*pat' - 以pat结尾
'pat*' - 以pat开始
单词是指: 用 空格 , ; : ? ! () / + =分隔的字串

4. 字符串替换
REPLACE SECTION [OFFSET off] [LENGTH len]
        OF dobj WITH new
        [IN { BYTE | CHARACTER } MODE].

REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF]
        [SUBSTRING] sub_string
        IN [SECTION [OFFSET off] [LENGTH len] OF ] dobj WITH new
        [IN {BYTE|CHARACTER} MODE]
        [{RESPECTING|IGNORING} CASE]
        [REPLACEMENT COUNT rcnt]
        [REPLACEMENT OFFSET roff]
        [REPLACEMENT LENGTH rlen].
eg:
DATA: text1 TYPE string VALUE 'xababx'.
REPLACE 'ab' IN text1 WITH 'xx'. --> xxxabx

5. 去前导0 (Remove leading zero)
SHIFT dobj LEFT DELETING LEADING '0'.
FM : CONVERSION_EXIT_ALPHA_OUTPUT

增前导0 (Add leading zero)
DATA v_s(5).
UNPACK '123' to v_s.  ==> v_s = '00123'
FM: CONVERSION_EXIT_ALPHA_INPUT

SHIFT dobj
     [{BY num PLACES} | {UP TO sub_string}]
     [LEFT|RIGHT] [CIRCULAR]
SHIFT dobj
     {LEFT  DELETING LEADING} | {RIGHT DELETING TRAILING} pattern.
     [IN {BYTE|CHARACTER} MODE].

6. 字符串的长度, 内表的行数
 STRLEN( dobj) 字符串的长度
 LINES( itab ) 内表的行数

7. 删字符串中的空格: CONDENSE text [NO-GAPS].

8. 大小写转换,字符变换
TRANSLATE text {TO {UPPER|LOWER} CASE} | {USING pattern}.
eg: text = `Barbcbdbarb`.
TRANSLATE text USING 'ABBAabba'. =>'Abracadabra'

9. CONVERT
CONVERT DATE dat [TIME tim [DAYLIGHT SAVING TIME dst]]
        INTO TIME STAMP time_stamp TIME ZONE tz.

CONVERT TIME STAMP time_stamp TIME ZONE tz
        INTO [DATE dat] [TIME tim]
        [DAYLIGHT SAVING TIME dst].

CONVERT TEXT text INTO SORTABLE CODE hex.

10. OVERLAY text1 WITH text2 [ONLY pattern].
如果不指定后面的ONLY pattern, text1中的空格会被text2中的对应字符替代
如果指定只有匹配的字符才会被替代,注意大小写敏感

11. 模式匹配
CO / CN contains only or not
CA / NA contains any or not any
CS / NS contain string or not
CP / NP contains pattern or not

NOTE:
a) . CO, NO, CA, NA比较时区分大小写, 并且尾部空格也在比较的范围之内
data: s1(10) value 'aabb'.
if s1 co 'ab' ==> false
if s1 co 'ab ' ==>true
CS, NS, CP, NP不区分大小写和尾部空格

b) .对于CP, NP
*   = \s?
+ = \s
# 换码字符, 用于匹配 *, +这样的字符
      ##
      #*
      #+
      #___   比较结尾空格
      #[a-z] 在CP, NP中强制区分大小写

c) . 比较结束后,如果结果为真,sy-fdpos将给出s2在s1中的偏移量信息

12. 特殊字符
在字符串中加入回车换行或TAB字符,在其他语言可以使用$13$10这样的ASCII码进行插入.但在ABAP中要使用sap的类CL_ABAP_CHAR_UTILITIES. 里面有字符常量:CR_LF,HORIZONTAL_TAB,NEWLINE等等.

13. 字符串位操作
DATA: v_s(10) value 'abcd'.
v_s+0(1) = 'b'.
v_s+2(*) = '12'.
=> v_s = 'bb12'.

免责声明:文章转载自《ABAP常用字符串操作收集整理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇四叉树与八叉树MySql与Java的时间类型下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mssql 通配符

通配符 描述 % 包含零个或更多字符的任意字符串。 WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。 _(下划线) 任何单个字符。 WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。 [ ] 指定范围 (...

Mysql中文检索匹配与正则

今天在用sql模糊查询包含字母d的时候,发现一些不包含此字母的也被查询出来了: SELECT * FROM custom WHERE custom_realname LIKE '%d%' 查询了一下,发现以下说明: (最后修改为: SELECT * FROM custom WHERE custom_realname LIKE BINARY '%d%...

Java基础知识强化之IO流笔记34:OutputStreamWriter(Writer字符流的子类)5种write数据方式

1. OutputStreamWriter (转换流) OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。 同时OutputStreamWriter 也是 字符流Writer(抽象类)一个具体实现子类。 所以我们这个OutputStreamWriter (转换流)也是字符流。 2. ...

Sed命令

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要...

VB 的字符串处理函数

一、InStr 返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。 语法 InStr([start, ]string1, string2[, compare]) start 可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果 start 包含 Null,将发生错误。如果指定了 compar...

Linux串口通信之termios结构体说明

termios结构体中,该结构体一般包括如下的成员:tcflag_t c_iflag;      tcflag_t c_oflag;      tcflag_t c_cflag;      tcflag_t c_lflag;     cc_t     c_cc[NCCS];    其具体意义如下 c_iflag:输入模式标志,控制终端输入方式,具体参数如下...