【正文】
屏幕上,或跳過相關(guān)的 WRITE 語句(參見 文本符號 (頁 31)) 。系統(tǒng)不使用其它語言的文本摘要。圖略假定程序如下所示,初始語言為英語。34 / 208PROGRAMTRANTEST.WRITETEXT010.并有如下輸出:圖略如果用德語登錄到系統(tǒng)上,并且不存在英語文本符號,在顯示程序的文本符號時,就看到下列行:圖略右邊的字符“ E”表示存在英語文本符號 010。在 ABAP/4 開發(fā)工作臺中,將文本摘要從英語翻譯為德語,如下所示:標題和表頭:圖略文本符號:圖略如果登錄 R/3 系統(tǒng)并指定語言“D”,程序 TRANTEST 的輸出如下:圖略通過按如下格式更改程序代碼,可以將程序 TRANTEST 的輸出語言修改為德語。PROGRAMTRANTEST.SETLANGUAGE39。D39。.WRITETEXT010.現(xiàn)在,無論采用何種語言登錄,輸出始終為德語。第五章 處理數(shù)據(jù)一、 賦值(一) 用MOVE賦值(二) 用指定偏移量賦值可以在每條 ABAP/4 語句中為基本數(shù)據(jù)類型指定偏移量和長度(參見 指定數(shù)據(jù)對象的偏移量 (頁 345)) 。在這種情況下, MOVE 語句語法如下:語法MOVE F1[+o1][(l1)] TO F2[+o2][(l2)].賦值運算符語法如下:語法F2[+o2][(l2)] = F1[+o1][(l1)]。將字段F1 從o1+1 位置開始且長度為l1的段內(nèi)容賦給字段F2,覆蓋從o2+1位置開始且長度為l2的段。35 / 208在 MOVE 語句中,所有偏移量和長度指定都可為變量。這同樣適用于采用賦值運算符的語句,只要也可以寫做 MOVE 語句。在賦值運算符之后未指定字段名稱的語句中, (例如在數(shù)學表達式中) ,所有偏移量和長度指定都必須是無符號數(shù)值。詳細信息,參見 數(shù)值運算 (頁 386)) 。SAP 建議只在非數(shù)值字段之間才采用指定偏移量和長度賦值。對于數(shù)值字段,結(jié)果毫無意義。DATA: F1(8) VALUE 39。ABCDEFGH39。, F2(20).F2+6(5) = F1+3(5).在該示例中 ,賦值運算符功能如下 :DATA: F1(8) VALUE 39。ABCDEFGH39。, F2(8).DATA: O TYPE I VALUE 2, L TYPE I VALUE 4.MOVE F1 TO F2. WRITE F2.MOVE F1+O(L) TO F2. WRITE / F2.MOVE F1 TO F2+O(L). WRITE / F2.CLEAR F2.MOVE F1 TO F2+O(L). WRITE / F2.MOVE F1+O(L) TO F2+O(L). WRITE / F2.該過程輸出 如下:ABCDEFGHCDEFCDABCD ABCD CDEF首先,未指定偏移量將 F1 內(nèi)容賦給 F2。然后,再指定偏移量和長度執(zhí)行同樣操作。后面三條 MOVE 語句覆蓋偏移量為 F2 內(nèi)容。請注意,根據(jù) 源類型字符 (頁 439)中的規(guī)則, F2 的右邊用空格填充。(三) 在字段串組件之間復制值(四) 用WRITE TO 賦值36 / 208用 WRITE TO 給數(shù)據(jù)對象賦值時,可以用 WRITE 語句的格式化選項(參見 WRITE 語句本節(jié)主題描述WRITE TO 語句的基本形式要將值(文字)或源字段內(nèi)容寫入目標字段,可以使用 WRITE TO 語句:語法WRITE F1 TO F2 [option].WRITE TO 語句將源字段F1 內(nèi)容寫入目標字段F2。F1可以是任何數(shù)據(jù)對象。F2必須是變量,不能是文字或常量。寫入后,F(xiàn)1 內(nèi)容保持不變。對于option,可以使用 WRITE 語句的所有格式化選項(UNDER 和 NOGAP 除外)(參見 格式選項 ) 。WRITE TO 語句總是檢查用戶主記錄中的設置。例如,這些設置指定是將小數(shù)點顯示為句號(.) ,還是逗號(,) 。WRITE TO 語句并不遵循 類型轉(zhuǎn)換 (頁 14)中所述的轉(zhuǎn)換規(guī)則。目標字段解釋為類型 C字段。系統(tǒng)總是將源字段內(nèi)容轉(zhuǎn)換為類型 C,它不將結(jié)果字符串轉(zhuǎn)換為目標字段的數(shù)據(jù)類型,而直接寫入目標字段。因此,不應使用數(shù)值數(shù)據(jù)類型的目標字段。DATA: NUMBER TYPE F VALUE 39。39。, TEXT(10), FLOAT TYPE F, PACK TYPE P DECIMALS 1.WRITE NUMBER.WRITE NUMBER TO TEXT EXPONENT 2.WRITE / TEXT.WRITE NUMBER TO FLOAT.WRITE / FLOAT.WRITE NUMBER TO PACK.WRITE / PACK.MOVE NUMBER TO PACK.WRITE / PACK.該過程輸出如下: +00 +022034233452。30,337 / 208 第一輸出行以類型 F 字段的標準輸出格式顯示字段 NUMBER 內(nèi)容。第二輸出行顯示字符串,該字符串產(chǎn)生于用格式化選項 EXPONENT2 將字段 NUMBER 寫入長度為 10 的類型 C 字段中。第三和第四輸出行顯示不適合于使用數(shù)值數(shù)據(jù)類型的目標字段。第五輸出行顯示 MOVE 語句不同于 WRITE TO 語句在于將類型 F 字段正確地轉(zhuǎn)換為類型 P(有關(guān)該轉(zhuǎn)換的詳細信息,參見 源類型浮點數(shù) (頁 438)) 。(五) 運行時指定源字段可以使用 WRITETO 語句在運行時指定源字段。為此,請用括號將包含源字段名的數(shù)據(jù)對象名括起來,并將其放在源字段位置:語法WRITE (f) TO g.系統(tǒng)將賦給 f 的數(shù)據(jù)對象值放到 g 中。然而,如果要在運行時 指定目標字段,則必須按使用字段符號中所述,使用字段符號。DATA: NAME(10) VALUE 39。SOURCE39。, SOURCE(10) VALUE 39。Antony39。, TARGET(10)....WRITE (NAME) TO TARGET.WRITE: TARGET.則輸出Antony字段名和字段內(nèi)容之間的連接如下圖所示。(六) 用指定偏移量寫入值(七) 將值重置為默認值可以用 CLEAR 語句重置任何數(shù)據(jù)對象值,如下所示:語法CLEAR f.該語句將數(shù)據(jù)對象f的內(nèi)容重置為初始默認值??梢詤^(qū)分基本數(shù)據(jù)類型對于基本數(shù)據(jù)類型的數(shù)據(jù)對象的默認值列表,參見 預定義的基本數(shù)據(jù)類型 中的38 / 208表。系統(tǒng)將變量值重置為它們的初始默認值,而不是用 DATA 語句的 VALUE參數(shù)所賦的初始值。無法重置常量。字段串如果將 CLEAR 語句應用于字段串,則將單個組件的內(nèi)容重置為它們的初始默認值。內(nèi)表關(guān)于 CLEAR 語句如何使用內(nèi)表的解釋,參見 初始化內(nèi)表 。DATA NUMBER TYPE I VALUE 39。1039。.WRITE NUMBER.CLEAR NUMBER.WRITE / NUMBER.輸出為: 10 0CLEAR 語句將字段 NUMBER 的內(nèi)容從 10 重置為默認值 0。二、 數(shù)值運算(一) 執(zhí)行算術(shù)運算基本算數(shù)運算執(zhí)行字段串的算術(shù)運算類似于用 MOVECORRESPONDING 語句在字段串之間復制值 (參見 在字段串組件之間復制值 (頁 37)) ,可以用以下關(guān)鍵字 ,執(zhí)行字段串的算術(shù)運算:ADDCORRESPONDINGSUBTRACTCORRESPONDINGMULTIPLYCORRESPONDINGDIVIDECORRESPONDING對于所有同名字段串組件,ABAP/4 進行相應算術(shù)運算。然而,僅當所有相關(guān)組件都是數(shù)值型數(shù)據(jù)類型時,該運算才有意義。有關(guān)這些關(guān)鍵字的詳細信息,參見 ABAP/4 關(guān)鍵字文檔 。DATA: BEGIN OF RATE, USA TYPE F VALUE 39。39。, FRG TYPE F VALUE 39。39。, AUT TYPE F VALUE 39。39。, END OF RATE.DATA: BEGIN OF MONEY,39 / 208 USA TYPE I VALUE 100, FRG TYPE I VALUE 200, AUT TYPE I VALUE 300, END OF MONEY.MULTIPLYCORRESPONDING MONEY BY RATE.WRITE / MONEYUSA.WRITE / MONEYFRG.WRITE / MONEYAUT.輸出如下: 67 200 2,100在此,用 RATEUSA 乘以 MONEYUSA, 以此類推。添加字段順序除 基本算術(shù)運算 (頁 41)中所述的基本加法之外 ,ADD 語句有幾個變體,用于添加字段順序。例如:添加字段順序并將結(jié)果賦給另一個字段語法ADD n1 THEN n2 UNTIL nz GIVING m.如果n n ...、n z是在內(nèi)存中相同類型和長度的等距字段序列,則進行求和計算并將結(jié)果賦給m添加字段順序并將結(jié)果添加到另一個字段的內(nèi)容中語法ADD n1 THEN n2 UNTIL nz TO m.該語句除了將字段總和添加到m的舊內(nèi)容中之外,與上面語句的工作方式相同。有關(guān)其它相似變體的信息,參見有關(guān) ADD 語句的關(guān)鍵字文檔。DATA: BEGIN OF SERIES, N1 TYPE I VALUE 10, N2 TYPE I VALUE 20, N3 TYPE I VALUE 30, N4 TYPE I VALUE 40, N5 TYPE I VALUE 50,40 / 208 N6 TYPE I VALUE 60, END OF SERIES.DATA SUM TYPE I.ADD SERIESN1 THEN SERIESN2 UNTIL SERIESN5 GIVING SUM.WRITE SUM.ADD SERIESN2 THEN SERIESN3 UNTIL SERIESN6 TO SUM.WRITE / SUM.輸出如下: 150 350在此,將 N1 到 N5 組件內(nèi)容求和并將其值賦給字段 SUM。然后,將N2 到 N6 組件求和并將其添加到 SUM 的值中。(二)使用數(shù)學函數(shù)(三)浮點函數(shù)以下內(nèi)部函數(shù)用浮點數(shù)據(jù)類型(F)作為參數(shù)。浮點數(shù)據(jù)類型的函數(shù)函數(shù) 解釋ACOS、ASIN 、ATAN ; 三角函數(shù)。COS、 SIN、TANCOSH、SINH 、TANH 反三角函數(shù)。EXP 基數(shù)為 e 的求冪函數(shù)(e=) 。LOG 基數(shù)為 e 的自然對數(shù)。LOG10 基數(shù)為 10 的對數(shù)。SQRT 平方根。對于所有函數(shù),正常數(shù)學約束(例如平方根只適用于正數(shù))適用。否則,會產(chǎn)生運行錯誤。這些函數(shù)的參數(shù)不必為浮點數(shù)。如果選擇其它類型,則被轉(zhuǎn)化為類型 F,如 類型轉(zhuǎn)換 (頁 14)中所述。DATA: RESULT TYPE F, PI(10) VALUE 39。39。.RESULT = COS( PI ).WRITE RESULT.41 / 208+00。在進行計算之前,自動將字符字段 PI 轉(zhuǎn)換為類型 F 字段。(四)處理壓縮數(shù)(五)處理日期和時間字段日期和時間字段數(shù)據(jù)類型不是數(shù)值型。但是,由于進行自動類型轉(zhuǎn)換,可以采用類似于數(shù)值型字段的處理方法,處理日期和時間字段(參見 基本數(shù)據(jù)類型的可轉(zhuǎn)換性 (頁435))在處理日期和時間字段時,使用偏移量指定常常十分有用(參見 指定數(shù)據(jù)對象的偏移量 (頁 345) ) 。DATA: ULTIMO TYPE D.ULTIMO = SYDATUM. ULTIMO+6(2) = 39。0139。. = first day of this monthULTIMO = ULTIMO 1. = last day of last month在此,將上月的最后一天賦給日期字段 ULTIMO。為此:1. 用當前日期填充 ULTIMO。2. 用指定偏移量,將日期更改為當前月的第一天。3. 從 ULTIMO 減 1,將其內(nèi)容更改為上月的最后一天。在進行減法之前,系統(tǒng)將 ULTIMO 轉(zhuǎn)換為從 起的天數(shù)并將結(jié)果轉(zhuǎn)換為日期。DATA: DIFF TYPE I, SECONDS TYPE I, HOURS TYPE I.DATA: T1 TYPE T VALUE 39。20220039。, T2 TYPE T VALUE 39。02022039。.DIFF = T2 T1.SECO