zoukankan      html  css  js  c++  java
  • ABAP 字符串处理

    SAP ABAP 处理字符串串串串串串串串(详细)

    关于ABAP中处理字符串的方法,非常详细,学习过程中总结一下分享给大家,,,

    ABAP/4 提供多个处理类型 C 即字符串 的数据对象的关键字。

    处理字符串 的方法有:

    1.拆分字符串split

    2.连接字符串

    3.获得字符串长度

    4.压缩字段内容(去空格)

    5.搜索字符串

    6.覆盖字符字段

    7.替换字段内容

    8.转换大/小写并替换字符

    9.转换为可排序格式

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

    11.MOVE TO 分配字符串部分

    12.字符串的比较

    -----------------------------------

    1.拆分字符串

    语法:

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

    复制代码
     1 DATA: STRING(60),
     2       P1(20) VALUE '',
     3       P2(20) VALUE '',
     4       P3(20) VALUE '',
     5       P4(20) VALUE '',
     6       DEL(3) VALUE '***'.
     7 STRING = ' Part 1 *** Part 2 *** Part 3 *** Part 4 *** Part 5'.
     8 WRITE STRING.
     9 SPLIT STRING AT DEL INTO P1 P2 P3 P4.
    10 WRITE: /'P1:' , P1.
    11 WRITE: /'P2:' , P2.
    12 WRITE: /'P3:' , P3.
    13 WRITE: /'P4:' , P4.
    复制代码

    该过程的输 出如下:  

    Part 1 *** Part 2 *** Part 3 *** Part 4 *** Part 5

    P1:Part 1  

    P2:Part 2  

    P3:Part 3  

    P4:Part 4 *** Part 5

    2.连接字符串

    语法:

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

    复制代码
     1 DATA: C1(10)  VALUE  'Sum',
     2       C2(3)   VALUE  'mer',
     3       C3(5)   VALUE  'holi ',
     4       C4(10)  VALUE  'day',
     5       C5(30),
     6       SEP(3)  VALUE ' - '.
     7 CONCATENATE C1 C2 C3 C4 INTO C5.
     8 WRITE C5.
     9 CONCATENATE C1 C2 C3 C4 INTO C5 SEPARATED BY SEP.
    10 WRITE / C5.
    复制代码

    该过程的输 出如下:

    Summerholiday

    Sum - mer - holi - day

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

    3.获得字符串长度

    语法:

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

    复制代码
     1 DATA: INT TYPE I,
     2       WORD1(20) VALUE '12345'. 
     3       WORD2(20).
     4       WORD3(20) VALUE '   4         '. 
     5 INT = STRLEN( WORD1 ). 
     6 WRITE   INT.
     7 INT = STRLEN( WORD2 ). 
     8 WRITE / INT.
     9 INT = STRLEN( WORD3 ). 
    10 WRITE / INT.
    复制代码

    结果分别是 5,0 和 4。

    WORD3(20) VALUE '   4         '. 结果为 4 。

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

    4.压缩字段内容

    语法:

    CONDENSE <c> [NO-GAPS].

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

    复制代码
     1 DATA: STRING(25) VALUE ' one  two   three    four',
     2       LEN TYPE I.
     3 LEN = STRLEN( STRING ).
     4 WRITE: STRING, '!'.
     5 WRITE: / 'Length: ', LEN.
     6 CONDENSE STRING.
     7 LEN = STRLEN( STRING ).
     8 WRITE: STRING, '!'.
     9 WRITE: / 'Length: ', LEN.
    10 CONDENSE STRING NO-GAPS.
    11 LEN = STRLEN( STRING ).
    12 WRITE: STRING, '!'.
    13 WRITE: / 'Length: ', LEN.
    复制代码

    该过程的输出如下:  

    one  two   three    four !

    Length:          25

    one two three four       !

    Length:          18

    onetwothreefour          !

    Length:          15

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

    5.搜索字符串

    语法:

    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> 开始的词。  

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

    复制代码
     1 DATA STRING(30) VALUE 'This is a little sentence.'.
     2 WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'.
     3 ULINE /1(26).
     4 SEARCH STRING FOR 'X'.
     5 WRITE: / 'X', SY-SUBRC UNDER 'SY-SUBRC',
     6                SY-FDPOS UNDER 'SY-FDPOS' 
     7 SEARCH STRING FOR 'itt   '.
     8 WRITE: / 'itt   ', SY-SUBRC UNDER 'SY-SUBRC',
     9                    SY-FDPOS UNDER 'SY-FDPOS' 
    10 SEARCH STRING FOR '.e .'.
    11 WRITE: / '.e .', SY-SUBRC UNDER 'SY-SUBRC',
    12                   SY-FDPOS UNDER 'SY-FDPOS'.
    13 SEARCH STRING FOR '*e'.
    14 WRITE: / '*e ', SY-SUBRC UNDER 'SY-SUBRC',
    15                 SY-FDPOS UNDER 'SY-FDPOS'.
    16 
    17 SEARCH STRING FOR 's*'.
    18 WRITE: / 's* ', SY-SUBRC UNDER 'SY-SUBRC',
    19                 SY-FDPOS UNDER 'SY-FDPOS'.
    复制代码

    该过程的输 出如下:

    SEARCHED   SY-SUBRC   SY-FDPOS

    X                   4               0

    itt                  0               11

    .e .            0            15

    *e             0            10

    s*                 0                17

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

    • ABBREVIATED

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

    •  STARTING AT <n1>

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

    • ENDING AT <n2>

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

    •  AND MARK

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

    复制代码
     1 DATA: STRING(30) VALUE 'This is a fast first example.',
     2       POS TYPE I,
     3       OFF TYPE I.
     4 WRITE / STRING.
     5 SEARCH STRING FOR 'ft' ABBREVIATED.
     6 WRITE: / 'SY-FDPOS:', SY-FDPOS.
     7 POS = SY-FDPOS + 2.
     8 SEARCH STRING FOR 'ft' ABBREVIATED STARTING AT POS AND MARK.
     9 WRITE / STRING.
    10 WRITE: / 'SY-FDPOS:', SY-FDPOS.
    11 OFF = POS + SY-FDPOS -1.
    12 WRITE: / 'Off:', OFF.
    复制代码

    该过程的输出如下:

    This is a fast first example.

    SY-FDPOS:    10

    This is a fast FIRST example.

    SY-FDPOS:    4

    Off:        15

    请注意,在 找到单词‘ 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 <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.
    复制代码

    该过程的输 出如下:

    a c e g i

    ABCDEFGHIJ

    aBcDeFgHiJ

    A c e g I

    T 与 OVER 的长度都是10。

    7.替换字段内容

    语法:

    REPLACE <str1> WITH <str2> INTO <c> [LENGTH <l>].

      ABAP/4 搜索字段 <c> 中模式 <str1> 前 <l> 个位置第一 次出现的地 方。如果未 指定长度, 按全长度搜 索模式 <str1>。 然后,语句 将模式 <str1> 在字段 <c> 中第一次出 现的位置用 字符串 <str2> 替换。如果 指定长度<l>, 则只替换模 式的相关部 分。 如果将系统 字段 SY-SUBRC 的返回代码 设置为0, 则说明在 <c> 中找到 <str1> 且已用<str2> 替换。非 0 的返回代码 值意味着未 替换。

    <str1>、 <str2> 和 <len> 可为变量。

    复制代码
     1 DATA: T(10) VALUE 'abcdefghij',
     2       STRING LIKE T,
     3       STR1(4) VALUE 'cdef',
     4       STR2(4) VALUE 'klmn',
     5       STR3(2) VALUE 'kl',
     6       STR4(6) VALUE 'klmnop',
     7       LEN TYPE I VALUE 2.
     8 STRING = T.
     9 WRITE STRING.
    10 REPLACE STR1 WITH STR2 INTO STRING.
    11 WRITE / STRING.
    12 STRING = T.
    13 REPLACE STR1 WITH STR2 INTO STRING LENGTH LEN.
    14 WRITE / STRING.
    15 STRING = T.
    16 REPLACE STR1 WITH STR3 INTO STRING.
    17 WRITE / STRING.
    18 STRING = T.
    19 REPLACE STR1 WITH STR4 INTO STRING.
    20 WRITE / STRING.
    
    复制代码

    该过程的输 出如下:

    abcdefghij

    abklmnghij

    abklmnefgh

    abklghij

    abklmnopgh

    请注意,在最后一行中字段 STRING 是如何在右 边截断的。长度为 4 的搜索模式 ‘cdef’ 用长度为6的 ‘klmnop’ 替换。然后 ,填充字段 STRING 的剩余部分直到字段结尾。

    8.转换大/小写并替换字符

    可以将字母 转换大/小 写或使用替 换规则。 要转换大/小 写,请使用 TRANSLATE 语句,用法 如下:

    语法

    TRANSLATE <c> TO UPPER CASE. TRANSLATE <c> TO LOWER CASE.

    这些语句将 字段 <c> 中的所有小 写字母转换 成大写或反 之。

    使用替换规 则时,请使 用以下语法 :

    语法

    TRANSLATE <c> USING <r>.

    该语句根据 字段 <r> 中存储的替 换规则替换 字段 <c> 的所有字符 。<r> 包含成对字 母,其中每 对的第一个 字母用第二 个字母替换 。<r> 可为变量。 有关包含更 复杂替换规 则的 TRANSLATE 语句的更多 变体,参见 关键字文档 。

    复制代码
     1 DATA: T(10) VALUE 'AbCdEfGhIj',
     2       STRING LIKE T,
     3       RULE(20) VALUE 'AxbXCydYEzfZ'.
     4 STRING = T.
     5 WRITE STRING.
     6 TRANSLATE STRING TO UPPER CASE.
     7 WRITE / STRING.
     8 STRING = T.
     9 TRANSLATE STRING TO LOWER CASE.
    10 WRITE / STRING.
    11 STRING = T.
    12 TRANSLATE STRING USING RULE.
    13 WRITE / STRING.
    复制代码

    该过程的输 出如下:

    AbCdEfGhIj

    ABCDEFGHIJ

    abcdefghij

    xXyYzZGhIj

    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 是一个表格 ,从中进行 平台相关的 文本环境维 护。在语句 SET LOCALE 期间,系统 根据

    TCP0C中 的条目设置 文本环境。 除了内部传 送的平台特 性之外,用 SET 语句指定表 关键字。如 果 <lg> 等于 SPACE ,则系统根 据用户主记 录设置文本 环境。如果 对于指

    定的 关键字在表 中无条目, 则系统将产 生运行错误 。

    文本环境影 响 ABAP/4 中依赖于字 符集的所有 操作。

    10.移动字段内容

     按给定位置 数移动字段串

    要按给定位 置数移动字 段内容,请 使用 SHIFT 语句,用法 如下:

    语法

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

    该语句将字 段 <c> 移动 <n> 个位置。如 果省略 BY <n> PLACES, 则将 <n> 解释为一个 位置。如果 <n> 是 0 或负值,则 <c> 保持不变。 如果 <n> 超过 <c> 长度,则 <c> 用空格填充 。<n> 可为变量。 对不同(<mode>) 选项,可以 按以下方式 移动字段 <c>:

    •  LEFT:向左移动 <n> 位置,右边 用 <n> 个空格填充 (默认设置 )。
    •  RIGHT:向右移动 <n> 位置,左边 用 <n> 个空格填充 。
    •  CIRCULAR:向左移动 <n> 位置,以便 左边 <n> 个字符出现 在右边。
    复制代码
     1 DATA: T(10) VALUE 'abcdefghij',
     2       STRING LIKE T.
     3 STRING = T.
     4 WRITE STRING.
     5 SHIFT STRING.
     6 WRITE / STRING.
     7 STRING = T.
     8 SHIFT STRING BY 3 PLACES LEFT.
     9 WRITE / STRING.
    10 STRING = T.
    11 SHIFT STRING BY 3 PLACES RIGHT.
    12 WRITE / STRING.
    13 STRING = T.
    14 SHIFT STRING BY 3 PLACES CIRCULAR.
    15 WRITE / STRING.
    复制代码

    输出为:

    abcdefghij
    bcdefghij
    defghij
       abcdefg
    defghijabc 

    移动字段串 到给定串

    要移动字段 内容以到给 定串,则使 用 SHIFT 语句,

    语法:

    SHIFT <c> UP TO <str> <mode>.

    ABAP/4 查找 <c> 字段内容直 到找到字符 串 <str> 并将字段 <c> 移动到字段 边缘。 <mode> 选项与按给定位置数移动字段串中所 述相同。<str> 可为变量。 如果 <c> 中找不到 <str>, 则将 SY-SUBRC 设置为 4 并且不移动 <c>。否 则,将 SY-SUBRC 设置为0。

    复制代码
     1 DATA: T(10) VALUE 'abcdefghij',
     2       STRING LIKE T,
     3       STR(2) VALUE 'ef'.
     4 STRING = T.
     5 WRITE STRING.
     6 SHIFT STRING UP TO STR.
     7 WRITE / STRING.
     8 STRING = T.
     9 SHIFT STRING UP TO STR LEFT.
    10 WRITE / STRING.
    11 STRING = T.
    12 SHIFT STRING  UP TO STR RIGHT.
    13 WRITE / STRING.
    14 STRING = T.
    15 SHIFT STRING  UP TO STR CIRCULAR.
    16 WRITE / STRING.
    复制代码

    输出如下:

    abcdefghij
    efghij
    efghij
        abcdef
    efghijabcd

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

    假设第一个或最后一个 字符符合一定条件,则 可用 SHIFT 语句将字段 向左或向右 移动。为此 ,请使用以 下语法:

    语法

    SHIFT <c> LEFT  DELETING LEADING  <str>.

    SHIFT <c> RIGHT DELETING TRAILING <str>.

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

    复制代码
     1 DATA: T(14) VALUE '    abcdefghij',
     2       STRING LIKE T,
     3       STR(6) VALUE 'ghijkl'.
     4 STRING = T.
     5 WRITE STRING.
     6 SHIFT STRING LEFT DELETING LEADING SPACE.
     7 WRITE / STRING.
     8 STRING = T.
     9 SHIFT STRING RIGHT DELETING TRAILING STR.
    10 WRITE / STRING.
    复制代码

    该过程输出 如下:

        abcdefghij
    abcdefghij
            abcdef

    11.MOVE TO 分配字符串部分

    MOVE 语句的以下 变体只使用 类型 C 字段:

    语法:

    MOVE <c1> TO <c2> PERCENTAGE <p> [RIGHT].

    将字符字段 <c1> 的左边,百分比 <p>的部分复制到 <c2>,结果为左对齐。 ( 如果用 RIGHT 选项指定, 则为右对齐 )。<p> 值可为 0 和 100 之间的任何数。将要从 <C1> 复制的长度 取整为下一个整数。 如果语句中 某一参数不是类型 C,则忽略参数 PERCENTAGE。 

    1 DATA: C1(10) VALUE 'ABCDEFGHIJ',
    2       C2(10).
    3 MOVE C1 TO C2 PERCENTAGE 40.
    4 WRITE C2.
    5 MOVE C1 TO C2 PERCENTAGE 40 RIGHT.
    6 WRITE / C2.

    该过程的输 出如下:

    ABCD

               ABCD

    12.比较字符串

    要比较字符 串(类型 C)和数字 文本(类型 N),可以 在逻辑表达 式中使用下 列运算符。

    <运算符>          含 义

    CO                   仅包含

    CN                   不仅包含

    CA                   包含任何

    NA                   不包含任何

    CS                   包含字符串

    NS                   不包含字符串  

    CP                    包含模式

    NP                    不包含模式

    因为除类型 N 和 C 外,系统不 能执行任何 其它类型转 换,所以, 在进行包含 这些运算之 一的比较时 ,操作数应 该是类型 N 或 C。 运算符的功 能如下:

    CO (仅包含)

    如果 <f1> 仅包含 <f2> 中的字符, 则逻辑表达 式 <f1> CO <f2> 为真。该比 较区分大小 写,并包括 尾部空格。 如果比较结 果为真,则 系统字段 SY-FDPOS 包括 <f1> 的长度。如 果为假,则 SY-FDPOS 包含 <f1> 中第一个未 在 <f2> 内出现的字 符的偏移量 。

    CN (不仅包含 )

    如果 <f1> 还包含 <f2> 之外的其他 字符,则逻 辑表达式 <f1> CN <f2> 为真。该比 较区分大小 写,并包括 尾部空格。 如果比较结 果为真,则 系统字段 SY-FDPOS 包含 <f1> 中第一个未 同时在 <f2> 中出现的字 符的偏移量 。如果为假 ,SY-FDPOS 包含 <f1> 的长度。

    CA (包含任何 )

    如果 <f1> 至少包含 <f2> 的一个字符 ,则逻辑表 达式 <f1> CA <f2> 为真。该比 较区分大小 写。如果比 较结果为真 ,则系统字 段 SY-FDPOS 包含 <f1> 中第一个也 在 <f2> 中出现的字 符的偏移量 。如果为假 ,SY-FDPOS 包含 <f1> 的长度。

    NA (不包含任 何)

    如果 <f1> 不包含 <f2> 的任何字符 ,则逻辑表 达式 <f1> NA <f2> 为真。该比 较区分大小 写。如果比 较结果为真 ,则系统字 段 SY-FDPOS 包含 <f1>的 长度。如果 为假,则 SY-FDPOS 包含 <f1> 中在 <f2> 内出现的第 一个字符的 偏移量。

    CS (包含字符 串)

    如果 <f1> 包含字符串 <f2>, 则逻辑表达 式 <f1> CS <f2> 为真。忽略 尾部空格并 且比较不区 分大小写。 如果比较结 果为真,则 系统字段 SY-FDPOS 包含 <f2> 在 <f1> 中的偏移量 。如果为假 ,SY-FDPOS 包含 <f1> 的长度。

    NS (不包含字 符串)

    如果 <f1> 不包含字符 串 <f2>, 则逻辑表达 式 <f1> NS <f2> 为真。忽略 尾部空格且 比较不区分 大小写。如 果比较为真 ,系统字段 SY-FDPOS 包含 <f1> 的长度。如 果为假,系 统字段 SY-FDPOS 包含 <f2> 在 <f1> 中的偏移量 。

    CP (包含模式 )

    如果 <f1> 包含模式 <f2>, 则逻辑表达 式 <f1> CP <f2> 为真。如果 <f2> 属于类型 C,则可以 在 <f2> 中使用下列 通配符:

    •  * 用于任何字 符串
    •  + 用于任何单 个字符

    忽略尾部空 格且比较不 区分大小写 。如果比较 结果为真, 系统字段 SY-FDPOS 包含 <f2> 在 <f1> 中的偏移量 。如果为假 ,SY-FDPOS 包含 <f1> 的长度。 如果要对 <f2> 中的特殊字 符进行比较 ,请将换码 字符 # 放到其前面 。可以使用 换码字符 # 指定

    • 大小写字 符
    • 通配符 "*"(输 入 #*)
    • 通配符 "+" (输入 #+)
    • 换码符号 本身 (输入 ##)
    • 字符串结 尾的空格 (输入 #___)

    NP (不包含模 式)

    如果 <f1> 不包含模式 <f2>, 则逻辑表达 式 <f1> NP <f2> 为真。在<f2>中 ,可以使用 与 CP 相同的通配 符和换码字 符。 忽略尾部空 格且比较不 区分大小写 。如果比较 结果为真, 则系统字段 SY-FDPOS 包含 <f1>. 的长度,如 果为假,SY-FDPOS 包含 <f2> 在 <f1> 中的偏移量 。

    复制代码
    DATA: F1(5) TYPE C VALUE <f1>,
              F2(5) TYPE C VALUE <f2>.
    IF F1 <operator> F2.
       WRITE: /  'Comparison true, SY-FDPOS=', SY-FDPOS.
    ELSE.
       WRITE: /  'Comparison false, SY-FDPOS=', SY-FDPOS.
    ENDIF.
    复制代码

    下表列出该 程序的执行 结果,取决 于所用的运 算符和 F1 / F2 字段。

    <f1>    <operator>    <f2>      Result     SY-FDPOS 
                                                  
    'BD   '      CO             'ABCD '      真          5 
                                                  
    'BD   '      CO         'ABCDE'      假          2 
                                                  
    'ABC12'    CN         'ABCD '      真          3  
                                                  
    'ABABC'    CN         'ABCD '      假          5 
                                                  
    'ABcde'     CA         'Bd   '         真          1 
                                                  
    'ABcde'     CA         'bD   '         假          5 
                                                  
    'ABAB '     NA         'AB   '         假          0 
                                                  
    'ababa'     NA         'AB   '         真          5 
                                                  
    'ABcde'     CS         'bC   '         真          1 
                                                  
    'ABcde'     CS         'ce   '          假          5 
                                                  
    'ABcde'     NS         'bC   '          假          1 
                                                  
    'ABcde'     NS         'ce   '          真          5 
                                                  
    'ABcde'     CP         '*b*'           真          1 
                                                  
    'ABcde'     CP         '*#b*'         假          5 
                                                  
    'ABcde'     NP         '*b*'           假          1 
                                                  
    'ABcde'     NP         '*#b*'         真          5

    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/s/blog_6e19f37f0100xppq.html

    -----------------结束---------------------

    本文中的内容大多来源于HELP文档,总结下来,以便在项目中查找参考。。。。。

    PS:

    比较所有的字段类型    
        <运算符>
        EQ 等于
         = 等于
        NE 等于
        <>  等于
        ><  等于
        LT
        小于
        LE 于等于
        <= 于等于
        GT
        大于
        GE 于等于
        >= 于等于
    比较字符串   和数字串    
        <运算符>
        CO 仅包
        CN 不仅包含
        CA 含任何
        NA 包含任何
        CS 含字符串
        NS 包含字符串
         CP 包含模
        NP 不包含模式
     
  • 相关阅读:
    Leetcode 283. Move Zeroes
    算法总结
    随机森林
    BRICH
    DBSCAN算法
    k-means算法的优缺点以及改进
    soket编程
    手电筒过河
    字符串反转
    URAL 1356. Something Easier(哥德巴赫猜想)
  • 原文地址:https://www.cnblogs.com/rainysblog/p/7683859.html
Copyright © 2011-2022 走看看