ABAP 新语法--Data Processing

这篇具有很好参考价值的文章主要介绍了ABAP 新语法--Data Processing。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. String Template

新语法引入了字符串模板,用于处理字符串连接以及格式转换
字符串模板在 | … | 之间定义,主要分为两部分,固定文本和变量
其中,变量只能在 { … } 内使用,大括号之外的所有字符均作为固定文本使用,空格始终不会被忽略,见例1
在使用变量时,可以通过控制语句来指定数据的显示格式,如例2,将日期用系统格式输出
在固定文本中,如果出现 | ,{ } 或 \ 等特殊字符时,需要使用转义符 \

  DATA: lv_str TYPE char5 VALUE '123'.

  " 在竖线中间没有被大括号包裹的部分将始终被视为固定文本,空格始终不被忽略
  lv_str = |  { lv_str }|.
  WRITE: / lv_str.

  lv_str = '123'.
  " 尾部被截断
  lv_str = |567{ lv_str }|.
  WRITE: / lv_str.

ABAP 新语法--Data Processing,ABAP学习记录,abap基础,SAP,ABAP

2. Format Option

2.1 COUNTRY

根据指定国家 cty 格式化数据(数值/日期/时间),参考表 T005X 【 COUNTRY = cty 】

  DATA lv_str TYPE string.
  DATA lv_num TYPE p DECIMALS 3.

  " country可以根据t005x国家的配置表自动选择合适的日期/时间/数值
  DATA(lv_date) = CONV d( '20230614' ).
  DATA(lv_time) = CONV t( '161810' ).
  lv_num  =  '123456.123'.

  WRITE: / '中国:'.
  lv_str = |{ lv_date COUNTRY = 'CN ' }|.
  WRITE: / lv_str.
  lv_str = |{ lv_time COUNTRY = 'CN ' }|.
  WRITE: / lv_str.
  lv_str = |{ lv_num  COUNTRY = 'CN ' }|.
  WRITE: / lv_str.

  WRITE: / .
  WRITE: /  '美国:'.
  lv_str = |{ lv_date COUNTRY = 'US ' }|.
  WRITE: / lv_str.
  lv_str = |{ lv_time COUNTRY = 'US ' }|.
  WRITE: / lv_str.
  lv_str = |{ lv_num  COUNTRY = 'US ' }|.
  WRITE: / lv_str.

ABAP 新语法--Data Processing,ABAP学习记录,abap基础,SAP,ABAP

2.2 ALPHA

添加/移除前导零,返回值与字段类型一致,可使用CONV转换成其他的类型进行处理。默认不做变更(RAW)【 ALPHA = [ IN | OUT | RAW ] 】
以物料号加前导0作为示例

  DATA lv_matnr_in  TYPE mara-matnr VALUE '123456'.
  DATA lv_matnr_out TYPE mara-matnr VALUE '012345'.

  " 这种方式会直接按数据元素的长度补前导0
  " 物料号直接补齐40位前导0,不太对劲
  lv_matnr_in  = |{ lv_matnr_in  ALPHA = IN }|.
  lv_matnr_out = |{ lv_matnr_out ALPHA = OUT }|.

  lv_matnr_in  = '123456'.
  lv_matnr_out = '012345'.

  " 这个是专用于料号编码转换的函数
  " 删前导0无所谓两种方法都行,补前导0特殊字段特殊处理
  CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
      input  = lv_matnr_in
    IMPORTING
      output = lv_matnr_in.

  CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
    EXPORTING
      input  = lv_matnr_out
    IMPORTING
      output = lv_matnr_out.

ABAP 新语法--Data Processing,ABAP学习记录,abap基础,SAP,ABAP
ABAP 新语法--Data Processing,ABAP学习记录,abap基础,SAP,ABAP

2.3 CASE

将字符串进行大小写转换,默认为 RAW,该选项不会更改大小写格式【 CASE = [ RAW | LOWER | UPPER ] 】

  " CASE 在String Template当中可以转换字母的大小写
  DATA(lv_str) = 'AbCdEfG'.

  WRITE / |{ lv_str CASE = LOWER }|.  " 小写
  WRITE / |{ lv_str CASE = UPPER }|.  " 大写
  WRITE / |{ lv_str CASE = RAW }|.    " 默认

2.4 ZERO

  " ZERO 关键字的存在类似与一个if else语句,若为0则置空,否则保留源字符串
  DATA(lv_zero) = |{ 0 ZERO = NO }|.
  DATA(lv_str)  = |{ 123 ZERO = NO }|.

3. String Functions

3.1 STRLEN

获取字符串长度,当字符串类型为 CHAR 时,尾部空格会被忽略,当字符串类型为 STRING 时,尾部空格不会被忽略,仍会按字符被计入长度内

DATA(lv_strlen_c) = strlen( CONV char10( |1234567    | ) ).		" 7
DATA(lv_strlen_s) = strlen( CONV string( |ACDEFGH    | ) ).     " 10

3.2 FIND

搜索指定字符串并计算偏移量,没有遍历到时返回 -1
可以使用 SUB ( 固定文本 ) 或者 REGEX ( 正则表达式 ) 作为指定条件进行搜索
CASE = [ abap_true | abap_false ]:大小写检查,默认为 abap_true,即区分大小写
OCC = N:指定字符串在第 N 次出现,当 N 是负数时,从字符串右边开始遍历
OFF = N LEN = M:指定搜索区域,从第 N+1 为字符开始长度为 M 的范围

DATA(lv_find_sub) = find( val = 'ABA123CAD' sub = 'a' case = ' ' occ = 3 ).
DATA(lv_find_reg) = find( val = 'ABA123CAD' regex = '\d' off = 0 len = 3 ). 

3.3 COUNT

  • COUNT
    用法与 FIND 类似,但是返回值是指定字符串出现的次数,因此不能指定 OCC 参数
  • COUNT_ANY_OF
    计算指定字符串中的任一字符出现的总次数
  • COUNT_ANY_NOT_OF
    计算非指定字符串中任意字符出现的总次数
    例:
DATA(lv_count) = count( val = 'ABA123CAD' sub = 'a' case = ' ' ).
DATA(lv_count_any) = count_any_of( val = 'ABA123CAD' sub = '1B' ).
DATA(lv_count_not) = count_any_not_of( val = 'ABA123CAD' sub = '1B' ).

3.4 REPLACE

替换字符串,可以指定位置进行替换,也可以查找指定字符串并替换
WITH = new 指定用于替换的字符串
OCC = N 指定字符串第 N 次出现时进行替换,N 为 0 时表示需要全部替换
其他参数可参照 FIND 表达式
例:

DATA(lv_replace) = replace( val = 'ABA123CAD' off = 0 len = 4 with = '@12@' ).
DATA(lv_replace_sub) = replace( val = 'ABA123CAD' sub = 'a' with = '@' case = ' ' ).
DATA(lv_replace_reg) = replace( val = 'ABA123CAD' regex = '\d' with = '#' occ = 0 ). 

3.5 INSERT

插入字符串,可以使用 OFF 指定插入的位置,默认为 0
例:

DATA(lv_insert) = insert( val = 'ABCD' sub = '123' off = 2 ). 

3.6 CONDENSE

压缩字符串,默认会移除头部/尾部的空格,其他部分的空格都会被压缩至 1 位
DEL = del 指定需要删除的字符,指定后,从字符串两侧开始遍历并删除字符,直到出现非指定字符
FROM = from TO = to 处理完 DEL 后,再遍历字符串,将 from 中出现的字符,替换成 to 的第一位字符
在遍历过程中,当同一个字符连续出现时,会被当成一个整体进行替换,所有字符均区分大小写
例:

DATA(lv_condense_space) = condense( |  This  is   test | ).

DATA(lv_condense) = condense( val  = '  XXThis ISSS X sTringXX'
                              del  = |X |
                              from = 'TS' 
                              to   = 'to' ). 

3.7 CONCAT_LINES_OF

将内表中所有的记录连接起来,通过 sep 指定分隔符
例:

DATA: lt_data TYPE TABLE OF char10.
lt_data = VALUE #( ( 'ABC' ) ( '123' ) ( 'DEF' ) ).
DATA(lv_concat_lines) = concat_lines_of( table = lt_data sep = '@' ). 

3.8 REVERSE

字符串反转
例:

DATA(lv_reverse) = reverse( 'DEMO' ). 

3.9 TO_UPPER/TO_LOWER

将字符串转换成大写/小写
例:

DATA(lv_to_mixed) = to_mixed( val = 'THIS is @A STRIN@G' sep = '@' case = 'X’ min = 10 ).
DATA(lv_from_mixed) = from_mixed( val = 'This IS a string' ).
DATA(lv_to_upper) = to_upper( val = 'this IS a string' ).
DATA(lv_to_lower) = to_lower( val = 'THIS IS A STRING' ). 

4. Internal Table

4.1 Expressions

内表读取不再需要使用 READ TABLE,直接使用类似于数组的方式去读取
与READ TABLE读表方式类似,可以通过 INDEX 去读取指定位置的行,也可以根据条件去获取行,但无法指定BINARY SEARCH
默认情况下如果没有读到记录,会抛出异常 CX_SY_ITAB_LINE_NOT_FOUND
使用 OPTIONAL 语句时,没有读到记录也不会抛异常,而是返回空的结构
使用 DEFAULT 语句,在没有读到记录时,返回一个默认值,如果系统不支持这两种,则需要使用 TRY 语句来捕获异常

SELECT carrid, connid, countryfr, cityfrom
  FROM spfli INTO TABLE @DATA(lt_table) UP TO 3 ROWS.

DATA(lv_line_index) = lt_table[ 1 ]-carrid.

DATA(lwa_line_field) = lt_table[ carrid = 'AZ'
                                 connid = '0555' ].

DATA(lwa_line_optional) = VALUE #( lt_table[ 4 ] OPTIONAL ).

DATA(lwa_line_default) = VALUE #( lt_table[ 4 ] DEFAULT VALUE #( carrid = 'ZZ'
                                                                 connid = '0239'
                                                                 countryfr = 'SU'
                                                                 cityfrom = 'CITY_NO' ) ). 

4.2 Functions

LINES 计算内表总行数
LINE_EXISTS 判断根据特定条件能否在内表中读取到记录,返回值为布尔型数据
LINE_INDEX 获取内表中满足特定条件的记录所在的行数( INDEX )
例:文章来源地址https://www.toymoban.com/news/detail-653001.html

SELECT * FROM spfli INTO TABLE @DATA(lt_table) UP TO 3 ROWS.

DATA(lv_lines) = lines( lt_table ).
DATA(lv_exist) = xsdbool( line_exists( lt_table[ carrid = 'AZ' ] ) ).
DATA(lv_index) = line_index( lt_table[ carrid = 'AZ' ] ). 

到了这里,关于ABAP 新语法--Data Processing的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SAP ABAP技术文章合集_微信公众号:ABAP猿

    序号 文章标题 01 ABAP OOALV-基本显示 02 ABAP OOALV-排序、过滤 03 ABAP OOALV-合计、小计 04 ABAP OOALV-选择模式、触发事件 05 ABAP OOALV-隐藏列、修改列标题、添加图标列、调整列位置 06 ABAP OOALV-固定列、鼠标悬停文本 07 ABAP OOALV-颜色(列、行、单元格) 08 ABAP OOALV-样式(列、行、单元格

    2024年02月03日
    浏览(38)
  • ABAP调用阿里云接口-短信服务-HTTP协议及签名(abap版本)<转载>

    原文链接:https://blog.csdn.net/xiefireworks/article/details/113037650 阿里云接口文档请参考官网地址 https://help.aliyun.com/document_detail/59210.html?spm=5176.8195934.J_5834642020.5.11ba4378DLVi4O 此处仅介绍使用ABAP完成阿里云短信服务签名请求的完成。 第一步:请求参数 1 abap 生成的uuid为32位不带“-”

    2024年02月16日
    浏览(33)
  • ABAP 内表杂例

    **增加内表   \\\"1.1 要将内表仅仅用于存储数据,处于性能方面的考虑,建议使用APPEND   \\\"1.2 要计算数字字段之和或要确保内表中没有出现重复的条目,请使用COLLECT语句   \\\"1.3 要在内表现有行之前插入新行,请使用IMSERT语句 ** 内表数据插入 **APPEND gw_student TO gt_student. *

    2024年01月19日
    浏览(21)
  • SAP/ABAP(二)

    一、循环结构 二、条件判断 三、异常处理(cx-root) 四、结构体,工作区 五、内表

    2024年02月17日
    浏览(31)
  • ABAP UT(单元测试)

    UT的重点是处理外部依赖(dependency),外部依赖主要是指当前需要测试的类里用到了其他类,Function Module或者是SQL;可能存在外部依赖的地方是类的属性,方法和方法参数。 处理外部依赖的做法之一是隔离(Isolation),让外部依赖返回我们需要的值从而达到测试的目的,常规

    2024年02月05日
    浏览(22)
  • abap Loop循环用法

    LOOP AT itab - Basic Form 语句LOOP AT itab的这个变体对每个读取行执行一次LOOP和ENDLOOP之间的语句块。 ◾ 输出响应结果确定读取行内容的方式和位置。 ◾ 执行循环时使用的表键可以在条件中确定。要么读取所有行,要么指定条件来限制读取哪些行。 ◾ AT…ENDAT可用于定义控制级处

    2024年02月13日
    浏览(26)
  • ABAP: SQL 多值查询

    基础查数据 问题举例:例如查物料类型为ZFRT、ZROH和ZRSA的物料编码。 1、直接查询,三种不同类型的物料类型是或的关系。 2、如果对1进行 优化 ,三种物料类型放在列表项中,使用IN,这样查询等价于1. 3、定义区间函数,RANGE 内表 https://www.cnblogs.com/buduzhiren/p/13131483

    2024年02月13日
    浏览(21)
  • ABAP:调用HTTP接口详解

    DATA:pv_http_client TYPE REF TO if_http_client, pv_url TYPE string. 1.可以通过URL连接或者IP:端口连接,根据实际情况而定, 建议使用URL,省去地址服务器域名转换 \\\"URL接连 CALL METHOD cl_http_client=create_by_url EXPORTING url = pv_url IMPORTING client = pv_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2

    2023年04月12日
    浏览(34)
  • ABAP IDOC 2 XML

    有个需求,外围系统希望我们给到一个IDOC 记录的样例,但是我们we02中并无法看到 就找了一个demo去直接展示IDOC内容   效果如下

    2024年01月18日
    浏览(27)
  • ChatGPT的ABAP能力如何?

    ChatGPT是最近的热门话题,作为语言模型,它擅长处理各种语言相关的问题。显然,ABAP也是一种语言,ABAP开发者的很大一部分工作就是把自然语言和ABAP语言做互相转换,这应该也在ChatGPT的擅长范畴内。那么ChatGPT能做好ABAP开发者的工作吗?本文记录了我的一些使用经验和感想

    2024年02月09日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包