zoukankan      html  css  js  c++  java
  • 经常用到的字符串操作

    1).SHIFT:截断字符

    2).REPLACE:替换字符串

    3). TRANSLATE:转换字符串

    4). SEARCH:查找字符串

    5).CONDENSE:去掉字符串中的空格

    6).SPLIT:拆分字符串

    7).CONCATENATE:连接字符串

    8) .移动字段内容

    9).转换为可排序格式

    10).覆盖字符字段

    11).获得字符串长度

    12).分配字符串部分

           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:"dir1"dir2"dir3"file
                     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中

                 常用场合:文件下载,对文件中的字段编辑。

           8).SHIFT <c> [BY <n> PLACES] [<mode>].

               按照给定位置数移动字符串

            该语句将字段 <c> 移动 <n> 个位置。如果省略 BY <n> PLACES, 则将<n>解释为一个位置。如果<n> 是 0 或负值,则<c>保持不变。如果<n>超过<c>长度,则<c>用空格填充 。<n> 可为变量。

               对不同(<mode>) 选项,可以按以下方式移动字段 <c>:a.LEFT:向左移动 <n> 位置,右边用<n>个空格填充(默认设置 )。b.RIGHT:向右移动<n>位置,左边用<n>个空格填充 。c.CIRCULAR:向左移动 <n> 位置,以便左边 <n> 个字符出现在右边。

              移动字段串到给定串

              SHIFT <c> UP TO <str> <mode>.
    ABAP/4 查找<c>字段内容直到找到字符串 <str> 并将字段<c> 移动到字段边缘。 <mode> 选项与按给定位置数移动字段串中所述相同。<str> 可为变量。

    如果 <c> 中找不到 <str>, 则将SY-SUBRC 设置为 4 并且不移动 <c>。否则,将 SY-SUBRC 设置为0。

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

            假设第一个或最后一个字符符合一定条件,则可用 SHIFT 语句将字段向左或向右移动。为此,请使用以下语法:
    SHIFT <c> LEFT  DELETING LEADING  <str>.
    SHIFT <c> RIGHT DELETING TRAILING <str>.
    假设左边的第一个字符或右边的最后一个字符出现在 <str> 中,该语句将字段 <c> 向左或向右移动。字段右边或左边用空格填充。<str> 可为变量。


    9).转换为可排序格式

              可以将字符字段转换为可按字母顺序排列的格式:
    语法
    CONVERT TEXT <c> INTO SORTABLE CODE <sc>.
    该语句为字 符字段 <c> 填充可排序 目标字段 <sc>。 字段 <c> 必须是类型 C且字段 <sc> 必须是类型 X ,最小长度 为 <c> 长度的16倍 。
    该语句目的是为字符字段<c>创建相关字段<sc>,作为<c>的按字母顺序排列的排序关键字。在内表的内容和已解压缩的数据中进行排序(参见内表排序和给摘录数据集排序)。

    如果对未转换的字符字段进行排序,则系统创建与各字母的特定平台内部编码相对应的顺序。在对目标字段进行排序之后,转换CONVERT TEXT 按这样的方式创建目标字段,相应的字符字段顺序按字母排序。例如,在德语中,顺序为‘Miller、Moller、M?ller、Muller’,而不是 ‘Miller、Moller、
    Muller、M?ller’。

    转换方法依赖于运行ABAP/4程序的文本环境。文本环境在用户主记录中定义。例外的是可以使用如下语句,在程序中设置文本环境:

    语法
    SET LOCALE LANGUAGE <lg> [COUNTRY <cy>] [MODIFIER <m>].
    该语句根据语言<lg>设置文本环境。对于选项COUNTRY,只要特定国家语言不同,就可以在语言以外指定国家。对于选项MODIFIER,只要一个国
    家内语言不同,就可以指定另一个标识符,例如,排序顺序在电话簿和词典之间不同。
    字段<lg>、<cy>和<m>必须是类型C且长度必须与表TCP0C的关键字段长度相等。表TCP0C是一个表 格,从中进行平台相关的文本环境维护。在语句SETLOCALE期间,系统根据TCP0C中的条目设置文本环境。除了内部传送的平台特性之外,用SET语 句指定表关键字。如果<lg>等于SPACE,则系统根据用户主记录设置文本环境。如果对于指定的关键字在表中无条目,则系统将产生运行错 误。

    文本环境影响ABAP/4中依赖于字符集的所有操作。
    有关该主题的详细信息,参见CONVERT TEXT和SET LOCALE LANGUAGE 的关键字文档。
    关于如何根据语言排序的示例,参见内表排序。

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

    中的长度。

    11)  获得字符串长度
    要决定字符串到最后一个字符而不是SPACE的长度,请使用内部函数STRLEN,用法如下:
    语法
    [COMPUTE] <n> = STRLEN( <c> ).
    STRLEN将操作数<c>作为字符数据类型处理,而不考虑其实际类型。不进行转换。

    12)  分配字符串部分


    MOVE语句的以下变体只使用类型C字段:
    语法
    MOVE <c1> TO <c2> PERCENTAGE <p> [RIGHT].
    将左对齐的字符字段<c1>的百分比<p>(或如果用RIGHT选项指定,则为右对齐)复制到<c2>。
    <p>值可为0和100之间的任何数。将要从<f1>复制的长度取整为下一个整数。
    如果语句中某一参数不是类型C,则忽略参数PERCENTAGE。
    DATA C1(10) VALUE 'ABCDEFGHIJ',
         C2(10).
    MOVE C1 TO C2 PERCENTAGE 40.
    WRITE C2.
    MOVE C1 TO C2 PERCENTAGE 40 RIGHT.
    WRITE / C2.
    该过程的输 出如下:
    ABCD      
          ABCD

    (出处:http://www.cnblogs.com/long2006sky/archive/2009/03/22/1419158.html)

    知识不在于大小,在于总结。如有错误不足,还请不吝指正。
  • 相关阅读:
    【今日CS 视觉论文速览】Mon, 7 Jan 2019
    文章汇总页面
    【MarkDown】转义字符
    hdu 4678 Mine 博弈论
    hdu 4294 Multiple
    hdu 4291 A Short problem
    hdu 4672 Present Day, Present Time 博弈论
    hdu 3544 Alice's Game 博弈论
    hdu 3389 Game 博弈论
    hdu 2147 kiki's game 博弈论
  • 原文地址:https://www.cnblogs.com/peixuanzhihou/p/3778051.html
Copyright © 2011-2022 走看看