`
evangxli
  • 浏览: 223611 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

SAP:ABAP基础篇--字符串截取

阅读更多
Zhuan 的哦!
1. 数字类型(numeric types)
(1).类型
   Abap支持三种数字类型:
     I:整型
       范围:-2147483648 to 2147483647
     P:16位
       范围:取决于小数位的长度
       注意事项:为了确保计算正确,必须在程序属性中把fixed point arithmetic选中,参考图1。
     F:浮点类型
       范围:+/- 2.2250738585072014E-308 to 1.7976931348623157E+308
       注意事项:因为长度的关系,所以尽量不要用两个该类型的数据相等作为判断条件
(2).定义方法
     [f1] type I.
     [f1] type P decimals [num].
     [f1] type F.
(3).使用
     I类型:
       主要是用于计数器,数量,索引,偏移量等等
       例如:
         *取得内表行数
         DATA: V_COUNTER TYPE I.
         V_COUNTER = LINES( I_TAB ).
         *根据索引读取内表中的数据
         DATA: V_INDEX TYPE I.
         READ TABLE I_TAB INDEX V_INDEX.
         *截取字符串
         DATA: V_OFFSET_START TYPE I,
               V_OFFSET_LENGTH   TYPE I,
               V_C(10) TYPE C,
                 L_C(3)   TYPE C.
         V_C = ‘ABCDEFGHIJ’.
         V_OFFSET_START = 3.
         V_OFFSET_LENGTH   = 5
         L_C = V_C+V_OFFSET_START(V_OFFSET_LENGTH).
         RESULT:
           L_C = ‘DEFGH’.
     P类型:
       主要和数据库中的QUAN类型关联;
       常用场合:大小,长度,重量,货币等有单位的场合
       *根据单位把数量写入字符型变量中
       WRITE:[数量] to [字符型变量] unit [单位].
     F类型:
       常用场合:计算
字符类型:
   一.包括:
         C:字符
         N:应该算是字符型的数字
         D:日期类型,标准长度8(YYYYMMDD),注意其初期值的判断,不是space,而是'00000000',判断语句可以使用is initial or not。
         T:时间类型,标准长度6(HHMMSS)
   二.具体使用:
     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}指定结束位置
             常用场合:
                 一般用来判断某个字符串是否符合条件。也可以结合其他语句对字符串进行操作。
        
eg:
        DATA STRING7(30) TYPE C VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

        WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'.

        ULINE /1(26).
        SEARCH STRING7 FOR 'X'.

        WRITE: / 'X', SY-SUBRC UNDER 'SY-SUBRC',

                      SY-FDPOS UNDER 'SY-FDPOS'.

        WRITE:/ '看这里的数据'.

       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).模式匹配
       CO / CN contains only or not
      CA / NA contains any or not any
      CS / NS contain string or not
      CP / NP contains pattern or not
      
      NOTE:
      a) . CO, NO, CA, NA比较时区分大小写, 并且尾部空格也在比较的范围之内
      data: s1(10) value 'aabb'.
      if s1 co 'ab' ==> false
      if s1 co 'ab ' ==>true
      CS, NS, CP, NP不区分大小写和尾部空格
      
      b) .对于CP, NP
      * = \s?
      + = \s
      # 换码字符, 用于匹配 *, +这样的字符
         ##
        #*
        #+
        #___ 比较结尾空格
         #[a-z] 在CP, NP中强制区分大小写
      
      c) . 比较结束后,如果结果为真,sy-fdpos将给出s2在s1中的偏移量信息
       9).去前导0 (Remove leading zero)
      SHIFT dobj LEFT DELETING LEADING '0'.
      FM : CONVERSION_EXIT_ALPHA_OUTPUT
      
       增前导0 (Add leading zero)
      DATA v_s(5).
      UNPACK '123' to v_s. ==> v_s = '00123'
      FM: CONVERSION_EXIT_ALPHA_INPUT
      10).截取子字串
            data: text type c length 10.
          data: ilen type i.
          data: subtext type c length 5.
          text = 'ABCDEFGHIJ'.
          subtext = text+0(5). "左面第一个字符前有个光标,光标便宜0位,取5位的长度('ABCDE')
          subtext = text+3(5). "光标偏移3位,走到C后面,这时开始取5位长度('DEFGH)
          text+0(1) = 'Z'.     "替换该位置上的字符为'Z'
          注意:+两边不能有空格。
      11).取字串長度:STRLEN
          DATA TEXT TYPE C LENGTH 20.
          DATA: ILEN TYPE I.
          TEXT = `Barbcbdbarb`.
          ILEN = STRLEN( TEXT ).                             "字串實際長度(11)
          DESCRIBE FIELD TEXT LENGTH ILEN IN BYTE MODE.     "字串定義時的字節長度,一個長度等2個字節(40)
          DESCRIBE FIELD TEXT LENGTH ILEN IN CHARACTER MODE. "字串定義的長度(20)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics