ABAP中字符串处理方法小结(一)详解编程语言

1, 拆分字符串split

语法:

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

代码:

DATA: STRING(60), 
      P1(20) VALUE '', 
      P2(20) VALUE '', 
      P3(20) VALUE '', 
      P4(20) VALUE '', 
      DEL(3) VALUE '***'. 
STRING = ' Part 1 *** Part 2 *** Part 3 *** Part 4 *** Part 5'. 
WRITE STRING. 
SPLIT STRING AT DEL INTO P1 P2 P3 P4. 
WRITE: /'P1:' , P1. 
WRITE: /'P2:' , P2. 
WRITE: /'P3:' , P3. 
WRITE: /'P4:' , P4.

ABAP中字符串处理方法小结(一)详解编程语言

2, 连接字符串Concatenate

语法:

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

代码:

DATA: C1(10)  VALUE  'Sum', 
      C2(3)   VALUE  'mer', 
      C3(5)   VALUE  'holi ', 
      C4(10)  VALUE  'day', 
      C5(30), 
      SEP(3)  VALUE ' - '. 
CONCATENATE C1 C2 C3 C4 INTO C5. 
WRITE C5. 
CONCATENATE C1 C2 C3 C4 INTO C5 SEPARATED BY SEP. 
WRITE / C5.

显示结果:

ABAP中字符串处理方法小结(一)详解编程语言

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

3, 获得字符串长度STRLEN

语法:

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

代码:

DATA: int       TYPE i, 
      word1(20) TYPE c VALUE '12345', 
      word2(20) TYPE c, 
      word3(20) TYPE c VALUE '   4         '. 
int = strlen( word1 ). 
WRITE   int. 
int = strlen( word2 ). 
WRITE / int. 
int = strlen( word3 ). 
WRITE / int.

显示结果:

ABAP中字符串处理方法小结(一)详解编程语言

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

4, 删除字段中空格CONDENSE

语法:

CONDENSE <c> [NO-GAPS].

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

DATA: STRING(25) VALUE ' one  two   three    four', 
      LEN TYPE I. 
LEN = STRLEN( STRING ). 
WRITE: STRING, '!'. 
WRITE: / 'Length: ', LEN. 
CONDENSE STRING. 
LEN = STRLEN( STRING ). 
WRITE: STRING, '!'. 
WRITE: / 'Length: ', LEN. 
CONDENSE STRING NO-GAPS. 
LEN = STRLEN( STRING ). 
WRITE: STRING, '!'. 
WRITE: / 'Length: ', LEN.

显示结果:

ABAP中字符串处理方法小结(一)详解编程语言

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

5, 搜索字符串SEARCH

语法:

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> 开始的词。

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

代码:

DATA STRING(30) VALUE 'This is a little sentence.'. 
WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'. 
ULINE /1(26). 
SEARCH STRING FOR 'X'. 
WRITE: / 'X', SY-SUBRC UNDER 'SY-SUBRC', 
               SY-FDPOS UNDER 'SY-FDPOS' . 
SEARCH STRING FOR 'itt   '. 
WRITE: / 'itt   ', SY-SUBRC UNDER 'SY-SUBRC', 
                   SY-FDPOS UNDER 'SY-FDPOS' . 
SEARCH STRING FOR '.e .'. 
WRITE: / '.e .', SY-SUBRC UNDER 'SY-SUBRC', 
                  SY-FDPOS UNDER 'SY-FDPOS'. 
SEARCH STRING FOR '*e'. 
WRITE: / '*e ', SY-SUBRC UNDER 'SY-SUBRC', 
                SY-FDPOS UNDER 'SY-FDPOS'. 
 
SEARCH STRING FOR 's*'. 
WRITE: / 's* ', SY-SUBRC UNDER 'SY-SUBRC', 
                SY-FDPOS UNDER 'SY-FDPOS'.

显示结果:

ABAP中字符串处理方法小结(一)详解编程语言

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

  • ABBREVIATED

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

  •  STARTING AT <n1>

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

  • ENDING AT <n2>

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

  •  AND MARK

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

代码:

DATA: STRING(30) VALUE 'This is a fast first example.', 
      POS TYPE I, 
      OFF TYPE I. 
WRITE / STRING. 
SEARCH STRING FOR 'ft' ABBREVIATED. 
WRITE: / 'SY-FDPOS:', SY-FDPOS. 
POS = SY-FDPOS + 2. 
SEARCH STRING FOR 'ft' ABBREVIATED STARTING AT POS AND MARK. 
WRITE / STRING. 
WRITE: / 'SY-FDPOS:', SY-FDPOS. 
OFF = POS + SY-FDPOS - 1. 
WRITE: / 'Off:', OFF.

请注意,在 找到单词‘ 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.

ABAP中字符串处理方法小结(一)详解编程语言

6, 覆盖字符字段OVERLAY

语法:

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.

显示结果:

ABAP中字符串处理方法小结(一)详解编程语言

T 与 OVER 的长度都是10。

以上。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/19247.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论