zoukankan      html  css  js  c++  java
  • ABAP中字符串处理方法小结(一)

    1, 拆分字符串split

    语法:

    SPLIT <c> AT <del> INTO <c1> ... <cn>.

    代码:

    DATA: STRING(60),
          P1(20) VALUE '',
          P2(20) VALUE '',
          P3(20) VALUE '',
          P4(20) VALUE '',
          DEL(3) VALUE '***'.
    STRING = ' Part 1 *** Part 2 *** Part 3 *** Part 4 *** Part 5'.
    WRITE STRING.
    SPLIT STRING AT DEL INTO P1 P2 P3 P4.
    WRITE: /'P1:' , P1.
    WRITE: /'P2:' , P2.
    WRITE: /'P3:' , P3.
    WRITE: /'P4:' , P4.

    2, 连接字符串Concatenate

    语法:

    CONCATENATE <c1> ... <cn> INTO <c> [SEPARATED BY <s>].

    代码:

    DATA: C1(10)  VALUE  'Sum',
          C2(3)   VALUE  'mer',
          C3(5)   VALUE  'holi ',
          C4(10)  VALUE  'day',
          C5(30),
          SEP(3)  VALUE ' - '.
    CONCATENATE C1 C2 C3 C4 INTO C5.
    WRITE C5.
    CONCATENATE C1 C2 C3 C4 INTO C5 SEPARATED BY SEP.
    WRITE / C5.

    显示结果:

    在 C1 到 C5 之间,忽略 尾部空格。 分隔符 SEP 保留尾部空格。

    3, 获得字符串长度STRLEN

    语法:

    [COMPUTE] <n> = STRLEN( <c> ).

    代码:

    DATA: int       TYPE i,
          word1(20) TYPE c VALUE '12345',
          word2(20) TYPE c,
          word3(20) TYPE c VALUE '   4         '.
    int = strlen( word1 ).
    WRITE   int.
    int = strlen( word2 ).
    WRITE / int.
    int = strlen( word3 ).
    WRITE / int.

    显示结果:

    请注意,STRLEN 将操作数 <c> 作为字符数 据类型处理 ,而不考虑 其实际类型 。不进行转换。

    4, 删除字段中空格CONDENSE

    语法:

    CONDENSE <c> [NO-GAPS].

    该语句去除字段 <c> 中的前导空格并用一个空格替换其它空格序列 。结果是左对齐单词, 每个单词用空格隔开。 如果指定附 加的 NO-GAPS, 则去除所有空格。

    DATA: STRING(25) VALUE ' one  two   three    four',
          LEN TYPE I.
    LEN = STRLEN( STRING ).
    WRITE: STRING, '!'.
    WRITE: / 'Length: ', LEN.
    CONDENSE STRING.
    LEN = STRLEN( STRING ).
    WRITE: STRING, '!'.
    WRITE: / 'Length: ', LEN.
    CONDENSE STRING NO-GAPS.
    LEN = STRLEN( STRING ).
    WRITE: STRING, '!'.
    WRITE: / 'Length: ', LEN.

    显示结果:

    请注意,字段 STRING 的总长度保持不变(注意!的位置),但删除的空格再次出现在右边。

    5, 搜索字符串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> 开始的词。

    单词之间用 空格、逗号 、句号、分 号、冒号、 问号、叹号 、括号、斜 杠、加号和等号等分隔 。

    代码:

    DATA STRING(30) VALUE 'This is a little sentence.'.
    WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'.
    ULINE /1(26).
    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 's*'.
    WRITE: / 's* ', SY-SUBRC UNDER 'SY-SUBRC',
                    SY-FDPOS UNDER 'SY-FDPOS'.

    显示结果:

    搜索字符字 段 <c> 的各种选项 (<options>) 如下:

    • ABBREVIATED

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

    •  STARTING AT <n1>

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

    • ENDING AT <n2>

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

    •  AND MARK

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

    代码:

    DATA: STRING(30) VALUE 'This is a fast first example.',
          POS TYPE I,
          OFF TYPE I.
    WRITE / STRING.
    SEARCH STRING FOR 'ft' ABBREVIATED.
    WRITE: / 'SY-FDPOS:', SY-FDPOS.
    POS = SY-FDPOS + 2.
    SEARCH STRING FOR 'ft' ABBREVIATED STARTING AT POS AND MARK.
    WRITE / STRING.
    WRITE: / 'SY-FDPOS:', SY-FDPOS.
    OFF = POS + SY-FDPOS - 1.
    WRITE: / 'Off:', OFF.

    请注意,在 找到单词‘ fast’ 之后,为了 查找包含‘ ft’的第 二个单词, 必须在偏移 量 SY-FDPOS 上加2,然 后从位置 POS 开始查找。 否则,会再 次找到单词 ‘fast’ 。要获得‘ first’ 相对于字段 STRING 开始的偏移 量,从 POS 和 SY-FDPOS 计算。

    字符串: 'Aaa-Bbb'  如何判断字符串中含有 '-'?

    并且将 '-' 后面的字符舍去?

    DATA string(20) VALUE 'Aaa-Bbb'.
    
    SEARCH string FOR '-'.
    IF sy-subrc = 0.  
        string = string+0(sy-fdpos).  
        WRITE string.
    ENDIF.

    6, 覆盖字符字段OVERLAY

    语法:

    OVERLAY <c1> WITH <c2> [ONLY <str>].

    该语句用字符串 <c2> 中相应位置上的内容“覆盖” 字段 <c1> 中包含 <str> 中字母的所有位置。<c2> 保持不变。

    如果省略 ONLY <str>, 则覆盖字段 <c1> 中所有包含空格的位置 ,如果没有空格,则<c1>不会被“覆盖”。 如果至少要替换 <c1> 中的一个字 符,则将 SY-SUBRC 设置为 0。对于所有其它情况 ,将SY-SUBRC 设置为 4。

    如果 <c1> 比 <c2> 长,则只覆 盖 <c2> 中的长度。

    解释:

    注意是"覆盖"不是”替换“!!!!!!!!!

    OVER '1 2 3' WITH '456   '.

    结果为:152 3。

    OVER '1 2 3' WITH '456' only '12'.

    结果为:4 6 3 。

    OVER '123' WITH '456'.

    结果为:123。(没有空格)

    OVER '1 2 3 ' WITH '456   ' only '13' .

    结果为:4 2   。

    代码:

    DATA: T(10) VALUE 'a c e g i ',
          STRING LIKE T,
          OVER(10) VALUE 'ABCDEFGHIJ',
          STR(2) VALUE 'ai'.
    STRING = T.
    WRITE STRING.
    WRITE / OVER.
    OVERLAY STRING WITH OVER.
    WRITE / STRING.
    STRING = T.
    OVERLAY STRING WITH OVER ONLY STR.
    WRITE / STRING.

    显示结果:

    T 与 OVER 的长度都是10。

    以上。

  • 相关阅读:
    Django模型层进阶
    Django模型层相关
    BOM与DOM
    JavaScript入门
    HTML基础
    子查询/联合分组/all与any/视图/事务
    表的查询
    mysql的多表关系
    Mysql基本操作
    Spider_基础总结2_Requests异常
  • 原文地址:https://www.cnblogs.com/datie/p/11434557.html
Copyright © 2011-2022 走看看