ABAP 字符串查找函数search

 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>开始的词。

    <options>可以为以下值:

    ABBREVIATED        在字段 <c> 中搜索包含 <str> 中指定字符串的单词,其中字符可能被其它字符隔开。单词和字符串的第一个字母必须相同 。

    STARTING AT <n1>   在字段 <c> 中搜索从 <n1> 开始的 <str> 。结果 SY-FDPOS 参照相对于 <n1> 的偏移量而不是字段的开始。

    ENDING AT <n2>     在字段 <c> 搜索 <str> 直到位置 <n2>。

    AND MARK           如果找到搜索串,则将搜索串中的所有字符(和使用 ABBREVIATED 时的所有字 符)转换为大写形式。

以下为示例语句:

 
REPORT z_string_search.

DATA string(30) TYPE c VALUE 'this is a testing sentence.'.
WRITE :/ 'searched' , 'SY-subrc','sy-fdpos'.

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 '*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 '*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'.

SEARCH string FOR 's*  '.
WRITE :/ 's*   ', sy-subrc UNDER 'sy-subrc',
                  sy-fdpos UNDER 'sy-fdpos'.


SEARCH string FOR 't*s'.
WRITE :/ 't*s', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.


SEARCH string FOR ' '.
WRITE :/  ' ', sy-subrc UNDER 'sy-subrc',
               sy-fdpos UNDER 'sy-fdpos'.


SEARCH string FOR '. .'.
WRITE :/ '. .', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.

DATA sss TYPE c VALUE 'g'.

SEARCH string FOR sss.
WRITE :/ sss , sy-subrc UNDER 'sy-subrc',
               sy-fdpos UNDER 'sy-fdpos'.

SEARCH string FOR '*sss'.
WRITE :/'*sss', 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'.

SEARCH string FOR '*g'.
WRITE :/ '*g', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.

DATA srr(10) TYPE c .
CONCATENATE '*' 'g' INTO srr.

SEARCH string FOR srr.
WRITE :/ srr, sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.

SEARCH string FOR '*g' STARTING AT 3.
WRITE :/ 'st--*g', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.


SEARCH string FOR '*g' ENDING AT 3.
WRITE :/ 'en--*g', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.


SEARCH string FOR '*g' AND MARK.
WRITE :/ 'mk--*g', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.

WRITE :/ string.


SEARCH string FOR '*g'ABBREVIATED.
WRITE :/ 'ab--*g', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.


SEARCH string FOR 'te*g'ABBREVIATED.
WRITE :/ 'ab--te*g', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.


SEARCH string FOR 'te*'ABBREVIATED.
WRITE :/ 'ab--te*', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.


SEARCH string FOR 'te'ABBREVIATED.
WRITE :/ 'ab--te', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.

SEARCH string FOR 'is'ABBREVIATED.
WRITE :/ 'ab--is', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.

SEARCH string FOR 'this'ABBREVIATED.
WRITE :/ 'ab--this', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.

SEARCH string FOR 'ing'ABBREVIATED.
WRITE :/ 'ab--ing', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.

SEARCH string FOR 'ing'.
WRITE :/ 'ing', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.

SEARCH string FOR '   ing'.
WRITE :/ '   ing', sy-subrc UNDER 'sy-subrc',
                sy-fdpos UNDER 'sy-fdpos'.

*需要注意的是* 和. 共用可能无法出现想要的结果,还有就是使用变量作为查找依据的时候,需要先使用concatenate先将字符串拼起来
*查询的时候大小写不区分
*查询结果是从0开始输出的
*通配符只能用在开始或者结尾,不能使用在字符串中间
*默认后空格是无效的,存在与否不影响查询的结果;但是前空格是有效的,会直接影响查询的结果;..的添加会限制空格
*如果只需要查询空格需要使用. .
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值