您的位置:首页 > 其它

[基础语法] SEARCH搜索指定字符串详解

2017-11-29 09:34 260 查看
今天遇到一个问题:读取服务器目录返回文件夹信息,如果文件夹不存在就创建,下面是返回的信息


文件夹是以日期、日期的前六位命名的,此例中如果我们直接search 201503,虽然成功,但我们不能判断是不是20150315文件夹,查阅资料用SY-FDPOS解决问题。
解决思路:先获取201503字符串的位置,然后偏移量l_fdpos = sy-fdpos + 6 ; 判断gt_res-line+l_fdpos(2)是否为空来判断是不是201503文件夹。

以下是补充扩展内容:
1、SEARCH f FRO g :g表示被搜索的字符串。

ABBREVIATED        从指定字符串中按顺序搜索相匹配字符串。

STARTING AT n1    从字符串n1个字符开始搜索。

ENDING AT n2        搜索到字符串第n2个字符止。

AND MARK             从指定字符串是模糊搜索相匹配字符串。

2、SEARCH itab FOR g:g表示被搜索字符串。

ABBREVIATED                从内表中按顺序逐行搜索相匹配字符串。

STARTING AT line1        从内表中具体某行开始搜索匹配字符串。

ENDING AT line2                搜索最大范围到内表中具体某行。

AND MARK                        从内表中模糊搜索相匹配字符串。

通过系统变量SY-SUBRC可以回执字符串查找的结果,若回执等于"0",则表示查找成功。某段字符在字符串中的具体位置保存在系统变量SY-FDPOS中。

实例:

DATA search_str(50).
MOVE 'Welcome to SAP world!' TO search_str.

SEARCH search_str FOR 'wld' ABBREVIATED.
WRITE: / 'SY-SUBRC=',sy-subrc,
/ 'SY-FDPOS=',sy-fdpos. "执行结果:wld按顺序包含在子字符串'world'中,SY-SUBRC=0,SY-FDPOS=15

SEARCH search_str FOR 'SAP' STARTING AT 10.
WRITE: / '从第十位开始:',
/ 'SY-SUBRC=',sy-subrc,
/ 'SY-FDPOS=',sy-fdpos. "执行结果:从第10位开始查找,SY-SUBRC=0,SY-FDPOS=2

SEARCH search_str FOR 'SAP' ENDING AT 10.
WRITE: / '查找第十位结束:',
/ 'SY-SUBRC=',sy-subrc,
/ 'SY-FDPOS=',sy-fdpos. "执行结果:查找到第10位结束,SY-SUBRC=4,SY-FDPOS=0

SEARCH search_str FOR '*AP' AND MARK.
WRITE: / '查找包含AP的子字符串,SAP符合条件,默认为查找SAP:',
/ 'SY-SUBRC=',sy-subrc,
/ 'SY-FDPOS=',sy-fdpos. "查找包含'AP'子字符串,'SAP'符合条件,默认为查找'SAP',SY-SUBRC=0,SY-FDPOS=11

SEARCH search_str FOR '*A' AND MARK.
WRITE: / '匹配字符串必须是子字符串以空格分开的最后几位:',
/ 'SY-SUBRC=',sy-subrc,
/ 'SY-FDPOS=',sy-fdpos. "匹配字符串必须是子字符串以空格分开的最后几位,SY-SUBRC=4,SY-FDPOS=0
对于一些特殊符号,如"*"、"@"、"."等,需要在其两边加上顿号作为修饰。如某字符串为"AAA*BBB",查找符号"*"的位置。
DATA search_str2(50).
MOVE 'AAA*BBB' TO search_str2.
SEARCH search_str2 FOR '.*.' ABBREVIATED.
WRITE: / 'SY-SUBRC=',sy-subrc,
/ 'SY-FDPOS=',sy-fdpos.
从内表中查找字符串方法与上面基本类似,若内表有多行,那么字符串查找位置默认为从某行数据第一位开始。
DATA:BEGIN OF t_inf OCCURS 0,
line(80),
END OF t_inf.
*定义类型后,添加两行数据
APPEND 'HELLO SAP ' TO t_inf.
APPEND 'I am come from china' TO t_inf.

SEARCH t_inf FOR 'SAP' ABBREVIATED.
WRITE: / 'SY-SUBRC=',sy-subrc,
/ 'SY-FDPOS=',sy-fdpos. "从内表第一行中可查找到,SY-SUBRC=0,SY-FDPOS=6

SEARCH t_inf FOR 'am' ABBREVIATED.
WRITE: / 'SY-SUBRC=',sy-subrc, "从内表第二行中可查找到,SY-SUBRC=0,SY-FDPOS=2
/ 'SY-FDPOS=',sy-fdpos.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: