zoukankan      html  css  js  c++  java
  • abap中常用字符串操作整理

    字符串首字符索引为 0;

     Character Fields: C,N, D, T, string (CNDT=> CN Data Time)

    1. 字符串连接
    CONCATENATE dobj1 dobj2 ...  INTO result
                [IN { BYTE | CHARACTER } MODE]
                [SEPARATED BY sep].

    2.字符串分隔, split 一个string的部分到一个内表或一系列的变量
    SPLIT dobj AT sep INTO
          { {result1 result2 ...} | {TABLE result_tab} }
          [IN {BYTE|CHARACTER} MODE].

    3. 字符串查找, 在一个字符串中查找模式串(FIND or SEARCH)
    FIND sub_string
      IN SECTION [OFFSET off] [LENGTH len] OF dobj   -->
    灰色部分用来缩小目的串被查找的范围
      [ IN { BYTE | CHARACTER } MODE ]
      [ { RESPECTING | IGNORING } CASE ]
      [ MATCH OFFSET moff ] [MATCH LENGTH mlen ].

    FIND 'knows'
        IN SECTION OFFSET 5 OF  'Everybody knows this is nowhere'
        MATCH OFFSET moff   => moff = 10
        MATCH LENGTH mlen. " => mlen= 5

    在字符串dobj中查找pattern
    SEARCH dobj FOR pattern  [IN { BYTE | CHARACTER } MODE]
           [STARTING AT p1] [ENDING AT p2]
           [ABBREVIATED]
           [AND MARK].
    if sy-subrc = 0. then SY-FDPOS =
    返回patterndobj中的位置
    About pattern:
    'pat'   -
    忽略尾部空格
    '.pat.' -
    不忽略尾部空格
    '*pat' -
    pat结尾
    'pat*' -
    pat开始
    单词是指: 用 空格 , ; : ? ! () / + =分隔的字串

    4. 字符串替换
    REPLACE SECTION [OFFSET off] [LENGTH len]
            OF dobj WITH new
            [IN { BYTE | CHARACTER } MODE].

    REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF]
            [SUBSTRING] sub_string
            IN [SECTION [OFFSET off] [LENGTH len] OF ] dobj WITH new
            [IN {BYTE|CHARACTER} MODE]
            [{RESPECTING|IGNORING} CASE]
            [REPLACEMENT COUNT rcnt]
            [REPLACEMENT OFFSET roff]
            [REPLACEMENT LENGTH rlen].
    eg:
    DATA: text1 TYPE string VALUE 'xababx'.
    REPLACE 'ab' IN text1 WITH 'xx'. --> xxxabx

    5. 去前导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

    SHIFT dobj
         [{BY num PLACES} | {UP TO sub_string}]
         [LEFT|RIGHT] [CIRCULAR]
    SHIFT dobj
         {LEFT  DELETING LEADING} | {RIGHT DELETING TRAILING} pattern.
         [IN {BYTE|CHARACTER} MODE].

    6. 字符串的长度, 内表的行数
     STRLEN( dobj)
    字符串的长度
     LINES( itab )
    内表的行数

    7. 删字符串中的空格: CONDENSE text [NO-GAPS].

    8. 大小写转换,字符变换
    TRANSLATE text {TO {UPPER|LOWER} CASE} | {USING pattern}.
    eg: text = `Barbcbdbarb`.
    TRANSLATE text USING 'ABBAabba'. =>'Abracadabra'

    9. CONVERT
    CONVERT DATE dat [TIME tim [DAYLIGHT SAVING TIME dst]]
            INTO TIME STAMP time_stamp TIME ZONE tz.

    CONVERT TIME STAMP time_stamp TIME ZONE tz
            INTO [DATE dat] [TIME tim]
            [DAYLIGHT SAVING TIME dst].

    CONVERT TEXT text INTO SORTABLE CODE hex.

    10. OVERLAY text1 WITH text2 [ONLY pattern].
    如果不指定后面的ONLY pattern, text1中的空格会被text2中的对应字符替代
    如果指定只有匹配的字符才会被替代,注意大小写敏感

    11. 模式匹配
    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将给出s2s1中的偏移量信息

    12. 特殊字符
    在字符串中加入回车换行或TAB字符,在其他语言可以使用$13$10这样的ASCII码进行插入.但在ABAP中要使用sap的类CL_ABAP_CHAR_UTILITIES. 里面有字符常量:CR_LF,HORIZONTAL_TAB,NEWLINE等等.

    13. 字符串位操作
    DATA: v_s(10) value 'abcd'.
    v_s+0(1) = 'b'.
    v_s+2(*) = '12'.
    => v_s = 'bb12'. 

     

    http://blog.sina.com.cn/sapliumeng
  • 相关阅读:
    TP5 关联模型使用(嵌套关联、动态排序以及隐藏字段)
    分布式与集群的区别是什么?
    模板函数函数模板 Function Template(C++Primer10)
    注意地方hadoop中的pi值计算
    文件错误关于hibernate中报Duplicate class/entity mapping org.model.User错的问题
    元素序列几个常用排序算法:一
    行语句mysql insert操作详解
    分量入度hdu 3836 Equivalent Sets
    查询语句编写高效SQL语句
    方法元素c语言范式编程之lsearch
  • 原文地址:https://www.cnblogs.com/senlinmu110/p/3802259.html
Copyright © 2011-2022 走看看