二维码

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

Twilight发表于 2015-04-24 11:14zhongguomao 最后回复于 2017-11-29 09:35 [复制链接] 4619 1

今天遇到一个问题:读取服务器目录返回文件夹信息,如果文件夹不存在就创建,下面是返回的信息
SEARCH.jpg
文件夹是以日期、日期的前六位命名的,此例中如果我们直接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中。

实例:
  1. DATA search_str(50).
  2. MOVE 'Welcome to SAP world!' TO search_str.

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

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

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

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

  18. SEARCH search_str FOR '*A' AND MARK.
  19. WRITE: / '匹配字符串必须是子字符串以空格分开的最后几位:',
  20.             / 'SY-SUBRC=',sy-subrc,
  21.             / 'SY-FDPOS=',sy-fdpos.  "匹配字符串必须是子字符串以空格分开的最后几位,SY-SUBRC=4,SY-FDPOS=0
复制代码

对于一些特殊符号,如"*"、"@"、"."等,需要在其两边加上顿号作为修饰。如某字符串为"AAA*BBB",查找符号"*"的位置。
  1. DATA search_str2(50).
  2. MOVE 'AAA*BBB' TO search_str2.
  3. SEARCH search_str2 FOR '.*.' ABBREVIATED.
  4. WRITE: / 'SY-SUBRC=',sy-subrc,
  5.        / 'SY-FDPOS=',sy-fdpos.
复制代码

从内表中查找字符串方法与上面基本类似,若内表有多行,那么字符串查找位置默认为从某行数据第一位开始。
  1. DATA:BEGIN OF t_inf OCCURS 0,
  2.        line(80),
  3.      END OF t_inf.
  4. *定义类型后,添加两行数据
  5. APPEND 'HELLO SAP ' TO t_inf.
  6. APPEND 'I am come from china' TO t_inf.

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

  10. SEARCH t_inf FOR 'am' ABBREVIATED.
  11. WRITE: / 'SY-SUBRC=',sy-subrc,  "从内表第二行中可查找到,SY-SUBRC=0,SY-FDPOS=2
  12.        /  'SY-FDPOS=',sy-fdpos.
复制代码

评分

参与人数 1雨露 +4 收起 理由
z3765295 + 4 基础教程的典范

查看全部评分

回复

使用道具 举报

zhongguomao
学习基础语法。
回复 支持 反对

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表