ABAP语法基础篇(5)——字符串处理
五、字符串#
5.1 移动字符串#
5.1 .1 按给定位置数移动字符串#
要按给定位置数移动字 段内容, 使用 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>
个字符出现在右边。
5.1.2 移动字符串到给定串位置#
要移动字段内容以到给定串位置 ,则使用 SHIFT 语句,用法如下:
SHIFT <c> UP TO <str><mode>.
ABAP/4 查找 <c>
字段内容直到找到字符串 <str>
并将字段 <c>
移动到字段边缘。<mode>
选项与按给定位置数移动字符串中所述相同,<str>
可为变量。
如果 <c>
中找不到 <str>
,则将 SY-SUBRC
设置为 4 并且不移动 <c>
。否则,将 SY-SUBRC
设置为 0 。
5.1.3 根据第一个或最后一个字符移动字符串#
假设第一个或最后一个字符符合一定条件,则可用 SHIFT
语句将字段向左或向右移动。为此,请使用以下语法:
SHIFT <c>LEFT DELETING LEADING <str>.
SHIFT <c> RIGHT DELETING TRAILING <str>.
假设左边的第一个字符或右边的最后一个字符出现在 <str>
中,该语句将字段 <c>
向左或向右移动。字段右边或左边用空格填充,<str>
可为变量。
5.2 替换字段内容#
要用其它字符串替换字段串的某些部分, 使用 REPLACE
语句。
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>
可为变量。
5.3 大小写转换 并替换字符串#
可以将字母转换大 / 小写或使用替换规则。要转换大 / 小 写, 使用 TRANSLATE
语句,用法如下:
TRANSLATE <c> TO UPPER CASE.
TRANSLATE <c> TO LOWER CASE.
这些语句将字段 <c>
中的所有小写字母转换成大写或反之。
使用替换规则时, 使用以下语法:
TRANSLATE <c> USING <r>.
该语句根据字段 <r>
中存储的替换规则替换字段 <c>
的所有字符。 <r>
包含成对字母,其中每对的第一个字母用第二个字母替换。 <r>
可为变量。
5.4 转换为可排序格式#
可以将字符字段转换为可按字母顺序排列的格式:
CONVERT TEXT <c> INTO SORTABLE CODE <sc>.
该语句为字符字段 <c>
填充可排序目标字段 <sc>
。字段 <c>
必须是类型 C
且字段 <sc>
必须是类型 X
,最小长度为 <c>
长度的 16 倍。
该语句目的是为字符字段 <c>
创建相关字段 <sc>
,作为 <c>
的按字母顺序排列的排序关键字。在内表的内容和已解压缩的数据中进行排序。
如果对未转换的字符字段进行排序,则系统创建与各字母的特定平台内部编码相对应的顺序。在对目标字段进行排序之后,转换 CONVERT TEXT
按这样的方式创建目标字段,相应的字符字段顺序按字母排序。例如,在德语中,顺序为Miller 、 Moller 、 Mller 、 Muller ,而不是 Miller 、 Moller 、 Muller 、 Mller
。
转换方法依赖于运行 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 中依赖于字符集的所有操作。
5.5 覆盖字符字段#
要用另一字符字段覆盖字符字段,使用 OVERLAY
语句,用法如下:
OVERLAY <c1> WITH <c2> [ONLY <str>].
该语句用 <c2>
的内容覆盖字段 <c1>
中包含 <str>
中字母的所有位置。 <c2>
保持不变。如果省略 ONLY <str>
,则覆盖字段 <c1>
中所有包含空格的位置。
如果至少要替换 <c1>
中的一个字符,则将 SY-SUBRC
设置为 0。对于所有其它情况,将 SY-SUBRC
设置为 4 。如果 <c1>
比 <c2>
长,则只覆盖 <c2>
中的长度。
5.6 搜索字符串#
要搜索特定模式的字符串,请使用 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> 开始的词 |
单词之间用空格、逗号、句号、分号、冒号、问号、叹号、括号、斜杠、加号和等号等分隔。
搜索字符字段 <c>
的各种选项<options>
如下:
- ABBREVIATED
在字段 <c>
中搜索包含 <str>
中指定字符串的单词,其中字符可能被其它字符隔开。单词和字符串的第一个字母必须相同。
- STARTING AT <n1>
在字段 <c>
中搜索从 <n1>
开始的 <str>
。结果 SY-FDPOS
参照相对于 <n1>
的偏移量而不是字段的开始。
- ENDING AT <n2>
在字段 <c>
搜索 <str>
直到位置
- AND MARK
如果找到搜索串,则将搜索串中的所有字符(和使用 ABBREVIATED时的所有字符)转换为大写形式。
5.7 获得字符串长度#
要决定字符串到最后一个字符而不是 SPACE
的长度, 使用内部函数 STRLEN
,用法如下:
[COMPUTE] <n> = STRLEN(<c> ).
STRLEN
将操作数 <c>
作为字符数据类型处理,而不考虑其实际类型,不进行转换。关键字 COMPUTE
可选。
5.8 压缩字符串去空格#
要删除字符字段中多余 空格,使用 CONDENSE
语句,用法如下:
CONDENSE <c> [NO-GAPS].
该语句去除字段 <c>
中的前导空格并用一个空格替换其它空格序列。结果是左对齐单词,每个单词用空格隔开。如果指定附加的 NO-GAPS
,则去除所有空格。
5.9 连接字符串#
要将单个字符串连接成一体, 使用 CONCATENATE
语句,用法如下:
CONCATENATE <c1> ... <cn> INTO <c> [SEPARATED BY <s>].
该语句连接字符串 <c1>
与 <cn>
并将结果赋给 <c>
。
该操作忽略尾部空格,附加 SEPARATED BY <s>
允许指定字符字段 <s>
,它放置在单个字段间已定义的长度中。
如果结果符合 <c>
,则将 SY-SUBRC
设置为 0 。然而,如果结果必须被截断,则将 SY-SUBRC
设置为 4 。
5.10 拆分字符串#
要将字符串拆分成两个或更多小串 , 使用 SPLIT
语句,用法如下:
SPLIT <c> AT <del> INTO <c1> ... <cn>.
该语句在字符字段 <c>
搜索分界字符串 <del>
,并将分界符之前和之后的部分放到目标字段 <c1> ... <cn>
中。
要将所有部分放到不同目标字段中,必须指定足够目标字段。否则,用字段 <c>
的剩余部分填充最后目标字段并包含分界符。
如果所有目标字段足够长且不必截断任何部分,则将 SY-SUBRC
设置为 0 ,否则,将其设置为 4 。
5.11 分配字符串部分#
MOVE
语句的以下变体只使用类型 C
字段:
MOVE <c1> TO <c2> PERCENTAGE <p> [RIGHT].
将左对齐的字符字段 <c1>
的百分比 <p>
(或如果用 RIGHT
选项指定,则为右对齐)复制到 <c2>
。
<p>
值可为 0
和 100
之间的任何数。将要从 <f1>
复制的长度取整为下一个整数。
如果语句中某一参数不是类型 C
,则忽略参数 PERCENTAGE
。
作者:ITiger
出处:https://www.cnblogs.com/zyhcs/p/15650507.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
转载请注明出处!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步