1, 拆分字符串split
语法:
ABAP
SPLIT AT INTO ... .
1
SPLITATINTO....
代码:
ABAP
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
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'.
WRITESTRING.
SPLITSTRINGATDELINTOP1P2P3P4.
WRITE:/'P1:',P1.
WRITE:/'P2:',P2.
WRITE:/'P3:',P3.
WRITE:/'P4:',P4.
2, 连接字符串Concatenate
语法:
ABAP
CONCATENATE ... INTO [SEPARATED BY ].
1
CONCATENATE...INTO[SEPARATED BY].
代码:
ABAP
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.
1
2
3
4
5
6
7
8
9
10
DATA:C1(10)VALUE'Sum',
C2(3)VALUE'mer',
C3(5)VALUE'holi ',
C4(10)VALUE'day',
C5(30),
SEP(3)VALUE' - '.
CONCATENATEC1C2C3C4INTOC5.
WRITEC5.
CONCATENATEC1C2C3C4INTOC5SEPARATED BYSEP.
WRITE/C5.
显示结果:
在 C1 到 C5 之间,忽略 尾部空格。 分隔符 SEP 保留尾部空格。
3, 获得字符串长度STRLEN
语法:
ABAP
[COMPUTE] = STRLEN( ).
1
[COMPUTE]=STRLEN().
代码:
ABAP
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.
1
2
3
4
5
6
7
8
9
10
DATA:intTYPEi,
word1(20)TYPEcVALUE'12345',
word2(20)TYPEc,
word3(20)TYPEcVALUE' 4 '.
int=strlen(word1).
WRITEint.
int=strlen(word2).
WRITE/int.
int=strlen(word3).
WRITE/int.
显示结果:
请注意,STRLEN 将操作数 作为字符数 据类型处理 ,而不考虑 其实际类型 。不进行转换。
4, 删除字段中空格CONDENSE
语法:
ABAP
CONDENSE [NO-GAPS].
1
CONDENSE[NO-GAPS].
该语句去除字段 中的前导空格并用一个空格替换其它空格序列 。结果是左对齐单词, 每个单词用空格隔开。 如果指定附 加的 NO-GAPS, 则去除所有空格。
ABAP
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
DATA:STRING(25)VALUE' one two three four',
LENTYPEI.
LEN=STRLEN(STRING).
WRITE:STRING,'!'.
WRITE:/'Length: ',LEN.
CONDENSESTRING.
LEN=STRLEN(STRING).
WRITE:STRING,'!'.
WRITE:/'Length: ',LEN.
CONDENSESTRINGNO-GAPS.
LEN=STRLEN(STRING).
WRITE:STRING,'!'.
WRITE:/'Length: ',LEN.
显示结果:
请注意,字段 STRING 的总长度保持不变(注意!的位置),但删除的空格再次出现在右边。
5, 搜索字符串SEARCH
语法:
ABAP
SEARCH FOR .
1
SEARCHFOR.
该语句在字 段 中搜索 中的字符串 。如果成功 ,则将 SY-SUBRC 的返回代码 值设置为0,并将 SY-FDPOS 设置为字段 中该字符串 的偏移量。
否则将 SY-SUBRC 设置为4。
搜索串 可为下列格 式之一:
目 的
---------------------------------
搜 索 (任何字符顺序)。忽略尾部空格。
.. 搜 索 ,但是不忽略尾部空格 。
* 搜 索以 结尾的词。
* 搜 索以 开始的词。
单词之间用 空格、逗号 、句号、分 号、冒号、 问号、叹号 、括号、斜 杠、加号和等号等分隔 。
代码:
ABAP
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'.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DATASTRING(30)VALUE'This is a little sentence.'.
WRITE:/'Searched','SY-SUBRC','SY-FDPOS'.
ULINE/1(26).
SEARCHSTRINGFOR'X'.
WRITE:/'X',SY-SUBRCUNDER'SY-SUBRC',
SY-FDPOSUNDER'SY-FDPOS'.
SEARCHSTRINGFOR'itt '.
WRITE:/'itt ',SY-SUBRCUNDER'SY-SUBRC',
SY-FDPOSUNDER'SY-FDPOS'.
SEARCHSTRINGFOR'.e .'.
WRITE:/'.e .',SY-SUBRCUNDER'SY-SUBRC',
SY-FDPOSUNDER'SY-FDPOS'.
SEARCHSTRINGFOR'*e'.
WRITE:/'*e ',SY-SUBRCUNDER'SY-SUBRC',
SY-FDPOSUNDER'SY-FDPOS'.
SEARCHSTRINGFOR's*'.
WRITE:/'s* ',SY-SUBRCUNDER'SY-SUBRC',
SY-FDPOSUNDER'SY-FDPOS'.
显示结果:
搜索字符字 段 的各种选项 () 如下:
ABBREVIATED
在字段 中搜索包含 中的单词, 其中字符可以被其它字符隔开,但是单词和字符串的第一个字母必须相同 。
STARTING AT
在字段 中搜索从 开始的 。结果 SY-FDPOS 参照相对于 的偏移量而 不是字段的 开始。
ENDING AT
在字段 搜索 直到位置 。
AND MARK
如果找到搜索串,则将搜索串中的所有字符(使用 ABBREVIATED 时的所有字 符)转换为大写形式。
代码:
ABAP
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.
1
2
3
4
5
6
7
8
9
10
11
12
DATA:STRING(30)VALUE'This is a fast first example.',
POSTYPEI,
OFFTYPEI.
WRITE/STRING.
SEARCHSTRINGFOR'ft'ABBREVIATED.
WRITE:/'SY-FDPOS:',SY-FDPOS.
POS=SY-FDPOS+2.
SEARCHSTRINGFOR'ft'ABBREVIATEDSTARTING ATPOSANDMARK.
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' 如何判断字符串中含有 '-'?
并且将 '-' 后面的字符舍去?
ABAP
DATA string(20) VALUE 'Aaa-Bbb'.
SEARCH string FOR '-'.
IF sy-subrc = 0.
string = string+0(sy-fdpos).
WRITE string.
ENDIF.
1
2
3
4
5
6
7
DATAstring(20)VALUE'Aaa-Bbb'.
SEARCHstringFOR'-'.
IFsy-subrc=0.
string=string+0(sy-fdpos).
WRITEstring.
ENDIF.
6, 覆盖字符字段OVERLAY
语法:
ABAP
OVERLAY WITH [ONLY ].
1
OVERLAYWITH[ONLY].
该语句用字符串 中相应位置上的内容“覆盖” 字段 中包含 中字母的所有位置。 保持不变。
如果省略 ONLY , 则覆盖字段 中所有包含空格的位置 ,如果没有空格,则不会被“覆盖”。 如果至少要替换 中的一个字 符,则将 SY-SUBRC 设置为 0。对于所有其它情况 ,将SY-SUBRC 设置为 4。
如果 比 长,则只覆 盖 中的长度。
解释:
注意是"覆盖"不是”替换“!!!!!!!!!
ABAP
OVER '1 2 3' WITH '456 '.
1
OVER'1 2 3'WITH'456 '.
结果为:152 3。
ABAP
OVER '1 2 3' WITH '456' only '12'.
1
OVER'1 2 3'WITH'456'only'12'.
结果为:4 6 3 。
ABAP
OVER '123' WITH '456'.
1
OVER'123'WITH'456'.
结果为:123。(没有空格)
ABAP
OVER '1 2 3 ' WITH '456 ' only '13' .
1
OVER'1 2 3 'WITH'456 'only'13'.
结果为:4 2 。
代码:
ABAP
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.
1
2
3
4
5
6
7
8
9
10
11
12
DATA:T(10)VALUE'a c e g i ',
STRINGLIKET,
OVER(10)VALUE'ABCDEFGHIJ',
STR(2)VALUE'ai'.
STRING=T.
WRITESTRING.
WRITE/OVER.
OVERLAYSTRINGWITHOVER.
WRITE/STRING.
STRING=T.
OVERLAYSTRINGWITHOVERONLYSTR.
WRITE/STRING.
显示结果:
T 与 OVER 的长度都是10。
以上。