ABAP字符串处理汇总

来源:互联网 发布:金蝶软件明细账查找 编辑:程序博客网 时间:2024/05/17 06:13

最近实在是太忙了,几乎都没有时间做些笔记和整理资料,趁着中午的一点休息时间,整理一下字符串的处理,感觉语法比较多,老是记不住,还是在网上找找,整理一下,以备不时之需吧!

一、移动字段内容

    1、按给定位置数移动字符串

    语法:SHIFT <c> [BY <n> PLACES] [<mode>].将字段<c>移动<n>个位置,如果省略BY <n> PLACES,则将<n>解释为一个位置;如果<n>是0或负数,则<c>保持不变;如果<n>超过<c>长度,则<c>用空格填充。<n>可为变量。

    <mode>可以为:LEFT 向左移动<n>个位置,右边用<n>个空格填充;RIGHT 向右移动<n>个位置,左边用<n>个空格填充;CIRCULAR 向左移动<n>个位置,以便左边<n>个字符出现在右边。

    2、移动字段串到给定串

    语法:SHIFT <c> UP TO <str> <mode>.查找<c>字段内容直到找到字段串<str>并将字段<c>移动到字段边缘,<str>可为变量。如果<c>中找不到<str>,则将SY-SUBRC设置为4并且不移动<c>,否则将SY-SUBRC设置为0。<mode>内容同上。

    3、根据第一个或最后一个字符移动字段串

    语法:SHIFT <c> LEFT  DELETING LEADING <str>.

         SHIFT <c> RIGHT DELETING TRAILING <str>.假设左边的第一个字符或右边的最后一个字符出现在<str>中,将字段<c>向左或向右移动,字段右边或左边用空格填充,<str>可为变量。

二、替换字段内容

    语法:REPLACE <str1> WITH <str2> INTO <c> [LENGHT <l>].搜索字段<c>中模式<str1>前<l>个位置第一次出现的地方,如果未指定长度,则按全长度搜索模式<str1>;然后,将模式<str1>在字段<c>中第一次出现的位置用字符串<str2>替换,如果指定长度<l>,则只替换模式的相关部分。如果将系统字段SY-SUBRC的返回代码设置为0,则说明在字段<c>中找到模式<str1>并已用<str2>替换,非0的返回代码值则未替换。<str1>、<str2>、<l>可为变量。

三、转换大/小写并替换字符

    语法:TRANSLATE <c> TO UPPER CASE.将字段<c>中的所有小写字母替换为大写。

          TRANSLATE <c> TO LOWER CASE.将字段<c>中的所有大写字母替换为小写。

          TRANSLATE <c> USING <r>.根据字段<r>中存储的替换规则替换字段<c>的所有字符,其中每对的第一个字母用第二个字母替换。

四、覆盖字符字段

    语法:OVERLAY <c1> WITH <c2> [ONLY <str>].用<c2>的内容覆盖字段<c1>中包含<str>中字母的所有位置。<c2>保持不变,如果省略了ONLY <str>,则覆盖字段<c1>中所有包含空格的位置。如果至少要替换<c1>中的一个字符,则将SY-SUBRC设置为0,对于所有其它情况,将SY-SUBRC设置为4;如果<c1>比<c2>长,则只覆盖<c2>中的长度。

五、搜索字符字段

    语法: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 时的所有字 符)转换为大写形式。

六、压缩字符字段

    语法:CONDENSE <c> [NO-GAPS].去除字段<c>中的前导空格并用一个空格替换其它空格序列,结果是左对齐单词,每个单词用空格隔开。如果指定附加的NO-GAPS,则去除所有空格。注意:字段<c>的总长度不变,被删的空格再次出现在右边。

七、获得字符串长度

    语法:<n> = STRLEN( <c> ).决定字符串<c>到最后一个字符而不是SPACE的长度。

八、连接字符字段

    语法:CONCATENATE <c1> .... <cn> INTO <c> [SEPARATED BY <s>].连接字符串<c1>与<cn>,并将结果赋给<c>。忽略尾部空格。附加SEPARATED BY <s> 允许指定字符字段<s>,它放置在单个字段间已定义的长度中。如果结果符合<c>,则将SY-SUBRC设置为0,如果结果必须被截断,则将SY-SUBRC设置为4。

九、拆分字符字段

    语法:SPLIT <c> AT <del> INTO <c1> ... <cn>.在字符字段<c>中搜索分界字符串<del>,并将分界符之前和之后的部分放到目标字段<c1> ... <cn>中。要将所有部分放到不同目标字段中,必须指定足够目标字段。否则,用字段 <c> 的剩余部分填充最后目标字段并包含分界符。如果所有目标字段足够长且不必截 断任何部分,则将 SY-SUBRC 设置为0。否则,将其设置为4。

   SPLIT <c> AT <del> INTO <itab>.将组成原始串的部分放到内表中.

十、分配字符串部分

    语法:MOVE <c1> TO <c2> PERCENTAGE <p> [RIGHT].将左对齐的字符字段<c1>的百分比<p>(或如果用RIGHT选项指定,则为右对齐)复制到<c2>。

二、

1.对字符串的操作
1).SHIFT:截断字符串
SHIFT {c} [BY {n} PLACES] [{mode}].:
作用:去掉字符串的前n个位置的字符,如果n未指定,默认为1,如果指定的n小于等于0,则字符串不变。如果n超出字符串的长度,则字符串变空,所以在做此操作的时候要注意n的指定。可以首先获得该字符串的长度,方法:len=STRLEN(C)。
Mode:指定字符串截断的方向。
LEFT:从左边截断
RIGHT:从右边截断
CIRCULAR:把左边的字符放到右边。
SHIFT {c} UP TO {str} {mode}.:
作用:把字符串中在str以前的字符都去掉,同样可以指定mode,原理同上。
SHIFT {c} LEFT DELETING LEADING {str}.
SHIFT {c} RIGHT DELETING TRAILING {str}.:
作用:这两个语句就是把字符串c中前的(LEFT)或者后的(RIGHT)的字符str都去掉。
以上语句常用的场合:
A.去掉字符串中的前导字符。例如:如果alv中定一了一个字段是10位的字符,里面放的是so,po等number,而你不想显示前面的0,那么就可以这样做:SHIFT {c} LEFT DELETING LEADING 0.
B.已知某个字符串中包含固定的字符,想把这个固定字符前面的字符删掉,那么可以使用:SHIFT {c} UP TO {str}。例如:某个物料,通过增强mga00002和mga00003对其加了前缀,这个前缀部分是在某固定值表中取得的数据,在具体显示中,要把其前缀去掉。如TE-MRP-MAT1中想把te去掉,mrp表示该物料是跑mrp的,需求要求把te-去掉,mrp可以在固定值表中取得,则可以使用SHIFT {c} UP TO 'MRP'.
2).REPLACE:替换字符串
REPLACE {str1} WITH {str2} INTO {c} [LENGTH {l}].:
作用:把字符串c中的str1替换成str2,如果指定l,就是指定了替换的长度。如果替换成功,则SY-SUBRC设置成0。
常用场合:
字符串的替换操作比较常用,需要注意的是l的指定长度。
3). TRANSLATE:转换字符串
TRANSLATE {c} TO UPPER CASE.
TRANSLATE {c} TO LOWER CASE.:
作用:字符串的大小写的转换
TRANSLATE {c} USING {r}. :
作用:根据规则r转换字符串c
常用场合:
Sap系统一般都是使用大写字母的,但是某些特定的字段却是用小写字母来标记的,在操作这些字段的时候就需要注意大小写的转换了。转换规则倒是不太常用,到现在我还没有遇到过。
4). SEARCH:查找字符串
SEARCH {c} FOR {str} {options}.:
作用:在字符串c中查找str,如果找到了,SY-SUBRC为0,SY-FDPOS为找到字符串的具体位置。
需要说明的地方:注意模式的使用
指定str:查找str,str中后面的空格忽略
指定.str.:查找str,包含了str中尾部的空格
指定*str:查找以str结尾的字符串
指定str*:查找以str开头的字符串
{options}的指定:
主要用到的就是:STARTING AT {n1}指定开始位置
ENDING AT {n2}指定结束位置
常用场合:
一般用来判断某个字符串是否符合条件。也可以结合其他语句对字符串进行操作。
5).CONDENSE:去掉字符串中的空格
CONDENSE {c} [NO-GAPS].:
作用:去掉字符串中的前面和后面的空格,如果指定NO-GAPS,则去掉字符串中的所有空格。
常用场合:获得字符串的精确长度,用于判断。
6).SPLIT:拆分字符串
SPLIT {c} AT {del} INTO {c1} ... {cn}.
作用:按照分割字符del把字符串c分割成c1…cn。
SPLIT {c} AT {del} INTO TABLE {itab}.
作用:按照分割字符del把c分割,然后放到内表中的相应字段
常用场合:
文件名的分割,根据完整的文件路径加文件名把文件名分割出来。
难点:无法确定要分割多少次.
解决方法:两两分割,到最后的那个就是了。例如:str=c:dir1dir2dir3file
Split str at '' into str1 str2.
Find str2 for '/'.
Check sy-subrc = 0.
Do.
Find str2 for '/'.
If sy-subrc = 0.
Split str2 into str1 str2.
Else.
Exit.
Endif.
Enddo.
文件上传的类型是字符串,把其分割后放到内表中。例如上面的问题:
data: begin of itab occurs 0 ,
col1(30) type c,
end of itab.
Split str at '' into table itab.
describe table itab lines line.
Read table itab index line.
Itab-col1就是file
7).CONCATENATE:连接字符串
CONCATENATE {c1} ... {cn} INTO {c} [SEPARATED BY {s}].
作用:把c1…cn用s分隔连接到c中
常用场合:文件下载,对文件中的字段编辑。

后续的还有很多,暂时就整理了这些,都是前辈们整理出来的!