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.pswp.cn/news/40393.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40393.shtml
英文地址,請注明出處:http://en.pswp.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 右側打開窗口

為什么hive會出現_HIVE_DEFAULT_PARTITION分區

問題: 為什么hive表中出現_HIVE_DEFAULT_PARTITION分區? 解答: 因為在業務sql中使用的是動態分區,并且hive啟用動態分區時,對于指定的分區鍵如果存在空值時,會對空值部分創建一個默認分區用于存儲該部分…

小程序項目組件的基本應用

宿主環境:程序運行必須依賴的環境 小程序的宿主環境 ---->手機微信(定位、掃碼、支付等) 小程序的通信模型: 渲染層和邏輯層之間的通信(微信客戶端轉發)邏輯層和第三方服務器之間的通信(微信客戶端轉發) 小程序的運行機制: 啟動&#xff1…

c#實現工廠模式

可以使用以下代碼實現C#中的工廠模式: 首先,定義一個接口作為產品的抽象: public interface IProduct {void Operation(); }然后,創建具體的產品類: public class ConcreteProductA : IProduct {public void Operat…

vue基礎知識五:請描述下你對vue生命周期的理解?在created和mounted這兩個生命周期中請求數據有什么區別呢?

一、生命周期是什么 生命周期(Life Cycle)的概念應用很廣泛,特別是在政治、經濟、環境、技術、社會等諸多領域經常出現,其基本涵義可以通俗地理解為“從搖籃到墳墓”(Cradle-to-Grave)的整個過程在Vue中實…

41 | 京東商家書籍評論數據分析

京東作為中國領先的電子商務平臺,積累了大量商品評論數據,這些數據蘊含了豐富的信息。通過文本數據分析,我們可以了解用戶對產品的態度、評價的關鍵詞、消費者的需求等,從而有助于商家優化產品和服務,以及消費者作出更明智的購買決策。 本文將詳細闡述如何獲取京東商家評…

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;這…

PyTorch: clamp函數與梯度的關系

本文主要以下探究這一點&#xff1a;梯度反向傳播過程中&#xff0c;測試強行修改后的預測結果是否還會傳遞loss&#xff1f; clamp應用場景&#xff1a;在深度學習計算損失函數的過程中&#xff0c;會有這樣一個問題&#xff0c;如果Label是1.0&#xff0c;而預測結果是0.0&a…