SPLIT拆分字符串
语法:SPLIT <str> AT <c> INTO <p1> <p2> <p3>.
将str(字符串)通过c(字符串)拆分为p1,p2,p3(多个字符串)
DATA: STR TYPE STRING,
C TYPE STRING VALUE '*',
C1 TYPE STRING VALUE '',
C2 TYPE STRING VALUE '',
C3 TYPE STRING VALUE ''.
STR = 'A*B*C*D'.
WRITE STR. "A*B*C*D
SPLIT STR AT C INTO C1 C2 C3.
WRITE:/'C1:',C1. "P1:A
WRITE:/'C2:',C2. "P2:B
WRITE:/'C3:',C3. "P3:C*D
SHIFT移动字段内容
语法:SHIFT <c> [BY <n> PLACES] [<mode>].
将字段<c>移动<n>个位置,如果 <n> 是 0 或负值,则 <c> 保持不变。 如果 <n> 超过 <c> 长度,则 <c> 用空格填充 。<n> 可为变量。
[<mode>]代表方位:
- LEFT:向左移动 <n> 位置,右边 用 <n> 个空格填充 (默认设置 )。
- RIGHT:向右移动 <n> 位置,左边 用 <n> 个空格填充 。
- CIRCULAR:向左移动 <n> 位置,以便 左边 <n> 个字符出现 在右边。
DATA: str(10) TYPE c VALUE 'abcdefghij',
c LIKE str.
c = str.
WRITE /:c. "abcdefghij
SHIFT c. "bcdefghij
WRITE /:c.
c = str.
WRITE /:c.
SHIFT c BY 3 PLACES. "defghij 后面有三个空格
WRITE /:c.
c = str.
WRITE /:c.
SHIFT c BY 3 PLACES LEFT. "defghij 后面有三个空格
WRITE /:c.
c = str.
WRITE /:c.
SHIFT c BY 3 PLACES RIGHT. " defghij
WRITE /:c.
c = str.
WRITE /:c.
SHIFT c BY 3 PLACES CIRCULAR. "defghijabc
WRITE /:c.
移动字符串中的某字段
语法:SHIFT <str> UP TO <c> <mode>.
在<str>字符串中查找<c>字段,找到了便将<c>字段移动到字符串<str>的边缘,<mode>和上文一致,<str>中找不到<c>字段则将 SY-SUBRC 设置为 4 并且不移动 <c>。
DATA: string(10) TYPE c VALUE 'abcdefghij',
str LIKE string,
c(2) TYPE c VALUE 'cd'.
str = string.
WRITE /:str. "abcdefghij
SHIFT str UP TO c. "cdefghij
WRITE /:str.
str = string.
WRITE /:str.
SHIFT str UP TO c LEFT. "cdefghij
WRITE /:str.
str = string.
WRITE /:str.
SHIFT str UP TO c RIGHT. " abcd
WRITE /:str.
str = string.
WRITE /:str.
SHIFT str UP TO c CIRCULAR. "cdefghijab
WRITE /:str.
根据第一个或最后一个字符移动字段串
语法:SHIFT <str> LEFT[RIGHT] DELETING LEADING <c>.
假设<str>左边的第一个字符或右边的最后一个字符<c>出现在中,该语句将字段 <str>向左或向右移动。字段右边或左边 用空格填充 。<str> 可为变量。
DATA: string(15) TYPE c VALUE ' abcdefghij',
str LIKE string,
c(4) TYPE c VALUE 'ghij'.
str = string.
WRITE /:str. " abcdefghij
SHIFT str LEFT DELETING LEADING space. "abcdefghij
WRITE /:str.
str = string.
WRITE /:str.
SHIFT str LEFT DELETING LEADING c. " abcdefghij
WRITE /:str.
str = string.
WRITE /:str.
SHIFT str RIGHT DELETING TRAILING space. " abcdefghij
WRITE /:str.
str = string.
WRITE /:str.
SHIFT str RIGHT DELETING TRAILING c. " abcdef
WRITE /:str.
CONDENSE压缩字段内容
语法:CONDENSE <str> [NO-GAPS].
该语句去除字段中的前导空格并用一个空格替换其它空格序列(有多个空格的会剩一个空格)。 如果指定附 加的 NO-GAPS, 则去除所有空格。
DATA: str(15) TYPE c VALUE ' a b c'.
WRITE /:str. " a b c
CONDENSE str.
WRITE /:str. "a b c
str = ' a b c'.
CONDENSE str NO-GAPS.
WRITE /:str. "abc
CONCATENATE连接字符串
语法:CONCATENATE <c1>...<cn> INTO <c> [SEPARATED BY <s>].
将c1>...<cn>等字段连接到<c>中,<s>为分隔符
DATA: c(30) TYPE c,
c1(5) TYPE c VALUE 'aaaaa',
c2(5) TYPE c VALUE 'bbbbb',
c3(5) TYPE c VALUE 'ccccc',
s1(3) TYPE c VALUE ' - ',
s2(1) TYPE c VALUE '-'.
CONCATENATE c1 c2 c3 INTO c. "aaaaabbbbbccccc
WRITE /:c.
CONCATENATE c1 c2 c3 INTO c SEPARATED BY s1. "aaaaa - bbbbb - ccccc
WRITE /:c.
CONCATENATE c1 c2 c3 INTO c SEPARATED BY s2. "aaaaa-bbbbb-ccccc
WRITE /:c.
STRLEN、XSTRLEN获取字符串长度
语法:<n> = STRLEN(<c>)
STRLEN 将操作数 <c> 作为字符数 据类型处理 ,而不考虑其实际类型 。
DATA: int TYPE i,
c1(20) TYPE c VALUE '12345',
c2(20) TYPE c VALUE ' 3 ',
c3(20) TYPE c.
int = strlen( c1 ). "5
WRITE / int.
int = strlen( c2 ). "3
WRITE / int.
int = strlen( c3 ). "0
WRITE / int.
SEARCH搜索字符串
语法:SEARCH <str> FOR <c> <options>.
<pattern> 搜索 <pattern>(任何字符顺序)。忽略尾部空格。
.<pattern>. 搜索 <pattern> ,但是不忽略尾部空格 。
*<pattern> 搜索以 <pattern> 结尾的词。
<pattern>* 搜索以 <pattern> 开始的词。
该语句在字段<str>中搜索<c>中的字符串,如果成功 ,则将 SY-SUBRC 的返回代码值设置为0,并将 SY-FDPOS设置为字段<c>中该字符串的偏移量。否则将 SY-SUBRC 设置为4。
DATA: str(30) TYPE c VALUE 'This is a test.'.
SEARCH str FOR 'X'.
WRITE : sy-subrc,sy-fdpos. "4,0
SKIP.
SEARCH str FOR 'i'.
WRITE : sy-subrc,sy-fdpos. "0,2
SKIP.
SEARCH str FOR '.a.'.
WRITE : sy-subrc,sy-fdpos. "0,8
SKIP.
SEARCH str FOR '*t'.
WRITE : sy-subrc,sy-fdpos. "0,10
SKIP.
SEARCH str FOR 't*'.
WRITE : sy-subrc,sy-fdpos. "0,0
搜索字符字段 <str> 的各种选项 (<options>) 如下:
- ABBREVIATED
在字段 <str> 中搜索包含 <c> 中的单词, 其中字符可以被其它字符隔开,但是单词和字符串的第一个字母必须相同 。
- STARTING AT <n1>
在字段 <str> 中搜索从 <n1> 开始的 <c> 。结果 SY-FDPOS 参照相对于 <n1> 的偏移量而 不是字段的 开始。
- ENDING AT <n2>
在字段 <str> 搜索 <c> 直到位置 <n2>。
- AND MARK
如果找到搜索串,则将搜索串中的所有字符(使用ABBREVIATED 时的所有字符)转换为大写形式。
DATA: STRING(30) VALUE 'This is a fast first example.',
POS TYPE I,
OFF TYPE I.
WRITE / STRING. "This is a fast first example.
SEARCH STRING FOR 'ft' ABBREVIATED.
WRITE: / 'SY-FDPOS:', SY-FDPOS. "10
POS = SY-FDPOS + 2.
SEARCH STRING FOR 'ft' ABBREVIATED STARTING AT POS AND MARK.
"在找到单词‘ fast’之后,为了查找包含‘ ft’的第二个单词,必须在偏移量SY-FDPOS上加2,
"然后从位置POS开始查找。否则,会再次找到单词 ‘fast’ 。
"要获得‘ first’ 相对于字段 STRING 开始的偏移量,从 POS 和 SY-FDPOS 计算。
WRITE / STRING. "This is a fast FIRST example.
WRITE: / 'SY-FDPOS:', SY-FDPOS. "4
OFF = POS + SY-FDPOS -1.
WRITE: / 'Off:', OFF. "15
在找到单词‘ fast’ 之后,为了 查找包含‘ ft’的第 二个单词, 必须在偏移 量 SY-FDPOS 上加2,然 后从位置 POS 开始查找。 否则,会再 次找到单词 ‘fast’ 。要获得‘ first’ 相对于字段 STRING 开始的偏移 量,从 POS 和 SY-FDPOS 计算。
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 。
REPLACE替换字段内容
语法:REPLACE <c1> WITH <c2> INTO <str> [LENGTH <l>].
将<str>字符串中的第一个<c1>替换成<c2>,若指定了长度则替换该长度内的字段(c1的长度)
REPLACE ALL OCCURRENCES OF '*' IN <str> WITH space.
将<str>中的'*'去掉
DATA: str(30) TYPE c VALUE 'abcdefghij.',
c LIKE str,
c1(4) TYPE c VALUE 'cdef',
c2(4) TYPE c VALUE 'klmn',
c3(3) TYPE c VALUE 'opq',
len TYPE i VALUE 2.
c = str.
WRITE c.
REPLACE c1 WITH c2 INTO c. "abklmnghij.
WRITE / c.
c = str.
REPLACE c1 WITH c2 INTO c LENGTH len. "abklmnefghij.
WRITE / c.
c = str.
REPLACE c1 WITH c3 INTO c. "abopqghij.
WRITE / c.
c = str.
REPLACE ALL OCCURRENCES OF '.' IN c WITH space. "abcdefghij
WRITE / c.
TRANSLATE转换大/小写并替换字符
TRANSLATE <c> TO UPPER CASE. 转大写
TRANSLATE <c> TO LOWER CASE. 转小写
TRANSLATE <c> USING <r>. 该语句根据字段 <r> 中存储的替换规则替换字段 <c> 的所有字符
DATA: C(10) VALUE 'AbCdEfGhIj',
STRING LIKE T,
RULE(20) VALUE 'AxbXCydYEzfZ'.
STRING = C.
WRITE STRING. "AbCdEfGhIj
TRANSLATE STRING TO UPPER CASE. "ABCDEFGHIJ
WRITE / STRING.
STRING = C.
TRANSLATE STRING TO LOWER CASE. "abcdefghij
WRITE / STRING.
STRING = C.
TRANSLATE STRING USING RULE. "xXyYzZGhIj
WRITE / STRING.