ABAP/4入門

ABAP語法規則

  1. ABAP程序是由若干個單獨的語句組成的
  2. 每一個語句都用句點(英文)結束
  3. 語句的第一個單詞一般爲關鍵字
  4. 語句中單詞之間至少要用一個空格隔開
  5. 語句可以縮進
  6. 一句語句可以由多行組成
  7. 在一行中可以由多個語句

ABAP 數據聲明

變量定義基本格式

DATA < f > [(< length >)] < type> [< value>] [< decimals>].

< f >指定變量名
< length>指定變量長度
< type>指定變量的類型,還可以使用type來指定
< decimals> 指定變量小數的位數

  • 數據類型
    不佔用內存空間。
    描述了數據對象的屬性。
    是數據對象的屬性並與數據對象聯繫緊密。
    用戶可以自定義

  • 數據對象
    是程序在運行時使用的物理單元。
    佔用內存空間。
    每個數據對象都有分配給它的特定數據類型。
    ABAP/4根據數據對象的數據類型處理數據對象。

  • 預定義基礎數據類型
    在這裏插入圖片描述

簡單的變量定義示範

DATA :  
W_CHAR          TYPE C,					"1位長度的字符變量  
W_MULCHAR(20)   TYPE C,					"20位長度的字符變量  
W_INTERGER      TYPE I VALUE 10,         "整型變量,並賦上了初值10  
W_FLOAT         TYPE F VALUE 1,2E-10,    "浮點數  
W_DATE          TYPE D VALUE '20030312', "日期  
W_TIME          TYPE T VALUE '123212',   "時間  
W_NUMBER        TYPE N,                  "1位數字變量  
W_MULNUM(10)    TYPE N,                  "10位數字變量  
W_QUAN          TYPE P,                  "缺省有3位小數的變量  	
W_CURR          TYPE P DECIMALS 2.       "固定2位小數的變量
DATA :  
W_CHAR_REF LIKE W_CHAR,					"和上面定義的W_CHAR一樣  
W_MATNR    LIKE MARA-MATNR.              "和標準表MARA中字段MATNR一樣 

預定義結構化類型
通常情況下,ABAP/4程序中的結構化數據類型是用戶定義的。
在 ABAP/4 中,沒有可用的預定義結構化數據類型,但下列例外:
例如: TABLES: sbooks.

生成了一個與表結構相同﹐命名相同的結構

常量定義
常量是包含值的數據對象,如果在程序中頻繁使用某常量,可以利用常量語句,將其聲明爲具有固定值的變量:
語法:CONSTANTS < c>[< length>] < type> < value> [< decimals>].
要將字段串定義爲常量,請寫:
CONSTANTS: BEGIN OF < fstring>,
< component declaration>,

END OF < fstring>.
對於常量語句必須使用 參數,利用 參數指定的初始值,在程序的執行期間不能更改,否則,系統將報錯誤消息。

ABAP/4中的結構定義
結構聲明同樣有兩種方法:

DATA / TYPES:
BEGIN OF <結構名>, <項目1>, <項目2>, …… <項目n>,
END OF <結構名>.

DATA : <結構名> TYPE|LIKE <結構|表>.

定義示例

1.直接聲明
DATA:  
BEGIN OF TYP_STUDENT,    
NAME(40)   TYPE C,    
BIRTH_DATE TYPE D,    
BIRTH_TIME TYPE T,    
HEIGHT     TYPE P,    
WEIGHT     TYPE I,  
END OF TYP_STUDENT. 

2.使用like
DATA : 
TYP_STUDENT_REF LIKE TYP_STUDENT,  
TYP_MARA        LIKE MARA. 

3.特殊的用法中,在自己的結構中包含別的結構
DATA:  
BEGIN OF TYP_STUDENT2.    
INCLUDE STRUCTURE TYP_STUDENT.    
DATA:CLASS(2)     
TYPE N,         
DIRECTOR(40) TYPE C,  
END OF TYP_STUDENT2. 

內表

  • 概念
    內表是一種臨時的數據表,它並不建立在Database Server上,而是建立在本地內存空間中,所以它不佔用系統資源,而且存取速度快。正因爲這些特性,使得內表在ABAP編程中顯得相當的重要。

  • 特徵
    內部表是ABAP/4中最核心的處理對象
    內部表是用來處理(增加、查詢、修改、刪除)一系列具有相同結構的數據的
    內部表涵蓋了在其它編程語言中數組的功能
    內部表僅在ABAP/4程序運行時在內存空間裏存在
    內部表是自動化的對象,它自動完成相關的內存管理

  • 分類
    內表可以分爲有序表和無序表(hashtable),有序表又分爲標準表和排序表。這三種表在使用中各有區別,一般我們未特別指明的情況下都是用的標準表。
    標準表是以Index來進行排列的,我們可以使用Index和Key來訪問它。排序表是以Key來進行排列的,同樣的,我們也可以使用Index和Key來進行訪問。
    無序表是(hashtable)不按照任何規則進行排列的,對它的訪問只能按照Key來進行。
    在這裏插入圖片描述

  • 內表的聲明
    內部表的聲明和結構的聲明很相似,差別在於聲明中有表明內部表身份的關鍵字OCCURS
    例:

    DATA :
    BEGIN OF TD_STUDENT OCCURS 0,
    NAME(40) TYPE C,
    BIRTH_DATE TYPE D,
    BIRTH_TIME TYPE T,
    HEIGHT TYPE P,
    WEIGHT TYPE I,
    END OF TD_STUDENT.

    DATA : TD_MARA LIKE MARA OCCURS 0.

  • 還有另外的聲明方式
    語法

    DATA: < itab> TYPE < itabkind> OF < linetype>
    [WITH {UNIQUE | NON-UNIQUE} KEY < keydef>]
    [INITIAL SIZE < n>]
    [WITH HEADER LINE].

    例:

    TYPES:
    BEGIN OF TYP_FLIGHT,
    CARRID LIKE SPFLI-CARRID,
    CONNID LIKE SPFLI-CONNID,
    CITYFROM LIKE SPFLI-CITYFROM,
    FLDATE LIKE SFLIGHT-FLDATE,
    SEATSMAX LIKE SFLIGHT-SEATSMAX,
    END OF TYP_FLIGHT.

    DATA:
    TD_FLIGHT TYPE TABLE OF TYP_FLIGHT WITH HEADER LINE,
    TH_FLIGHT TYPE TYP_FLIGHT.

工作區

  • 概念及特徵
    程序對內表的行操作不能直接進行,必須通過一種接口來進行,這個接口就是工作區(work area)。
    程序需要從關係數據庫中提取數據到內錶行中時,必須先將數據讀入工作區,然後把工作區中的數據賦給內表的行。
    工作區必須具有和內錶行一致或者可以相互轉換的數據結構(一般是與內錶行類型相同的結構體)。

  • 工作區的定義
    定義內表的同時,需要首先定義一個與該內錶行結構相同的工作區對象供程序使用,將數據寫入內表時,必須首先給工作區賦值,再通過APPEND等語句將工作區中的值添加或者插入到內表中

  • 示例

    TYPES:
    BEGIN OF TYP_STUDENT,
    	NAME(10) TYPE C,
    	AGE(2) TYPE N,
    	SEX(6) TYPE C,
    END OF TYP_STUDENT.
    
    DATA:
    TH_STUDENT TYPE TYP_STUDENT,			"聲明工作區
    TD_STUDENT TYPE TABLE OF TYP_STUDENT	"聲明內表
    
    TH_STUDNET-NAME = '張三'.
    TH_STUDENT-AGE = 22.
    TH_STUDENT-SEX = '男'.
    APPEND TH_STUDENT TO TD_STUDENT			"工作區賦值給內表
    
    TH_STUDNET-NAME = '惜夢'.
    TH_STUDENT-AGE = 22.
    TH_STUDENT-SEX = '女'.
    APPEND TH_STUDENT TO TD_STUDENT			"工作區賦值給內表
    
    CLEAR TH_STUDENT.						"清除工作區(復位賦值)
    
    LOOP AT TD_STUDENT INTO TH_STUDENT.		"循環輸出
    " WRITE:
    	/ TH_STUDENT-NAMA,
    	  TH_STUDENT-AGE,
    	  TH_STUDENT-SEX.
    	CLEAR TH_STUDENT.
    ENDLOOP.
    
    
    
    輸出結果:
    張三 22 男
    惜夢 22 女
    

變量操作

  • 賦值

    一般可以使用以下幾種方式賦值
    等號賦值: A = B.
    MOVE賦值: MOVE B TO A.
    WRITE賦值: WRITE B TO A,
    復位賦值: CLEAR A.

  • 數據計算

    一般的加減乘除
    A = B + C.
    A = B – C.
    A = B * C.
    A = B / C.
    冪,取模,整除
    A = B ** C.
    A = B MOD C.
    A = B DIV C.
    數學函數(SIN,COS,TAN,ABS,CEIL,FLOOR)
    A = SIN(B).
    A = COS(B).
    計算的優先順序
    括號
    函數
    **
    */DIV MOD
    +和-

  • 字符串操作

    STRLEN 取長度
    測量操作數的長度
    < n > = STRLEN < c >.
    示例:
    DATA :
    W_CHAR(20) TYPE C VALUE ‘AT21’.
    DATA :
    W_LEN TYPE N.
    W_LEN = STRLEN( W_CHAR ).
    WRITE W_CHAR.
    WRITE / W_LEN.
    那麼輸出結果就爲:
    AT21
    4

    CONCATENATE字符串連接
    CONCATENATE < c1 > … < cn > INTO < c > [SEPARATED BY < s >].
    示例:
    DATA :
    W_RESULT(50) TYPE C,
    W_STR1(10) TYPE C VALUE ‘123’,
    W_STR2(15) TYPE C VALUE ‘ABC’,
    W_STR3(10) TYPE C VALUE ‘MK1’,
    W_DELIMITER TYPE C VALUE ‘/’.
    CONCATENATE W_STR1 W_STR2 W_STR3 INTO W_RESULT SEPARATED BY W_DELIMITER.
    WRITE : W_STR1,
    / W_STR2,
    / W_STR3,
    / W_RESULT.
    輸出爲:
    123
    ABC
    MK1
    123/ABC/MK1

    REPLACE字符串替換
    REPLACE < str1> WITH < str2> INTO < c> [LENGTH < l>].
    示例:
    DATA:
    T(10) VALUE ‘abcdefghij’,
    STRING LIKE T,
    STR1(4) VALUE ‘cdef’,
    STR2(4) VALUE ‘klmn’,
    STR3(2) VALUE ‘kl’,
    STR4(6) VALUE ‘klmnop’,
    LEN TYPE I VALUE 2.
    STRING = T.
    WRITE STRING.
    REPLACE STR1 WITH STR2 INTO STRING.
    WRITE / STRING.
    STRING = T.
    REPLACE STR1 WITH STR2 INTO STRING LENGTH LEN.
    WRITE / STRING.
    STRING = T.
    REPLACE STR1 WITH STR3 INTO STRING.
    WRITE / STRING.
    STRING = T.
    REPLACE STR1 WITH STR4 INTO STRING.
    WRITE / STRING.

    CONDENSE壓縮
    CONDENSE < 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.

    SHIFT移位
    SHIFT < c> [ BY < n > PLACES] [< mode >].
    SHIFT < c> LEFT DELETING LEADING < str >.
    SHIFT < c> RIGHT DELETING TRAILING < str >.
    示例:
    DATA :
    TEMP(20) VALUE ‘A213NALA2’,
    STRING LIKE TEMP,
    STR(2) VALUE ‘A2’.
    STRING = TEMP.
    WRITE STRING.
    SHIFT STRING BY 3 PLACES LEFT.
    WRITE / STRING.
    STRING = TEMP.
    SHIFT STRING BY 2 PLACES RIGHT.
    WRITE / STRING.
    STRING = TEMP.
    SHIFT STRING LEFT DELETING LEADING STR.
    WRITE / STRING.
    結果:
    A213NALA2
    3NALA2
    A213NALA2
    13NALA2

    TRANSLATE切換大小寫
    TRANSLATE < c > TO UPPER CASE.
    TRANSLATE < c > TO LOWER CASE.
    示例:
    DATA :
    STR1(20) VALUE ‘a21gFDFS123’,
    STR2(20) VALUE ‘a21gFDFS123’.
    TRANSLATE STR1 TO UPPER CASE.
    TRANSLATE STR2 TO LOWER CASE.
    WRITE : STR1 , / STR2.
    輸出結果爲:
    A21GFDFS123
    a21gfdfs123

    SEARCH字符串搜索
    在字符串中查指定的內容
    SEARCH < c > FOR < str > < options >.
    示例:
    DATA :
    STRING(30) VALUE ‘This is a simple sentence’.
    SEARCH STRING FOR ‘Thisis’.
    WRITE: SY-SUBRC, SY-FDPOS.
    SEARCH STRING FOR ‘SEN’.
    WRITE: / SY-SUBRC, SY-FDPOS.
    輸出結果爲:
    4 0
    0 17
    注:SY-FDPOS用於顯示查找字符串在母字符串中的位置
    在字段c中查找字符串str.如果找到,則將SY-SUBRC返回0,SY-FDPOS返回字段c中該字符串的位置(從左算起的字節偏移量),否則SY-SUBRC返回4

    SPLIT字符串分割
    SPLIT < c> AT < del > INTO < c1 > … < cn >.
    示例:
    DATA :
    STR(30) VALUE ‘Part1 * Part2 * Part3 * Part4’,
    STR1(30), STR2(30), STR3(30),
    DEL(1) VALUE ‘*’.
    SPLIT STR AT DEL INTO STR1 STR2 STR3.
    WRITE : STR, / STR1, / STR2, / STR3.
    輸出結果爲:
    Part1 * Part2 * Part3 * Part4
    Part1
    Part2
    Part3 * Part4

  • 內表操作

    1.初始化工作區以及內表
    要初始化有或沒有表頭的內表,請使用 REFRESH 語句,用法如下:REFRESH .該語句將內表重置爲填充它以前的狀態,這意味着表格將不包含任何行。
    如果使用沒有表格工作區域的內表,可以使用 CLEAR 語句代替 REFRESH 語句,用法如下:CLEAR < itab>.
    如果使用有表頭行的內表,CLEAR 語句僅清除表格工作區域。要重置整個內表而不清除表格工作區域,使用 REFRESH 語句或 CLEAR 語句,用法如下:CLEAR < itab>[].內表名稱之後的方括號指內表體。
    使用 REFRESH 或 CLEAR 初始化內表後,系統保持在內存中保留的空間 。可以用 FREE 語句釋放內存,用法如下:FREE < itab>.
    也可以使用 FREE 語句重置內 表並直接釋 放其內存,而不必先使用 REFRESH 或 CLEAR。與 REFRESH 一樣,FREE 在表格體上,而不在表格工作區域上工作。
    在 FREE 語句之後,可以再次定位內表。這樣,系統就再次保留內存空間。
    可以使用如下邏輯表達式檢查內表是否爲空:… < itab> IS INITIAL …

    APPEND
    APPEND [wa |INITIAL LINE] TO itab.
    語句用來把表頭或工作區< wa >裏的數據添加到內表< itab >的末尾。 APPEND [wa TO] itab SORTED BY f.
    把工作區wa中的數據添加到itab內表中,並按字段f排序。
    注:工作區< wa >結構要和內表itab結構要一樣。
    如果是wa則把工作區中的數據添加到內表itab的末尾,如果用“INITIAL LINE”則添加一個空行。

    INSERT
    INSERT [wa |INITIAL LINE] INTO itab [INDEX idx].
    INSERT [wa |INITIAL LINE] INTO TABLE itab.
    INSERT LINES OF itab1 [FROM idx1] [TO idx2] INTO itab2 [INDEX idx3].
    INSERT LINES OF itab1 [FROM idx1] [TO idx2] INTO TABLE itab2.
    INSERT語句用來把表頭或工作區裏的內容添加< itab >的指定位置。
    如果INDEX被指定,該語句將會將記錄插入到指定置。
    如果INDEX未指定,對標準表記錄會被添加到末尾,對排序表記錄會自動按照Key進行排序。
    TYPES:
    BEGIN OF TYP_STUDENT,
    NAME(10) TYPE C,
    AGE(2) TYPE N,
    SEX(6) TYPE C,
    END OF TYP_STUDENT.
    DATA:
    TH_STUDENT TYPE TYP_STUDENT, “工作區
    TD_STUDENT TYPE TABLE OF TYP_STUDENT. ”內表
    TH_STUDENT-NAME = ‘張三’.
    TH_STUDENT-AGE = 22.
    TH_STUDENT-SEX = ‘男’.
    APPEND TH_STUDENT TO TD_STUDENT.”工作區賦值給內表
    TH_STUDENT-NAME = ‘惜夢’.
    TH_STUDENT-AGE = 22.
    TH_STUDENT-SEX = ‘女’.
    APPEND TH_STUDENT TO TD_STUDENT.
    TH_STUDENT-NAME = ‘追風’.
    TH_STUDENT-AGE = 22.
    TH_STUDENT-SEX = ‘女’.
    INSERT TH_STUDENT INTO TD_STUDENT INDEX 1. "指定了index,插入到指定的位置
    結果:
    追風 22 女
    張三 22 男
    惜夢 22 女

    MODIFY
    MODIFY itab [FROM wa] [INDEX idx] [TRANSPORTING f1 … fn]. MODIFY TABLE itab [FROM wa] [TRANSPORTING f1 … fn]. MODIFY itab [FROM wa] TRANSPORTING f1 … fn WHERE cond.
    MODIFY語句可以根據指定的Index或Key來把表頭或工作區的內容修改到中的相應記錄。當然,指定Index或Key的記錄首先必須在中存在。
    TRANSPORTING限定被修改的列。當我們不需要修改內表中的所有列時,用TRANSPORTING 關鍵字。

    COOLECT
    COLLECT [wa INTO] itab. Addition: … SORTED BY f
    COLLECT根據表關鍵字附加行,如果用APPEND語句附加行,則具有相同表關鍵字的數據行(甚至是完全相同的數據行)可以同時存在於一個內表中,但COLLECT 語句可以在內表中根據表關鍵字唯一的確定數據行(即具有相同關鍵字段的數據行不能重複出現)。
    注:使用COLLECT將內表值進行合計時,要先將內表數據進行排序。
    COLLECT根據表關鍵字附加行,如果用APPEND語句附加行,則具有相同表關鍵字的數據行(甚至是完全相同的數據行)可以同時存在於一個內表中,但COLLECT 語句可以在內表中根據表關鍵字唯一的確定數據行(即具有相同關鍵字段的數據行不能重複出現)。
    COLLECT [wa INTO] itab. Addition: … SORTED BY f
    例:
    TYPES:
    BEGIN OF TYP_COMPANY,
    NAME(20) TYPE C,
    SALES TYPE I,
    END OF TYP_COMPANY.
    DATA:
    TH_COMPANY TYPE TYP_COMPANY, "工作區
    TD_COMPANY TYPE HASHED TABLE OF TYP_COMPANY WITH UNIQUE KEY NAME."無序表
    TH_COMPANY-NAME = ‘Duck’.TH_COMPANY-SALES = 10.
    COLLECT TH_COMPANY INTO TD_COMPANY.
    TH_COMPANY-NAME = ‘Tiger’.TH_COMPANY-SALES = 20.
    COLLECT TH_COMPANY INTO TD_COMPANY.
    TH_COMPANY-NAME = ‘Duck’.
    TH_COMPANY-SALES = 30.
    COLLECT TH_COMPANY INTO TD_COMPANY.
    結果:
    NAME | SALES
    ---------------
    Duck | 40
    Tiger | 20

    READ
    READ TABLE itab FROM wa [additions].
    READ TABLE itab WITH TABLE KEY k1 = v1 … kn = vn [additions].
    READ TABLE itab WITH KEY k1 = v1 … kn = vn [BINARY SEARCH] [additions].
    READ TABLE itab INDEX i [additions].
    如果用【BINARY SEARCH】,則首先要對內表進行排序。
    示例:
    READ TABLE TD_STUDENT INTO TH_STUDENT INDEX 1.

    LOOP
    LOOP AT itab.
    LOOP AT itab INTO wa.
    LOOP AT itab ASSIGNING < fs >.
    Additions:
    1… FROM n1 2. … TO n2 3. … WHERE logexp

    AT
    AT NEW f.
    在關鍵字f發生改變時,才執行相應的操作; AT END OF f. 在以f爲關鍵字的數據行處理完畢後,才執行相應的操作;
    AT FIRST.在進行內表操作之前,執行的相應操作;
    AT LAST.
    在內表數據操作完畢之後,執行的相應操作。

    DELETE
    DELETE itab.
    DELETE TABLE itab WITH TABLE KEY k1 = v1 … kn = vn.
    DELETE TABLE itab [FROM wa].
    DELETE itab INDEX idx.DELETE itab WHERE logexp.
    DELETE ADJACENT DUPLICATES FROM itab.
    ADJACENT關鍵字用來刪除內表中重複的數據行。

    DESCRIBE
    DESCRIBE TABLE itab.
    Additions:
    1… LINES n2. … OCCURS n3. … KIND k
    1,LINES表示內表的行數
    2,OCCURS 內表的初始大小
    3,KIND 內表的類型

    SORT
    SORT itab.
    … BY f1 f2 … fn
    … ASCENDING
    … DESCENDING
    … AS TEXT
    … STABLE
    AS TEXT主要是用於排序表
    使用STABLE,當SORT KEY不變時,經過多次排序,內表中的數據順序不變。如果不用STABLE,則每次排序後,內表中的數據順序可能發生改變。

運算符&表達式

  • 基礎運算

    加減乘除取模整除冪+ - * / ** MOD DIV
    也可以用關鍵字 ADD、SUBTRACT、 MULTIPLY和 DIVIDE進 行基本算術運算
    操作符兩邊需要有空格

  • 日期運算

    日期變量的定義。
    常用的獲取日期的系統變量
    日期的定義
    DATA: ULTIMO TYPE D.
    時間的定義
    DATA: P_TIME TYPE T.
    獲取當前日期:
    ULTIMO = SY-DATUM.
    獲取當前時間。
    P_TIME = SY-UZEIT .
    在某些情況下(例如按遞減順序對日期進行排序),用關鍵字 CONVERT 將日期從格式D轉換爲相反日期非常有用。語法:
    CONVERT DATE < d1 > INTO INVERTED-DATE < d2 >.
    CONVERT INVERTED-DATE < d1 > INTO DATE < d2 >.
    這些語句將 字段 < d1> 從格式 DATE 或 INVERTED-DATE 轉換爲格式 INVERTED-DATE 或 DATE 並將其賦給 < d2 >。
    對於該轉換,ABAP/4 形成 9 的補數。
    備註:
    1、在ABAP語言中,在日期計算中,可以直接通過算術運算進行日期的加減,不過對於在平常的應用中我們也可以通過SAP的標準函數來實現。
    2、系統變量在SAP中的結構SYST中,在程序中我們可以通過SY-<變量名> 獲取系統當前的相關信息。
    3、除了以上的常用的日期格式,有時候我們還會用到格林威治時間:GET TIME STAMP FIELD TIME_STAMP.

  • 邏輯表達式

    通用邏輯運算符:
    EQ(=):等於;NE(<>、><):不 等於;
    LT(<): 小 於;LE(<=):小 於等於
    GT(>):大 於;GE(>=):大 於等於
    IS操作符:
    IS INITIAL 檢查字段是否爲初始值;
    IS ASSIGNED 檢查字段是否被分配。
    組合邏輯表達式:
    NOT AND OR
    字符串比較:
    CO 僅包含
    CN 不僅包含
    CA 包含任何
    NA 不包含任何
    CS 包含字符串
    NS 不包含字符串
    CP 包含模式
    NP 不包含模式
    因爲除類型 N 和 C 外,系統不能執行任何其它類型轉換,所以,在進行包含這些運算之一的比較時,操作數應該是類型 N 或 C。

  • 標準運算函數
    在這裏插入圖片描述

DATA :
N TYPE P DECIMALS 2.
DATA :
M TYPE P DECIMALS 2 VALUE '-5.55'.
N = ABS( M ).  
 WRITE:   'ABS:  ', N.
 N = SIGN( M ).  
 WRITE: / 'SIGN: ', N.
 N = CEIL( M ).  
 WRITE: / 'CEIL: ', N.
 N = FLOOR( M ). 
 WRITE: / 'FLOOR:', N.
 N = TRUNC( M ). 
 WRITE: / 'TRUNC:', N.
 N = FRAC( M ).  
 WRITE: / 'FRAC: ', N.
輸出如下:
ABS:              5.55
SIGN:             1.00-
CEIL:             5.00-
FLOOR:            6.00-
TRUNC:            5.00-
FRAC:             0.55-
這些函數的參數不必爲數值數據類型。如果選擇其它類型 ,則被轉換爲數值類型。然而,由於性能原因 
應儘可能使用正確類型。
DATA: T1(10),      
T2(10) VALUE '-100'.
T1 = ABS( T2 ).
WRITE T1.
輸出爲: 
       100
執行了兩種轉換。首先 ,將類型 C 字段的內容 T2 轉換爲類型 P 並且系統用轉換結果處理函數 ABS。
然後,在類型 C 字段 T1 的賦值期間 ,將函數結果轉換回類型 C。

在這裏插入圖片描述

DATA: 
RESULT TYPE F,      
PI(10) VALUE '3.141592654'.
RESULT = COS( PI ).
WRITE RESULT.
輸出爲 -1.00000000000000E+00。 在進行計算之前,自動將字符字段 PI 轉換爲類型 F 字段。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章