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.

在这里插入图片描述

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.

在这里插入图片描述

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'EXPORTINGinput  = lv_matnr_inIMPORTINGoutput = lv_matnr_in.CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'EXPORTINGinput  = lv_matnr_outIMPORTINGoutput = lv_matnr_out.

在这里插入图片描述
在这里插入图片描述

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, cityfromFROM 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 )
例:

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' ] ). 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/40393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Swagger】只需要三步,就可以让你的项目实现Swagger在线文档,实时浏览,修改展示

目录 1. pom.xml文件中添加Swagger的jar包 2. 配置Swagger 3. 项目启动中加入Swagger注解的开关,启动Swagger功能 4. 启动项目,查看效果 Swagger 的功能这里就不多说明了,相信大家都懂的,好奇多问一句,大家有知道其…

zookeeper安装配置采坑流程

安装 wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.2/apache-zookeeper-3.8.2-bin.tar.gz解压: tar -zxvf apache-zookeeper-3.8.2-bin.tar.gz如下 bin目录下文件是可执行文件 conf目录文件是配置文件 修改zoo.cfg(复制zoo_sample&#x…

从0搭建ECG深度学习网络

本篇博客介绍使用Python语言的深度学习网络,从零搭建一个ECG深度学习网络。 任务 本次入门的任务是,筛选出MIT-BIH数据集中注释为[‘N’, ‘A’, ‘V’, ‘L’, ‘R’]的数据作为本次数据集,然后按照8:2的比例划分为训练集&…

什么是DNS服务器的层次化和分布式?

DNS (Domain Name System) 的结构是层次化的,意味着它是由多个级别的服务器组成,每个级别负责不同的部分。以下是 DNS 结构的层次: 根域服务器(Root Servers): 这是 DNS 层次结构的最高级别。全球有13组根域…

【云原生】Docker 详解(二):Docker 架构及工作原理

Docker 详解(二):Docker 架构及工作原理 Docker 在运行时分为 Docker 引擎(服务端守护进程) 和 客户端工具,我们日常使用各种 docker 命令,其实就是在使用 客户端工具 与 Docker 引擎 进行交互。…

[oneAPI] 手写数字识别-LSTM

[oneAPI] 手写数字识别-LSTM 手写数字识别参数与包加载数据模型训练过程结果 oneAPI 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolk…

Curson 编辑器

Curson 汉化与vacode一样 Curson 自带chat功能 1、快捷键ctrlk(代码中编辑) 2、快捷键ctrll 右侧打开窗口

小程序项目组件的基本应用

宿主环境:程序运行必须依赖的环境 小程序的宿主环境 ---->手机微信(定位、扫码、支付等) 小程序的通信模型: 渲染层和逻辑层之间的通信(微信客户端转发)逻辑层和第三方服务器之间的通信(微信客户端转发) 小程序的运行机制: 启动&#xff1…

vue基础知识五:请描述下你对vue生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?

一、生命周期是什么 生命周期(Life Cycle)的概念应用很广泛,特别是在政治、经济、环境、技术、社会等诸多领域经常出现,其基本涵义可以通俗地理解为“从摇篮到坟墓”(Cradle-to-Grave)的整个过程在Vue中实…

Python opennsfw/opennsfw2 图片/视频 鉴黄 笔记

nsfw&#xff08; Not Suitable for Work&#xff09;直接翻译就是 工作的时候不适合看&#xff0c;真文雅 nsfw效果&#xff0c;注意底部的分数 大体流程&#xff0c;输入图片/视频&#xff0c;输出0-1之间的数字&#xff0c;一般情况下&#xff0c;Scores < 0.2 认为是非…

7zip分卷压缩

前言 有些项目上传文件大小有限制 压缩包大了之后传输也会比较慢 解决方案 我们可以利用7zip压缩工具对文件进行分卷压缩 利用7zip压缩工具进行分卷压缩 查看待压缩文件大小 压缩完成之后有300多M&#xff0c;我们用100M去进行分卷压缩 选择待压缩的文件夹&#xff0c;右…

网络安全 Day30-运维安全项目-容器架构上

容器架构上 1. 什么是容器2. 容器 vs 虚拟机(化) :star::star:3. Docker极速上手指南1&#xff09;使用rpm包安装docker2) docker下载镜像加速的配置3) 载入镜像大礼包&#xff08;老师资料包中有&#xff09; 4. Docker使用案例1&#xff09; 案例01&#xff1a;:star::star::…

《内网穿透》无需公网IP,公网SSH远程访问家中的树莓派

文章目录 前言 如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar内网穿透4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地…

【JavaEE基础学习打卡02】是时候了解Java EE了!

目录 前言一、为什么要学习Java EE二、Java EE规范介绍1.什么是规范&#xff1f;2.什么是Java EE规范&#xff1f;3.Java EE版本 三、Java EE应用程序模型1.模型前置说明2.模型具体说明 总结 前言 &#x1f4dc; 本系列教程适用于 Java Web 初学者、爱好者&#xff0c;小白白。…

java接口导出csv

1、背景介绍 项目中需要导出数据质检结果&#xff0c;本来使用Excel&#xff0c;但是质检结果数据行数过多&#xff0c;导致用hutool报错&#xff0c;因此转为导出csv格式数据。 2、参考文档 https://blog.csdn.net/ityqing/article/details/127879556 工程环境&#xff1a;…

Redis-分布式锁!

分布式锁&#xff0c;顾名思义&#xff0c;分布式锁就是分布式场景下的锁&#xff0c;比如多台不同机器上的进程&#xff0c;去竞争同一项资源&#xff0c;就是分布式锁。 分布式锁特性 互斥性:锁的目的是获取资源的使用权&#xff0c;所以只让一个竞争者持有锁&#xff0c;这…

【算法】排序+双指针——leetcode三数之和、四数之和

三数之和 &#xff08;1&#xff09;排序双指针 算法思路&#xff1a; 和之前的两数之和类似&#xff0c;我们对暴力枚举进行了一些优化&#xff0c;利用了排序双指针的思路&#xff1a; 我们先排序&#xff0c;然后固定⼀个数 a &#xff0c;接着我们就可以在这个数后面的区间…

OpenCV实例(九)基于深度学习的运动目标检测(一)YOLO运动目标检测算法

基于深度学习的运动目标检测&#xff08;一&#xff09; 1.YOLO算法检测流程2.YOLO算法网络架构3.网络训练模型3.1 训练策略3.2 代价函数的设定 2012年&#xff0c;随着深度学习技术的不断突破&#xff0c;开始兴起基于深度学习的目标检测算法的研究浪潮。 2014年&#xff0c;…

Davinci 报表工具 0.3.0-rc release 文本框模糊查询不生效问题

背景: 在使用过程中发现davinci 的控制器配置中, 取值配置的对应关系设置 包含 或 不包含时 不生效, 不能实现模糊匹配效果, 只能精确查询; 问题分析: 通过跟踪接口及相应代码, 发现在sql 拼接时没有对 like 和 not like 类型的值两侧添加百分号, 导致模糊查询失败 调用过程…

CentOS系统环境搭建(七)——Centos7安装MySQL

centos系统环境搭建专栏&#x1f517;点击跳转 坦诚地说&#xff0c;本文中百分之九十的内容都来自于该文章&#x1f517;Linux&#xff1a;CentOS7安装MySQL8&#xff08;详&#xff09;&#xff0c;十分佩服大佬文章结构合理&#xff0c;文笔清晰&#xff0c;我曾经在这篇文章…