ABAP 字符串连处理

ABAP 字符串连处理

1.拆分字符串

语法:

SPLIT <c> AT <del> INTO <c1> ... <cn>.

 

 1 DATA: STRING(60),

 2       P1(20) VALUE '',

 3       P2(20) VALUE '',

 4       P3(20) VALUE '',

 5       P4(20) VALUE '',

 6       DEL(3) VALUE '***'.

 7 STRING = ' Part 1 *** Part 2 *** Part 3 *** Part 4 *** Part 5'.

 8 WRITE STRING.

 9 SPLIT STRING AT DEL INTO P1 P2 P3 P4.

10 WRITE: /'P1:' , P1.

11 WRITE: /'P2:' , P2.

12 WRITE: /'P3:' , P3.

13 WRITE: /'P4:' , P4.

 

该过程的输 出如下:  

Part 1 *** Part 2 *** Part 3 *** Part 4 *** Part 5

P1:Part 1  

P2:Part 2  

P3:Part 3  

P4:Part 4 *** Part 5

2.连接字符串

语法:

CONCATENATE <c1> ... <cn> INTO <c> [SEPARATED BY <s>].

 

 1 DATA: C1(10)  VALUE  'Sum',

 2       C2(3)   VALUE  'mer',

 3       C3(5)   VALUE  'holi ',

 4       C4(10)  VALUE  'day',

 5       C5(30),

 6       SEP(3)  VALUE ' - '.

 7 CONCATENATE C1 C2 C3 C4 INTO C5.

 8 WRITE C5.

 9 CONCATENATE C1 C2 C3 C4 INTO C5 SEPARATED BY SEP.

10 WRITE / C5.

 

该过程的输 出如下:

Summerholiday

Sum - mer - holi - day

C1 C5 之间,忽略 尾部空格。 分隔符 SEP 保留尾部空格。

3.获得字符串长度

语法:

[COMPUTE] <n> = STRLEN( <c> ).

 

 1 DATA: INT TYPE I,

 2       WORD1(20) VALUE '12345'.

 3       WORD2(20).

 4       WORD3(20) VALUE '   4         '.

 5 INT = STRLEN( WORD1 ).

 6 WRITE   INT.

 7 INT = STRLEN( WORD2 ).

 8 WRITE / INT.

 9 INT = STRLEN( WORD3 ).

10 WRITE / INT.

 

结果分别是 50 4

WORD3(20) VALUE '   4         '. 结果为 4

请注意,STRLEN 将操作数 <c> 作为字符数 据类型处理 ,而不考虑 其实际类型 。不进行转换。

4.压缩字段内容

语法:

CONDENSE <c> [NO-GAPS].

该语句去除字段 <c> 中的前导空格并用一个空格替换其它空格序列 。结果是左对齐单词, 每个单词用空格隔开。 如果指定附 加的 NO-GAPS 则去除所有空格。

 

 1 DATA: STRING(25) VALUE ' one  two   three    four',

 2       LEN TYPE I.

 3 LEN = STRLEN( STRING ).

 4 WRITE: STRING, '!'.

 5 WRITE: / 'Length: ', LEN.

 6 CONDENSE STRING.

 7 LEN = STRLEN( STRING ).

 8 WRITE: STRING, '!'.

 9 WRITE: / 'Length: ', LEN.

10 CONDENSE STRING NO-GAPS.

11 LEN = STRLEN( STRING ).

12 WRITE: STRING, '!'.

13 WRITE: / 'Length: ', LEN.

 

该过程的输出如下:  

one  two   three    four !

Length:          25

one two three four       !

Length:          18

onetwothreefour          !

Length:          15

请注意,字段 STRING 的总长度保持不变(注意!的位置),但删除的空格再次出现在右边。

5.搜索字符串

语法:

SEARCH <c> FOR <str> <options>.

该语句在字 <c> 中搜索<str> 中的字符串 。如果成功 ,则将 SY-SUBRC 的返回代码 值设置为0,并将 SY-FDPOS 设置为字段 <c> 中该字符串 的偏移量。

否则将 SY-SUBRC 设置为4

搜索串 <str> 可为下列格 式之一:

<str>                      

---------------------------------

<pattern>                 <pattern>(任何字符顺序)。忽略尾部空格。  

.<pattern>.               <pattern> ,但是不忽略尾部空格

*<pattern>               索以 <pattern> 结尾的词。  

<pattern>*               索以 <pattern> 开始的词。  

单词之间用 空格、逗号 、句号、分 号、冒号、 问号、叹号 、括号、斜 杠、加号和等号等分隔

 

 1 DATA STRING(30) VALUE 'This is a little sentence.'.

 2 WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'.

 3 ULINE /1(26).

 4 SEARCH STRING FOR 'X'.

 5 WRITE: / 'X', SY-SUBRC UNDER 'SY-SUBRC',

 6                SY-FDPOS UNDER 'SY-FDPOS'

 7 SEARCH STRING FOR 'itt   '.

 8 WRITE: / 'itt   ', SY-SUBRC UNDER 'SY-SUBRC',

 9                    SY-FDPOS UNDER 'SY-FDPOS'

10 SEARCH STRING FOR '.e .'.

11 WRITE: / '.e .', SY-SUBRC UNDER 'SY-SUBRC',

12                   SY-FDPOS UNDER 'SY-FDPOS'.

13 SEARCH STRING FOR '*e'.

14 WRITE: / '*e ', SY-SUBRC UNDER 'SY-SUBRC',

15                 SY-FDPOS UNDER 'SY-FDPOS'.

16

17 SEARCH STRING FOR 's*'.

18 WRITE: / 's* ', SY-SUBRC UNDER 'SY-SUBRC',

19                 SY-FDPOS UNDER 'SY-FDPOS'.

 

该过程的输 出如下:

SEARCHED   SY-SUBRC   SY-FDPOS

X                   4               0

itt                  0               11

.e .            0            15

*e             0            10

s*                 0                17

搜索字符字 <c> 的各种选项 <options> 如下:

  • ABBREVIATED

在字段 <c> 中搜索包含 <str> 中的单词, 其中字符可以被其它字符隔开,但是单词和字符串的第一个字母必须相同

  •  STARTING AT <n1>

在字段 <c> 中搜索从 <n1> 开始的 <str> 。结果 SY-FDPOS 参照相对于 <n1> 的偏移量而 不是字段的 开始。

  • ENDING AT <n2>

在字段 <c> 搜索 <str> 直到位置 <n2>

  •  AND MARK

如果找到搜索串,则将搜索串中的所有字符(使用 ABBREVIATED 时的所有字 符)转换为大写形式。

 

 1 DATA: STRING(30) VALUE 'This is a fast first example.',

 2       POS TYPE I,

 3       OFF TYPE I.

 4 WRITE / STRING.

 5 SEARCH STRING FOR 'ft' ABBREVIATED.

 6 WRITE: / 'SY-FDPOS:', SY-FDPOS.

 7 POS = SY-FDPOS + 2.

 8 SEARCH STRING FOR 'ft' ABBREVIATED STARTING AT POS AND MARK.

 9 WRITE / STRING.

10 WRITE: / 'SY-FDPOS:', SY-FDPOS.

11 OFF = POS + SY-FDPOS -1.

12 WRITE: / 'Off:', OFF.

 

该过程的输出如下:

This is a fast first example.

SY-FDPOS:    10

This is a fast FIRST example.

SY-FDPOS:    4

Off:        15

请注意,在 找到单词‘ fast’ 之后,为了 查找包含‘ ft’的第 二个单词, 必须在偏移 SY-FDPOS 上加2,然 后从位置 POS 开始查找。 否则,会再 次找到单词 ‘fast’ 。要获得‘ first’ 相对于字段 STRING 开始的偏移 量,从 POS SY-FDPOS 计算。

字符串: 'Aaa-Bbb'  如何判断字符串中含有 '-'

并且将 '-' 后面的字符舍去?

 

DATA string(20) VALUE 'Aaa-Bbb'.

 

SEARCH string FOR '-'.

IF sy-subrc = 0

    string = string+0(sy-fdpos). 

    WRITE string.

ENDIF.

 

 

 

 

6.覆盖字符字段

语法:

OVERLAY <c1> WITH <c2> [ONLY <str>].

该语句用字符串 <c2> 中相应位置上的内容覆盖字段 <c1> 中包含 <str> 中字母的所有位置。<c2> 保持不变。

如果省略 ONLY <str> 则覆盖字段 <c1> 中所有包含空格的位置 ,如果没有空格,则<c1>不会被覆盖 如果至少要替换 <c1> 中的一个字 符,则将 SY-SUBRC 设置为 0。对于所有其它情况 ,将SY-SUBRC 设置为 4

如果 <c1> <c2> 长,则只覆 <c2> 中的长度。

解释:

注意是"覆盖"不是替换!!!!!!!!!

OVER '1 2 3' WITH '456   '.

结果为:152 3

OVER '1 2 3' WITH '456' only '12'.

结果为:4 6 3 

OVER '123' WITH '456'.

结果为:123。(没有空格)

OVER '1 2 3 ' WITH '456   ' only '13' .

结果为:4 2  

 

DATA: T(10) VALUE 'a c e g i ',

      STRING LIKE T,

      OVER(10) VALUE 'ABCDEFGHIJ',

      STR(2) VALUE 'ai'.

STRING = T.

WRITE STRING.

WRITE / OVER.

OVERLAY STRING WITH OVER.

WRITE / STRING.

STRING = T.

OVERLAY STRING WITH OVER ONLY STR.

WRITE / STRING.

 

该过程的输 出如下:

a c e g i

ABCDEFGHIJ

aBcDeFgHiJ

A c e g I

T OVER 的长度都是10

7.替换字段内容

语法:

REPLACE <str1> WITH <str2> INTO <c> [LENGTH <l>].

  ABAP/4 搜索字段 <c> 中模式 <str1> <l> 个位置第一 次出现的地 方。如果未 指定长度, 按全长度搜 索模式 <str1> 然后,语句 将模式 <str1> 在字段 <c> 中第一次出 现的位置用 字符串 <str2> 替换。如果 指定长度<l> 则只替换模 式的相关部 分。 如果将系统 字段 SY-SUBRC 的返回代码 设置为0 则说明在 <c> 中找到 <str1> 且已用<str2> 替换。非 0 的返回代码 值意味着未 替换。

<str1> <str2> <len> 可为变量。

 

 1 DATA: T(10) VALUE 'abcdefghij',

 2       STRING LIKE T,

 3       STR1(4) VALUE 'cdef',

 4       STR2(4) VALUE 'klmn',

 5       STR3(2) VALUE 'kl',

 6       STR4(6) VALUE 'klmnop',

 7       LEN TYPE I VALUE 2.

 8 STRING = T.

 9 WRITE STRING.

10 REPLACE STR1 WITH STR2 INTO STRING.

11 WRITE / STRING.

12 STRING = T.

13 REPLACE STR1 WITH STR2 INTO STRING LENGTH LEN.

14 WRITE / STRING.

15 STRING = T.

16 REPLACE STR1 WITH STR3 INTO STRING.

17 WRITE / STRING.

18 STRING = T.

19 REPLACE STR1 WITH STR4 INTO STRING.

20 WRITE / STRING.

 

该过程的输 出如下:

abcdefghij

abklmnghij

abklmnefgh

abklghij

abklmnopgh

请注意,在最后一行中字段 STRING 是如何在右 边截断的。长度为 4 的搜索模式 ‘cdef’ 用长度为6 ‘klmnop’ 替换。然后 ,填充字段 STRING 的剩余部分直到字段结尾。

8.转换大/小写并替换字符

可以将字母 转换大/ 写或使用替 换规则。 要转换大/ 写,请使用 TRANSLATE 语句,用法 如下:

语法

TRANSLATE <c> TO UPPER CASE. TRANSLATE <c> TO LOWER CASE.

这些语句将 字段 <c> 中的所有小 写字母转换 成大写或反 之。

使用替换规 则时,请使 用以下语法

语法

TRANSLATE <c> USING <r>.

该语句根据 字段 <r> 中存储的替 换规则替换 字段 <c> 的所有字符 <r> 包含成对字 母,其中每 对的第一个 字母用第二 个字母替换 <r> 可为变量。 有关包含更 复杂替换规 则的 TRANSLATE 语句的更多 变体,参见 关键字文档

 

 1 DATA: T(10) VALUE 'AbCdEfGhIj',

 2       STRING LIKE T,

 3       RULE(20) VALUE 'AxbXCydYEzfZ'.

 4 STRING = T.

 5 WRITE STRING.

 6 TRANSLATE STRING TO UPPER CASE.

 7 WRITE / STRING.

 8 STRING = T.

 9 TRANSLATE STRING TO LOWER CASE.

10 WRITE / STRING.

11 STRING = T.

12 TRANSLATE STRING USING RULE.

13 WRITE / STRING.

 

该过程的输 出如下:

AbCdEfGhIj

ABCDEFGHIJ

abcdefghij

xXyYzZGhIj

9.转换为可排序格式

可以将字符 字段转换为 可按字母顺 序排列的格 式:

语法

CONVERT TEXT <c> INTO SORTABLE CODE <sc>.

该语句为字 符字段 <c> 填充可排序 目标字段 <sc> 字段 <c> 必须是类型 C且字段 <sc> 必须是类型 X ,最小长度 <c> 长度的16 该语句目的 是为字符字 <c>

创建相关字 <sc> 作为 <c> 的按字母顺 序排列的排 序关键字。

如果对未转 换的字符字 段进行排序 ,则系统创 建与各字母 的特定平台 内部编码相 对应的顺序 。在对目标 字段进行排 序之后,转 CONVERT TEXT 按这样的方 式创建目标

字段,相应 的字符字段 顺序按字母 排序。例如 ,在德语中 ,顺序为‘ Miller Moller M?ller Muller’ ,而不是‘ Miller Moller Muller M?ller’

转换方法依 赖于运行 ABAP/4 程序的文本 环境。文本 环境在用户 主记录中定 义。例外的 是可以使用 如下语句, 在程序中设 置文本环境

语法

SET LOCALE LANGUAGE <lg> [COUNTRY <cy>] [MODIFIER <m>].

该语句根据 语言 <lg> 设置文本环 境。对于选 COUNTRY 只要特定国 家语言不同 ,就可以在

语言以外指 定国家。对 于选项 MODIFIER 只要一个国 家内语言不 同,就可以 指定另一个 标识符,例 如,排序顺 序在电话簿 和词典之间 不同。 字段 <lg> <cy>

<m> 必须是类型 C 且长度必须 与表 TCP0C 的关键字段 长度相等。 TCP0C 是一个表格 ,从中进行 平台相关的 文本环境维 护。在语句 SET LOCALE 期间,系统 根据

TCP0C 的条目设置 文本环境。 除了内部传 送的平台特 性之外,用 SET 语句指定表 关键字。如 <lg> 等于 SPACE ,则系统根 据用户主记 录设置文本 环境。如果 对于指

定的 关键字在表 中无条目, 则系统将产 生运行错误

文本环境影 ABAP/4 中依赖于字 符集的所有 操作。

10.移动字段内容

 按给定位置 数移动字段串

要按给定位 置数移动字 段内容,请 使用 SHIFT 语句,用法 如下:

语法

SHIFT <c> [BY <n> PLACES] [<mode>].

该语句将字 <c> 移动 <n> 个位置。如 果省略 BY <n> PLACES 则将 <n> 解释为一个 位置。如果 <n> 0 或负值,则 <c> 保持不变。 如果 <n> 超过 <c> 长度,则 <c> 用空格填充 <n> 可为变量。 对不同(<mode> 选项,可以 按以下方式 移动字段 <c>

  •  LEFT:向左移动 <n> 位置,右边 <n> 个空格填充 (默认设置 )。
  •  RIGHT:向右移动 <n> 位置,左边 <n> 个空格填充
  •  CIRCULAR:向左移动 <n> 位置,以便 左边 <n> 个字符出现 在右边。

 

 1 DATA: T(10) VALUE 'abcdefghij',

 2       STRING LIKE T.

 3 STRING = T.

 4 WRITE STRING.

 5 SHIFT STRING.

 6 WRITE / STRING.

 7 STRING = T.

 8 SHIFT STRING BY 3 PLACES LEFT.

 9 WRITE / STRING.

10 STRING = T.

11 SHIFT STRING BY 3 PLACES RIGHT.

12 WRITE / STRING.

13 STRING = T.

14 SHIFT STRING BY 3 PLACES CIRCULAR.

15 WRITE / STRING.

 

输出为:

abcdefghij
bcdefghij
defghij
   abcdefg
defghijabc 

移动字段串 到给定串

要移动字段 内容以到给 定串,则使 SHIFT 语句,

语法:

SHIFT <c> UP TO <str> <mode>.

ABAP/4 查找 <c> 字段内容直 到找到字符 <str> 并将字段 <c> 移动到字段 边缘。 <mode> 选项与按给定位置数移动字段串中所 述相同。<str> 可为变量。 如果 <c> 中找不到 <str> 则将 SY-SUBRC 设置为 4 并且不移动 <c>。否 则,将 SY-SUBRC 设置为0

 

 

 1 DATA: T(10) VALUE 'abcdefghij',

 2       STRING LIKE T,

 3       STR(2) VALUE 'ef'.

 4 STRING = T.

 5 WRITE STRING.

 6 SHIFT STRING UP TO STR.

 7 WRITE / STRING.

 8 STRING = T.

 9 SHIFT STRING UP TO STR LEFT.

10 WRITE / STRING.

11 STRING = T.

12 SHIFT STRING  UP TO STR RIGHT.

13 WRITE / STRING.

14 STRING = T.

15 SHIFT STRING  UP TO STR CIRCULAR.

16 WRITE / STRING.

 

输出如下:

abcdefghij
efghij
efghij
    abcdef
efghijabcd

根据第一个或最后一个 字符移动字段串

假设第一个或最后一个 字符符合一定条件,则 可用 SHIFT 语句将字段 向左或向右 移动。为此 ,请使用以 下语法:

语法

SHIFT <c> LEFT  DELETING LEADING  <str>.

SHIFT <c> RIGHT DELETING TRAILING <str>.

假设左边的 第一个字符 或右边的最 后一个字符 出现在 <str> 中,该语句 将字段 <c> 向左或向右 移动。字段 右边或左边 用空格填充 <str> 可为变量。

 

 1 DATA: T(14) VALUE '    abcdefghij',

 2       STRING LIKE T,

 3       STR(6) VALUE 'ghijkl'.

 4 STRING = T.

 5 WRITE STRING.

 6 SHIFT STRING LEFT DELETING LEADING SPACE.

 7 WRITE / STRING.

 8 STRING = T.

 9 SHIFT STRING RIGHT DELETING TRAILING STR.

10 WRITE / STRING.

 

该过程输出 如下:

    abcdefghij
abcdefghij
        abcdef

11.MOVE TO 分配字符串部分

MOVE 语句的以下 变体只使用 类型 C 字段:

语法:

MOVE <c1> TO <c2> PERCENTAGE <p> [RIGHT].

将字符字段 <c1> 的左边,百分比 <p>的部分复制到 <c2>,结果为左对齐。  如果用 RIGHT 选项指定, 则为右对齐 )。<p> 值可为 0 100 之间的任何数。将要从 <C1> 复制的长度 取整为下一个整数。 如果语句中 某一参数不是类型 C,则忽略参数 PERCENTAGE 

 

1 DATA: C1(10) VALUE 'ABCDEFGHIJ',

2       C2(10).

3 MOVE C1 TO C2 PERCENTAGE 40.

4 WRITE C2.

5 MOVE C1 TO C2 PERCENTAGE 40 RIGHT.

6 WRITE / C2.

 

该过程的输 出如下:

ABCD

           ABCD

12.比较字符串

要比较字符 串(类型 C)和数字 文本(类型 N),可以 在逻辑表达 式中使用下 列运算符。

<运算符>         

CO                   仅包含

CN                   不仅包含

CA                   包含任何

NA                   不包含任何

CS                   包含字符串

NS                   不包含字符串  

CP                    包含模式

NP                    不包含模式

因为除类型 N C 外,系统不 能执行任何 其它类型转 换,所以, 在进行包含 这些运算之 一的比较时 ,操作数应 该是类型 N C 运算符的功 能如下:

CO (仅包含)

如果 <f1> 仅包含 <f2> 中的字符, 则逻辑表达 <f1> CO <f2> 为真。该比 较区分大小 写,并包括 尾部空格。 如果比较结 果为真,则 系统字段 SY-FDPOS 包括 <f1> 的长度。如 果为假,则 SY-FDPOS 包含 <f1> 中第一个未 <f2> 内出现的字 符的偏移量

CN (不仅包含 )

如果 <f1> 还包含 <f2> 之外的其他 字符,则逻 辑表达式 <f1> CN <f2> 为真。该比 较区分大小 写,并包括 尾部空格。 如果比较结 果为真,则 系统字段 SY-FDPOS 包含 <f1> 中第一个未 同时在 <f2> 中出现的字 符的偏移量 。如果为假 SY-FDPOS 包含 <f1> 的长度。

CA (包含任何 )

如果 <f1> 至少包含 <f2> 的一个字符 ,则逻辑表 达式 <f1> CA <f2> 为真。该比 较区分大小 写。如果比 较结果为真 ,则系统字 SY-FDPOS 包含 <f1> 中第一个也 <f2> 中出现的字 符的偏移量 。如果为假 SY-FDPOS 包含 <f1> 的长度。

NA (不包含任 )

如果 <f1> 不包含 <f2> 的任何字符 ,则逻辑表 达式 <f1> NA <f2> 为真。该比 较区分大小 写。如果比 较结果为真 ,则系统字 SY-FDPOS 包含 <f1> 长度。如果 为假,则 SY-FDPOS 包含 <f1> 中在 <f2> 内出现的第 一个字符的 偏移量。

CS (包含字符 )

如果 <f1> 包含字符串 <f2> 则逻辑表达 <f1> CS <f2> 为真。忽略 尾部空格并 且比较不区 分大小写。 如果比较结 果为真,则 系统字段 SY-FDPOS 包含 <f2> <f1> 中的偏移量 。如果为假 SY-FDPOS 包含 <f1> 的长度。

NS (不包含字 符串)

如果 <f1> 不包含字符 <f2> 则逻辑表达 <f1> NS <f2> 为真。忽略 尾部空格且 比较不区分 大小写。如 果比较为真 ,系统字段 SY-FDPOS 包含 <f1> 的长度。如 果为假,系 统字段 SY-FDPOS 包含 <f2> <f1> 中的偏移量

CP (包含模式 )

如果 <f1> 包含模式 <f2> 则逻辑表达 <f1> CP <f2> 为真。如果 <f2> 属于类型 C,则可以 <f2> 中使用下列 通配符:

  •  * 用于任何字 符串
  •  + 用于任何单 个字符

忽略尾部空 格且比较不 区分大小写 。如果比较 结果为真, 系统字段 SY-FDPOS 包含 <f2> <f1> 中的偏移量 。如果为假 SY-FDPOS 包含 <f1> 的长度。 如果要对 <f2> 中的特殊字 符进行比较 ,请将换码 字符 # 放到其前面 。可以使用 换码字符 # 指定

  • 大小写字
  • 通配符 "*"( #*)
  • 通配符 "+" (输入 #+)
  • 换码符号 本身 (输入 ##)
  • 字符串结 尾的空格 (输入 #___)

NP (不包含模 )

如果 <f1> 不包含模式 <f2> 则逻辑表达 <f1> NP <f2> 为真。在<f2> ,可以使用 CP 相同的通配 符和换码字 符。 忽略尾部空 格且比较不 区分大小写 。如果比较 结果为真, 则系统字段 SY-FDPOS 包含 <f1>. 的长度,如 果为假,SY-FDPOS 包含 <f2> <f1> 中的偏移量

 

DATA: F1(5) TYPE C VALUE <f1>,

          F2(5) TYPE C VALUE <f2>.

IF F1 <operator> F2.

   WRITE: /  'Comparison true, SY-FDPOS=', SY-FDPOS.

ELSE.

   WRITE: /  'Comparison false, SY-FDPOS=', SY-FDPOS.

ENDIF.

 

下表列出该 程序的执行 结果,取决 于所用的运 算符和 F1 / F2 字段。

<f1>    <operator>    <f2>      Result     SY-FDPOS 
                                              
'BD   '      CO             'ABCD '     
          5 
                                              
'BD   '      CO      
  'ABCDE'                2 
                                              
'ABC12'    CN      
  'ABCD '                3  
                                              
'ABABC'    CN      
  'ABCD '                5 
                                              
'ABcde'     CA      
  'Bd   '                   1 
                                              
'ABcde'     CA      
  'bD   '                   5 
                                              
'ABAB '     NA      
  'AB   '                   0 
                                              
'ababa'     NA      
  'AB   '                   5 
                                              
'ABcde'     CS      
  'bC   '                   1 
                                              
'ABcde'     CS      
  'ce   '                    5 
                                              
'ABcde'     NS      
  'bC   '                    1 
                                              
'ABcde'     NS      
  'ce   '                    5 
                                              
'ABcde'     CP      
  '*b*'                     1 
                                              
'ABcde'     CP      
  '*#b*'                   5 
                                              
'ABcde'     NP      
  '*b*'                     1 
                                              
'ABcde'     NP      
  '*#b*'                   5

 

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 = 返回patterndobj中的位置 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将给出s2s1中的偏移量信息

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'.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值