




已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
7: 1 1控制 ABAP/4 程序流概覽內(nèi)容ABAP/4中 流控制的概 念編程邏輯表 達(dá)式比較所有的 字段類(lèi)型比較字符串 和數(shù)字串二進(jìn)制位結(jié) 構(gòu)的比較檢查字段是 否屬于某一 范圍檢查初始值檢查選擇條 件組合幾個(gè)邏 輯表達(dá)式編程分支和 循環(huán)使用 IF 的條件分支使用 CASE 的條件分支使用 DO 的無(wú)條件循 環(huán)使用 WHILE 的條件循環(huán)終止循環(huán)要根據(jù)一定 條件執(zhí)行程 序組件,或 要將重復(fù)語(yǔ) 句序列組合 在循環(huán)中, 可以使用 ABAP/4 提供的用于 控制程序流 的標(biāo)準(zhǔn)關(guān)鍵 字。ABAP/4 也包含重要 的附加特征 。ABAP/4 程序流可以 內(nèi)部控制和 外部控制。 ABAP/4 程序流的內(nèi) 部控制和外 部控制之間 的差別在ABAP/4中 流控制的概 念 (頁(yè) 8) 中 解釋。本節(jié)主要討 論內(nèi)部流控 制。為此, 可使用其他 編程語(yǔ)言( 例如,C、 FORTRAN、 PASCAL 等等)中熟 悉的標(biāo)準(zhǔn)控 制關(guān)鍵字。下列主題描 述1ABAP/4中 流控制的概 念與其他高級(jí) 編程語(yǔ)言一 樣(如,C、 FORTRAN 和 PASCAL 等等),ABAP/4 提供也用于 控制程序流 的標(biāo)準(zhǔn)關(guān)鍵 字。這些關(guān) 鍵字用于_ 分支 (IF、CASE)_ 循環(huán) (DO、WHILE)然而,ABAP/4 與其他編程 語(yǔ)言不同之 處在于其具 有程序流的 內(nèi)部控制和 外部控制。_ 內(nèi)部控制 由上述標(biāo)準(zhǔn) 關(guān)鍵字引導(dǎo) 。在程序代 碼中對(duì)其進(jìn) 行定義。_ 外部控制 由事件引導(dǎo) 。事件由 ABAP/4 程序(系統(tǒng) 程序或用戶 程序)或者 交互式用戶 輸入(例如 ,使用鼠標(biāo) 在屏幕上單 擊)生成。 系統(tǒng)不必按 ABAP/4 程序中列出 的順序?qū)M(jìn) 行語(yǔ)句處理 。這使得 ABAP/4 成為事件驅(qū) 動(dòng)編程語(yǔ)言 ,類(lèi)似于 Microsoft 的Visual Basic。時(shí)間事件和 ABAP/4 程序的連接 由事件關(guān)鍵 字提供。ABAP/4 程序中的每 個(gè)語(yǔ)句都屬 于特別的事 件關(guān)鍵字。 即使在程序 中沒(méi)有指定 任何事件關(guān) 鍵字,所有 語(yǔ)句都自動(dòng) 歸屬于標(biāo)準(zhǔn) 事件關(guān)鍵字 (START-OF-SELECTION) ,與程序中 事件語(yǔ)句的 次序完全不 相干。所有屬于某 一特定事件 關(guān)鍵字的語(yǔ) 句形成一個(gè) 處理塊。處 理塊是一個(gè) 在事件發(fā)生 時(shí)執(zhí)行的模 塊。處理塊 內(nèi)的程序流 依賴于內(nèi)部 控制。系統(tǒng) 按順序處理 語(yǔ)句,或按 照前面提到 的標(biāo)準(zhǔn)關(guān)鍵 字定義的順 序處理。ABAP/4 程序常規(guī)結(jié) 構(gòu)如下:假設(shè)當(dāng)用戶 選擇一行后 ,生成列表 且提供一些 細(xì)分設(shè)備的 報(bào)表程序必 須作出反應(yīng) (詳細(xì)信息 ,參見(jiàn) 交互列表)。需要為 該事件處理 的代碼必須 插入事件關(guān) 鍵字 AT LINE-SELECTION 之后。AT LINE-SELECTION. MOVE X TO FLAG. .無(wú)論何時(shí)用 戶通過(guò)單擊 鼠標(biāo)或按 F2 鍵在列表中 選擇一個(gè)項(xiàng) 目時(shí),AT LINE-SELECTION 和下一個(gè)事 件關(guān)鍵字之 間的所有語(yǔ) 句將被處理關(guān)于外部控 制的詳細(xì)信 息,如事件 及其如何與 ABAP/4 程序相互作 用的信息, 參見(jiàn) C通過(guò)事件控制 ABAP/4 程序流。該節(jié)說(shuō)明如 何使用外部 控制控制處 理塊內(nèi)的程 序流。要控制 ABAP/4 程序中的內(nèi) 部流,請(qǐng)遵 循結(jié)構(gòu)化編 程原則并將 程序模塊劃 分為單個(gè)邏 輯相關(guān)語(yǔ)句 塊(這些組 成控制結(jié)構(gòu) )。其中的 每個(gè)語(yǔ)句塊 都執(zhí)行主任 務(wù)的一部分 。要使程序易 于閱讀,應(yīng) 該縮排控制 結(jié)構(gòu)中的語(yǔ) 句塊。出于 布局需要, 可以使用 ABAP/4 編輯器功能 “編輯 - 插入語(yǔ)句.” 和“程序 - 整齊打印程 序”(詳細(xì) 信息,參見(jiàn) ABAP/4 程序布局 (頁(yè) 26)??梢杂?IF、CASE、 DO 和 WHILE 之類(lèi)的關(guān)鍵 字控制處理 塊中不同語(yǔ) 句之間的程 序流。這些 語(yǔ)句允許編 制條件和無(wú) 條件的分支 和循環(huán)。條 件使用邏輯 表達(dá)式,可 以是真,也 可以為假。2編程邏輯表 達(dá)式使用條件控 制程序中的 內(nèi)部流。要 用公式指定 條件,請(qǐng)使 用比較數(shù)據(jù) 字段的邏輯 表達(dá)式,如 下所示:語(yǔ)法 . .該表達(dá)式比 較兩個(gè)字段 ??赡転檎?,也可能為 假。在帶關(guān) 鍵字 IF、 CHECK 和 WHILE 的條件語(yǔ)句 中使用邏輯 表達(dá)式。根據(jù)操作數(shù) 和 的數(shù)據(jù)類(lèi)型 ,可以使用 不同的邏輯 運(yùn)算符。允 許進(jìn)行:除上述比較 之外,還可 以執(zhí)行測(cè)試 以檢查數(shù)據(jù) 字段是否完 全滿足一定 條件。可以 使用這些測(cè) 試:另外,可以 將幾個(gè)邏輯 表達(dá)式組合 為一個(gè)簡(jiǎn)單 邏輯表達(dá)式 。3比較所有的 字段類(lèi)型要比較所有 的字段類(lèi)型 ,可以在邏 輯表達(dá)式中 使用下列運(yùn) 算符:含 義EQ等于 =等于NE不 等于不 等于不 等于LT小 于小于LE小 于等于大于GE大 于等于=大 于等于操作數(shù)可以 是數(shù)據(jù)庫(kù)字 段、內(nèi)部字 段、文字或 常數(shù)。除基本字段 外,還可以 將結(jié)構(gòu)數(shù)據(jù) 類(lèi)型和上表 中的運(yùn)算符 結(jié)合起來(lái)作 為操作數(shù)。 字段串逐個(gè) 組件進(jìn)行比 較,嵌套的 結(jié)構(gòu)分為基 本的字段。 關(guān)于比較內(nèi) 表的詳細(xì)信 息,參見(jiàn) 比較內(nèi)表 (頁(yè) Error! Not a valid link.) 。如果有意義 ,可以對(duì)不 同數(shù)據(jù)類(lèi)型 的字段進(jìn)行 比較。如果 字段可轉(zhuǎn)換 ,就可以進(jìn) 行比較。在 比較之前, 系統(tǒng)將按照 下列層次規(guī) 則執(zhí)行自動(dòng) 類(lèi)型轉(zhuǎn)換( 參見(jiàn) 鍵入轉(zhuǎn)換 (頁(yè) 636) ):1.如果 操作數(shù)之一 是浮點(diǎn)數(shù)( 類(lèi)型 F),則系 統(tǒng)將其它操 作數(shù)轉(zhuǎn)換為 類(lèi)型 F。2.如果 操作數(shù)之一 是壓縮字段 (類(lèi)型 P),則系 統(tǒng)將其它操 作數(shù)轉(zhuǎn)換為 類(lèi)型 P。3.如果 操作數(shù)之一 是日期字段 (類(lèi)型 D)或時(shí)間 字段(類(lèi)型 T),則系 統(tǒng)將其它操 作數(shù)轉(zhuǎn)換為 類(lèi)型 D 或 T。不支持 日期和時(shí)間 字段之間的 比較,這會(huì) 導(dǎo)致程序中 斷。4.如果 操作數(shù)之一 是字符字段 (類(lèi)型 C)且其它 操作數(shù)是十 六進(jìn)制字段 (類(lèi)型 X),則系 統(tǒng)將類(lèi)型 X 的操作數(shù)轉(zhuǎn) 換為類(lèi)型 C。5.如果 操作數(shù)之一 是字符字段 (類(lèi)型 C),其它 操作數(shù)為數(shù) 字字段(類(lèi) 型 N),則系 統(tǒng)將這兩種 操作數(shù)都轉(zhuǎn) 換為類(lèi)型 P。DATA: F TYPE F VALUE 100.00, P TYPE P VALUE 50.00 DECIMALS 2, I TYPE I VALUE 30.00.WRITE The following logical expressions are true:.IF F = P . WRITE: / F,=,P.ELSE. WRITE: / F,= 50.00 30 NE 50.00這里,在 IF 語(yǔ)句中使用 兩個(gè)邏輯表 達(dá)式。如果 邏輯表達(dá)式 為真,則屏 幕上顯示出 來(lái)。如果邏 輯表達(dá)式為 假,則將相 反表達(dá)式顯 示在屏幕上 。4比較字符串 和數(shù)字串要比較字符 串(類(lèi)型 C)和數(shù)字 文本(類(lèi)型 N),可以 在邏輯表達(dá) 式中使用下 列運(yùn)算符。含 義CO僅包 含CN不僅 包含CA包 含任何NA不 包含任何CS包 含字符串NS不 包含字符串 CP包含模 式NP不包 含模式因?yàn)槌?lèi)型 N 和 C 外,系統(tǒng)不 能執(zhí)行任何 其它類(lèi)型轉(zhuǎn) 換,所以, 在進(jìn)行包含 這些運(yùn)算之 一的比較時(shí) ,操作數(shù)應(yīng) 該是類(lèi)型 N 或 C。運(yùn)算符的功 能如下:CO (僅包含)如果 僅包含 中的字符, 則邏輯表達(dá) 式 CO 為真。該比 較區(qū)分大小 寫(xiě),并包括 尾部空格。 如果比較結(jié) 果為真,則 系統(tǒng)字段 SY-FDPOS 包括 的長(zhǎng)度。如 果為假,則 SY-FDPOS 包含 中第一個(gè)未 在 內(nèi)出現(xiàn)的字 符的偏移量 。CN (不僅包含 )如果 還包含 之外的其他 字符,則邏 輯表達(dá)式 CN 為真。該比 較區(qū)分大小 寫(xiě),并包括 尾部空格。 如果比較結(jié) 果為真,則 系統(tǒng)字段 SY-FDPOS 包含 中第一個(gè)未 同時(shí)在 中出現(xiàn)的字 符的偏移量 。如果為假 ,SY-FDPOS 包含 的長(zhǎng)度。CA (包含任何 )如果 至少包含 的一個(gè)字符 ,則邏輯表 達(dá)式 CA 為真。該比 較區(qū)分大小 寫(xiě)。如果比 較結(jié)果為真 ,則系統(tǒng)字 段 SY-FDPOS 包含 中第一個(gè)也 在 中出現(xiàn)的字 符的偏移量 。如果為假 ,SY-FDPOS 包含 的長(zhǎng)度。NA (不包含任 何)如果 不包含 的任何字符 ,則邏輯表 達(dá)式 NA 為真。該比 較區(qū)分大小 寫(xiě)。如果比 較結(jié)果為真 ,則系統(tǒng)字 段 SY-FDPOS 包含 的 長(zhǎng)度。如果 為假,則 SY-FDPOS 包含 中在 內(nèi)出現(xiàn)的第 一個(gè)字符的 偏移量。CS (包含字符 串)如果 包含字符串 , 則邏輯表達(dá) 式 CS 為真。忽略 尾部空格并 且比較不區(qū) 分大小寫(xiě)。 如果比較結(jié) 果為真,則 系統(tǒng)字段 SY-FDPOS 包含 在 中的偏移量 。如果為假 ,SY-FDPOS 包含 的長(zhǎng)度。NS (不包含字 符串)如果 不包含字符 串 , 則邏輯表達(dá) 式 NS 為真。忽略 尾部空格且 比較不區(qū)分 大小寫(xiě)。如 果比較為真 ,系統(tǒng)字段 SY-FDPOS 包含 的長(zhǎng)度。如 果為假,系 統(tǒng)字段 SY-FDPOS 包含 在 中的偏移量 。CP (包含模式 )如果 包含模式 , 則邏輯表達(dá) 式 CP 為真。如果 屬于類(lèi)型 C,則可以 在 中使用下列 通配符:_ * 用于任何字 符串_ + 用于任何單 個(gè)字符忽略尾部空 格且比較不 區(qū)分大小寫(xiě) 。如果比較 結(jié)果為真, 系統(tǒng)字段 SY-FDPOS 包含 在 中的偏移量 。如果為假 ,SY-FDPOS 包含 的長(zhǎng)度。如果要對(duì) 中的特殊字 符進(jìn)行比較 ,請(qǐng)將換碼 字符 # 放到其前面 ??梢允褂?換碼字符 # 指定_ 大小寫(xiě)字 符_ 通配符 *(輸 入 #*)_ 通配符 + (輸入 #+)_ 換碼符號(hào) 本身 (輸入 #)_ 字符串結(jié) 尾的空格 (輸入 #_)NP (不包含模 式)如果 不包含模式 , 則邏輯表達(dá) 式 NP 為真。在中 ,可以使用 與 CP 相同的通配 符和換碼字 符。忽略尾部空 格且比較不 區(qū)分大小寫(xiě) 。如果比較 結(jié)果為真, 則系統(tǒng)字段 SY-FDPOS 包含 . 的長(zhǎng)度,如 果為假,SY-FDPOS 包含 在 中的偏移量 。DATA: F1(5) TYPE C VALUE , F2(5) TYPE C VALUE .IF F1 F2. WRITE: / Comparison true, SY-FDPOS=, SY-FDPOS.ELSE. WRITE: / Comparison false, SY-FDPOS=, SY-FDPOS.ENDIF.下表列出該 程序的執(zhí)行 結(jié)果,取決 于所用的運(yùn) 算符和 F1 / F2 字段。ResultSY-FDPOSBD COABCD 真5BD COABCDE假 2ABC12CNABCD 真3ABABCCNABCD 假5ABcdeCABd 真1ABcdeCAbD 假5ABAB NAAB 假0ababaNAAB 真5ABcdeCSbC 真1ABcdeCSce 假5ABcdeNSbC 假1ABcdeNSce 真5ABcdeCP*b*真 1ABcdeCP*#b*假 5ABcdeNP*b*假 1ABcdeNP*#b*真 56二進(jìn)制位結(jié) 構(gòu)的比較要將邏輯表 達(dá)式初始操 作數(shù)第一字 節(jié)的二進(jìn)制 位結(jié)構(gòu)與第 二操作數(shù)的 進(jìn)行比較, 請(qǐng)使用下列 操作符。含 義O二進(jìn)制 位是 1Z二進(jìn)制 位是 0M混合二 進(jìn)制位第二 操作數(shù)的長(zhǎng) 度應(yīng)為一個(gè) 字節(jié)。沒(méi)有必要對(duì) 第二操作數(shù) 使用長(zhǎng)度為 1 的十六進(jìn)制 字段(類(lèi)型 X),但卻 較方便,因 為其長(zhǎng)度為 一個(gè)字節(jié)且 數(shù)字值直接 與二進(jìn)制位 結(jié)構(gòu)相關(guān)。操作符功能 如下:O (二進(jìn)制位 是 1)如果 中二進(jìn)制位 是 1 的位置,在 中是 1,則邏輯 表達(dá)式 O 為真。Z (二進(jìn)制位 是0)如果 中二進(jìn)制位 是 1 的位置,在 中是 0,則邏輯 表達(dá)式 Z 為真。M (混合二進(jìn) 制位)如果從 中二進(jìn)制位 是 1 的位置起, 中至少一個(gè) 是 1,一個(gè)是 0,則邏輯 表達(dá)式 M 為真。DATA: C VALUE C, HEXDEC TYPE X, I TYPE I.HEXDEC = 0.DO 256 TIMES. I = HEXDEC. IF C O HEXDEC. WRITE: / HEXDEC, I. ENDIF. HEXDEC = HEXDEC + 1.ENDDO.產(chǎn)生下列輸 出:00 001 102 203 340 6441 6542 6643 67這里,使用 運(yùn)算符 O 將字符C 的二進(jìn)制位 結(jié)構(gòu)與所有 0與 FF(10 進(jìn)制為 255)之 間的 16 進(jìn)制數(shù)進(jìn)行 比較。HEXDEC 的10 進(jìn)制值 I ,在HEXDEC 分配到I 期間,通過(guò) 使用自動(dòng)類(lèi) 型轉(zhuǎn)換確定 。如果比較 結(jié)果為真, 則在屏幕上 顯式 16 進(jìn)制數(shù)及其 10 進(jìn)制值。下 表列出這些 數(shù)的二進(jìn)制 位結(jié)構(gòu)。16 進(jìn)制10 進(jìn)制二進(jìn)制 位結(jié)構(gòu)00000000000011000000010220000001003300000011406401000000416501000001426601000010436701000011字 符C的 二進(jìn)制位結(jié) 構(gòu)由其 ASCII 碼 67 為當(dāng)前硬件 平臺(tái)進(jìn)行定 義。與用戶 看到的一樣 ,列表輸出 中出現(xiàn)的數(shù) 字,填寫(xiě) 1 的二進(jìn)制位 位置與 67 的二進(jìn)制位 結(jié)構(gòu)一樣。8檢查字段是 否屬于某一 范圍要檢查值是 否屬于特定 范圍,請(qǐng)使 用下列帶有 BETWEEN 參數(shù)的邏輯 表達(dá)式:語(yǔ)法. BETWEEN AND .如果 在 和 之間的范圍 內(nèi)發(fā)生,則 表達(dá)式為真 。它是下列 邏輯表達(dá)式 的短格式:IF GE AND LE .DATA: NUMBER TYPE I, FLAG.NUMBER = .IF NUMBER BETWEEN 3 AND 7. FLAG = X.ELSE. FLAG = .ENDIF.這里,如果 NUMBER 的內(nèi)容在 3 和 7 之間出現(xiàn), 字段 FLAG 設(shè)置為“X” 。9檢查初始值要檢查字段 是否設(shè)置為 初始值,請(qǐng) 如下使用帶 有 IS INITIAL 參數(shù)的邏輯 表達(dá)式。語(yǔ)法. IS INITIAL .如果 包含本身類(lèi) 型的初始值 ,則表達(dá)式 為真。通常 情況下,任 何字段,基 本的或結(jié)構(gòu) 化的(字符 串和內(nèi)表) ,在 CLEAR 語(yǔ)句執(zhí)行后 ,都包含其 初始值(參 見(jiàn) 重置缺省值 (頁(yè) 610) )。DATA FLAG VALUE X. IF FLAG IS INITIAL. WRITE / Flag is initial.ELSE. WRITE / Flag is not initial.ENDIF.CLEAR FLAG.IF FLAG IS INITIAL. WRITE / Flag is initial.ELSE. WRITE / Flag is not initial.ENDIF.這產(chǎn)生如下 輸出:Flag is not initialFlag is initial.這里,DATA 語(yǔ)句之后, 字符串 FLAG 不包含初始 值,因?yàn)橛?VALUE 參數(shù)設(shè)置為 X。執(zhí) 行 CLEAR 語(yǔ)句之后, 將其重置為 初始值。10檢查選擇條 件要檢查字段 內(nèi)容是否與 選擇表中的 選擇條件匹 配,可以如 下使用帶有 IN 參數(shù)的邏輯 表達(dá)式:語(yǔ)法. IN .如果字段 內(nèi)容的符合 選擇表 中的條件, 則表達(dá)式為 真。關(guān)于選擇條 件的詳細(xì)信 息,參見(jiàn) 使用選擇標(biāo)準(zhǔn)。關(guān)于邏輯表 達(dá)式中檢查 選擇條件的 詳細(xì)信息, 包括示例, 參見(jiàn) 使用邏輯表達(dá)式中的選擇表。10組合幾個(gè)邏 輯表達(dá)式通過(guò)使用邏 輯連接運(yùn)算 符 AND、OR 和 NOT,可 以將幾個(gè)邏 輯表達(dá)式組 合為單個(gè)表 達(dá)式: _ 要將幾個(gè) 邏輯表達(dá)式 組合為單個(gè) 表達(dá)式,且 該表達(dá)式僅 當(dāng)所有組件 表達(dá)式為真 時(shí)才為真, 則表達(dá)式之 間要用 AND 連接。_ 要將幾個(gè) 邏輯表達(dá)式 組合為單個(gè) 表達(dá)式,且 只要其中一 個(gè)組件表達(dá) 式為真時(shí), 該表達(dá)式即 為真,則表 達(dá)式之間要 用 OR 連接。_ 要轉(zhuǎn)化邏 輯表達(dá)式的 結(jié)果,請(qǐng)?jiān)?其前面指定 NOT。NOT 優(yōu)先于 AND,AND 優(yōu)先于 OR。但是 ,可以用任 何括弧組合 指定處理順 序。由于 ABAP/4 將括弧解釋 為單字,前 面或后面必 須至少有一 個(gè)空格。ABAP/4 從左到右處 理邏輯表達(dá) 式。如果確 定組件表達(dá) 式之一是真 或假,就不 再執(zhí)行該組 件中其余的 比較或檢查 。這意味著 采取這種方 法組織邏輯 表達(dá)式可以 提高性能, 就是將經(jīng)常 為假的比較 放置在 AND 鏈的開(kāi)頭, 而將費(fèi)時(shí)的 比較,如字 符串查找放 等到最后。DATA: F TYPE F VALUE 100.00, N(3) TYPE N VALUE 123, C(3) TYPE C VALUE 456.WRITE The following logical expression is true:.IF ( C LT N ) AND ( N GT F ). WRITE: / (,C,lt,N,) AND (,N,gt,F,).ELSE. WRITE: / (,C,ge,N,) OR (,N,le,F,).ENDIF.這產(chǎn)生如下 輸出:下列邏輯表達(dá)式為真: ( 456 ge 123 ) OR ( 123 le 1.000000000000000E+02 )在本例中, 在 IF 語(yǔ)句中使用 邏輯表達(dá)式 。如果邏輯 表達(dá)式為真 ,則將其在 屏幕上顯示 出來(lái)。如果 為假,則屏 幕上出現(xiàn)相 反的表達(dá)式 。10編程分支和 循環(huán)可以在程序 中定義條件 和無(wú)條件分 支和循環(huán)。 為此,ABAP/4 提供了幾個(gè) 在下列主題 中描述的語(yǔ) 句。分支循環(huán)11使用 IF 的條件分支IF 語(yǔ)句允許依 據(jù)條件將程 序流轉(zhuǎn)到特 定的語(yǔ)句塊 中。該語(yǔ)句 塊包括 IF 語(yǔ)句及其后 面的 ELSEIF、 ELSE 或 ENDIF 之間的所有 命令。語(yǔ)法IF . ELSEIF . ELSEIF . .ELSE. ENDIF.如果第一個(gè) 條件是真, 系統(tǒng)將執(zhí)行 所有語(yǔ)句直 到第一個(gè)語(yǔ) 句塊結(jié)束, 然后繼續(xù)處 理 ENDIF 語(yǔ)句之后的 程序。要采 用選擇性條 件,可以使 用 ELSEIF 語(yǔ)句。如果 第一個(gè)條件 是假,系統(tǒng) 使用與 IF 語(yǔ)句一樣的 方式處理后 面的 ELSEIF 語(yǔ)句。如果 IF 或 ELSEIF 條件都為假 ,則執(zhí)行 ELSE 開(kāi)始的語(yǔ)句 塊。最后的 語(yǔ)句塊必須 用 ENDIF 結(jié)束。要用公式表 達(dá) IF 和 ELSEIF 語(yǔ)句中的條 件,可以使 用任何 編程邏輯表 達(dá)式 (頁(yè) 8) 描述的邏輯 表達(dá)式。ABAP/4 允許無(wú)限地 嵌套 IF - ENDIF 語(yǔ)句塊,但 是必須在相 同的處理塊 中終止。換 句話說(shuō),就 是 IF - ENDIF 塊不能包含 事件關(guān)鍵字 。DATA: TEXT1(30) VALUE This is the first text, TEXT2(30) VALUE This is the second text, TEXT3(30) VALUE This is the third text, STRING(5) VALUE eco.IF TEXT1 CS STRING. WRITE / Condition 1 is fulfilled.ELSEIF TEXT2 CS STRING. WRITE / Condition 2 is fulfilled.ELSEIF TEXT3 CS STRING. WRITE / Condition 3 is fulfilled.ELSE. WRITE / No condition is fulfilled.ENDIF.產(chǎn)生如下輸 出:Condition 2 is fulfilled.這里,第二 個(gè)邏輯表達(dá) 式 TEXT2 CS STRING 是真,因?yàn)?字符串“eco” 存在于 TEXT2 中。12使用 CASE 的條件分支要根據(jù)特殊 數(shù)據(jù)字段的 內(nèi)容執(zhí)行不 同的語(yǔ)句塊 ,可以如下 使用 CASE 語(yǔ)句:語(yǔ)法CASE . WHEN . WHEN . WHEN . WHEN . . WHEN OTHERS. ENDCASE.系統(tǒng)執(zhí)行 WHEN 語(yǔ)句之后的 語(yǔ)句塊,如 果 內(nèi)容等于 的內(nèi)容,且 繼續(xù)處理 ENDCASE 語(yǔ)句后面的 語(yǔ)句。如果 的內(nèi)容不等 于 的內(nèi)容,則 執(zhí)行選項(xiàng) WHEN OTHERS 后面的語(yǔ)句 塊。最后的 語(yǔ)句塊必須 用 ENDCASE 結(jié)束。使用 CASE 的條件分支 是帶 IF 的類(lèi)似處理 的短格式:IF = . ELSEIF = . ELSEIF = . ELSEIF = . .ELSE. ENDIF.在 ABAP/4 中,可以嵌 套 CASE - ENDCASE 塊,且可以 與 IF - ENDIF 結(jié)合使用, 但必須在同 一處理塊中 終止。DATA: TEXT1 VALUE X, TEXT2 VALUE Y, TEXT3 VALUE Z, STRING VALUE A.CASE STRING. WHEN TEXT1. WRITE: / String is, TEXT1. WHEN TEXT2. WRITE: / String is, TEXT2. WHEN TEXT3. WRITE: / String is, TEXT3. WHEN OTHERS. WRITE: / String is not, TEXT1, TEXT2, TEXT3.ENDCASE.產(chǎn)生如下輸 出:String is not X Y Z這里,執(zhí)行 WHEN OTHERS 后面的語(yǔ)句 塊,因?yàn)?STRING 的內(nèi)容“A” 不等于“X” 、“Y”或 “Z”,。13使用 DO 的無(wú)條件循 環(huán)如果想要多 次執(zhí)行語(yǔ)句 塊,則可以 如下使用 DO 語(yǔ)句編程循 環(huán):語(yǔ)法DO TIMES VARYING FROM NEXT . ENDDO.在發(fā)現(xiàn) EXIT、 STOP 或 REJECT 語(yǔ)句之前, 系統(tǒng)繼續(xù)執(zhí) 行由 DO 引導(dǎo)、ENDDO 結(jié)束的語(yǔ)句 塊(參見(jiàn) 終止循環(huán) (頁(yè) 8) )。可以使用 TIMES 選項(xiàng)限制循 環(huán)次數(shù)。 可以是文字 或變量。如 果 是 0 或負(fù)數(shù),系 統(tǒng)不執(zhí)行該 循環(huán)。系統(tǒng)字段 SY-INDEX 中包含已處 理過(guò)的循環(huán) 次數(shù)。使用 DO 語(yǔ)句時(shí)要避 免死循環(huán)。 如果不使用 TIMES 選項(xiàng),則在 語(yǔ)句塊中至 少應(yīng)包含一 個(gè) EXIT、 STOP 或 REJECT 語(yǔ)句,以便 系統(tǒng)能夠退 出循環(huán)。本例顯示 DO 循環(huán)的基本 格式。DO.WRITE SY-INDEX. IF SY-INDEX = 3. EXIT. ENDIF.ENDDO.產(chǎn)生如下輸 出: 1 2 3這里,處理 3 次循環(huán),然 后在 EXIT 語(yǔ)句后退出 循環(huán)。可以任意嵌 套 DO 循環(huán),也可 以與其他循 環(huán)組合使用 。本例顯示 2 個(gè)嵌套循環(huán) ,都使用 TIMES 選項(xiàng)。DO 2 TIMES. WRITE SY-INDEX. SKIP. DO 3 TIMES. WRITE SY-INDEX. ENDDO. SKIP.ENDDO.產(chǎn)生如下輸 出: 1 1 2 3 2 1 2 3外部循環(huán)執(zhí) 行 2 次。每次執(zhí) 行外部循環(huán) 時(shí),內(nèi)部循 環(huán)都執(zhí)行 3 次。注意系 統(tǒng)字段 SY-INDEX 記錄每個(gè)循 環(huán)各自的循 環(huán)次數(shù)??梢允褂?VARYING 選項(xiàng)在每次 循環(huán)中給變 量 重新賦值。 、 、 、 . 必需是內(nèi)存 中類(lèi)型相同 和長(zhǎng)度相等 的一系列等 距字段。第 一次循環(huán)中 ,將 分配給 ,第 二次循環(huán)中 ,將 分配給 ,以 此類(lèi)推???以在一個(gè) DO 語(yǔ)句中使用 多個(gè) VARYING 選項(xiàng)。如果在 DO 循環(huán)中改變 控制變量 ,則 系統(tǒng)將自動(dòng) 改變相應(yīng)的 字段 。應(yīng)保證循環(huán) 次數(shù)不超過(guò) 涉及到的變 量 、 、 的數(shù)量。該示例說(shuō)明 如何在 DO 循環(huán)中使用 VARYING 選項(xiàng)。DATA: BEGIN OF TEXT, WORD1(4) VALUE This, WORD2(4) VALUE is, WORD3(4) VALUE a, WORD4(4) VALUE loop, END OF TEXT.DATA: STRING1(4), STRING2(4).DO 4 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD2. WRITE STRING1. IF STRING1 = is. STRING1 = was. ENDIF.ENDDO.SKIP.DO 2 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD3 VARYING STRING2 FROM TEXT-WORD2 NEXT TEXT-WORD4. WRITE: STRING1, STRING2.ENDDO.這產(chǎn)生如下 輸出:This is a loopThis was a loop字段串 TEXT 代表內(nèi)存中 四個(gè)等距字 段序列。每 次執(zhí)行第一 個(gè) DO 循環(huán)時(shí),都 依次將其組 件分配到 STRING1 中。如果 STRING1 包含“is” ,則將其改 變?yōu)椤皐as” ,而且自動(dòng) 將 TEXT-WORD2 改變?yōu)椤皐as” 。每次執(zhí)行 第二個(gè) DO 循環(huán)時(shí),將 TEXT 的組件傳遞 給STRING1和 STRING2。15使用 WHILE 的條件循環(huán)如果只要條 件為真,就 不止一次執(zhí) 行語(yǔ)句,可 以如下使用 WHILE 語(yǔ)句編程:語(yǔ)法WHILE VARY FROM NEXT . ENDWHILE.只要 是真,或系 統(tǒng)發(fā)現(xiàn) EXIT、 STOP 或 REJECT 語(yǔ)句,系統(tǒng) 將繼續(xù)執(zhí)行 由 WHILE 語(yǔ)句引導(dǎo)、 ENDWHILE 結(jié)束的語(yǔ)句 塊(參見(jiàn) 終止循環(huán) (頁(yè) 8) )。對(duì)于 , 可以使用 編程邏輯表 達(dá)式 (頁(yè) 8) 中描述的任 何邏輯表達(dá) 式。系統(tǒng)字段 SY-INDEX 中包含已執(zhí) 行的循環(huán)次 數(shù)。可以任意嵌 套 WHILE 循環(huán),也可 與其他循環(huán) 結(jié)合使用。WHILE 語(yǔ)句的 VARY 選項(xiàng)與 DO 循環(huán)的 VARYING 選項(xiàng)工作方 式一樣(參 見(jiàn)使用 DO 的無(wú)條件循 環(huán) (頁(yè) 8) )。允許 每次執(zhí)行循 環(huán)時(shí)為變量 重新賦值。 、 、 、 . 必需是內(nèi)存 中類(lèi)型相同 和長(zhǎng)度相等 的一系列等 距字段。第 一次循環(huán)時(shí) ,將 分配給 ,第 二次循環(huán)時(shí) ,將 分配給 ,以 此類(lèi)推???以在一個(gè) WHILE 語(yǔ)句中使用 多個(gè) VARY 選項(xiàng)。使用 WHILE 語(yǔ)句要避免 死循環(huán)。請(qǐng) 記住,在一 段時(shí)間之后 ,WHILE 語(yǔ)句條件應(yīng) 變?yōu)榧?,?者系統(tǒng)能夠 找到 EXIT、 STOP 或 REJECT 語(yǔ)句退出循 環(huán)。DATA: LENGTH TYPE I VALUE 0, STRL TYPE I VALUE 0, STRING(30) TYPE C VALUE Test String.STRL = STRLEN( STRING ).WHILE STRING NE SPACE. WRITE STRING(1). LENGTH = SY-INDEX. SHIFT STRING.ENDWHILE.WRITE: / STRLEN: , STRL.WRITE: / Length of string:, LENGTH.產(chǎn)生如下輸 出:T e s t S t r i n gSTRLEN: 11Length of string: 11此處使用 WHILE 循環(huán)確定字 符串的長(zhǎng)度 。做法是: 每次執(zhí)行循 環(huán)時(shí),都將 字符串左移 一位,直到 僅包含空格 。選擇本例 主要是為了 說(shuō)明 WHILE 語(yǔ)句。但是 ,確定字符 串長(zhǎng)度更簡(jiǎn) 便和有效的 辦法是通過(guò) 使用內(nèi)置的 函數(shù) STRLEN, 這在示例中 也可看出。16終止循環(huán)要終止循環(huán) 過(guò)程,請(qǐng)使 用下列關(guān)鍵 字之一。關(guān)鍵 字用途無(wú)條 件終 止 循 環(huán)過(guò) 程 (頁(yè) 8) CONTINUE 有條 件終 止 循 環(huán)過(guò) 程 (頁(yè) 8) CHECK 完全 終止 循 環(huán) (頁(yè) 8) EXIT 在循環(huán)中只 能使用 CONTINUE, 但在循環(huán)外 還可使用關(guān) 鍵字 CHECK 和 EXIT, 分別完成不 同的功能。 例如,可以 終止子程序 或整個(gè)程序 塊。關(guān)于 CHECK 和 EXIT 語(yǔ)句及其如 何在循環(huán)外 使用的詳細(xì) 信息,參見(jiàn)終止子系統(tǒng) 和 終止處理塊 。以下主題說(shuō) 明如何在 DO 和WHILE 循環(huán)以及下 列循環(huán)中使 用 CONTINUE、 CHECK 和 EXIT:_ LOOP - ENDLOOP 循環(huán),用于 處理內(nèi)表( 參見(jiàn) 循環(huán)處理 (頁(yè) Error! Not a valid link.) )。_ SELECT - ENDSELECT 循環(huán),用于 從數(shù)據(jù)表中 讀取數(shù)據(jù)( 參見(jiàn) 從幾行選擇所有數(shù)據(jù))。17無(wú)條件終止 循環(huán)過(guò)程要立即無(wú)條 件終止循環(huán) ,請(qǐng)如下使 用 CONTINUE 語(yǔ)句:語(yǔ)法CONTINUE.在CONTINUE 語(yǔ)句之后, 系統(tǒng)跳過(guò)當(dāng) 前語(yǔ)句塊中 所有剩余語(yǔ) 句塊,繼續(xù) 該語(yǔ)句后面 的循環(huán)。DO 4 TIMES. IF SY-INDEX = 2. CONTINUE. ENDIF. WRITE SY-INDEX.ENDDO.產(chǎn)生如下輸 出: 1 3 4此處系統(tǒng)不 處理 WRITE 語(yǔ)句就終止 第二次循環(huán) 。17有條件終止 循環(huán)過(guò)程要有條件終 止循環(huán)過(guò)程 ,請(qǐng)如下使 用 CHECK 語(yǔ)句:語(yǔ)法CHECK .如果條件是 假,系統(tǒng)跳 過(guò)當(dāng)前語(yǔ)句 塊中所有剩 余語(yǔ)句塊, 繼續(xù)后面的 循環(huán)過(guò)程。 對(duì)于, 可使用 編程邏輯表 達(dá)式 (頁(yè) 8) 中描述的任 何邏輯表達(dá) 式。DO 4 TIMES. CHECK SY-INDEX BETWEEN 2 and 3. WRITE SY-INDEX.ENDDO.產(chǎn)生如下輸 出: 2 3此處系統(tǒng)不 處理 WRITE 語(yǔ)句就終止 第一個(gè)和第 四個(gè)循環(huán), 因?yàn)?SY-INDEX 不在 2 和 3 之間。18完全終止循 環(huán)要無(wú)條件完 全終止循環(huán) ,請(qǐng)如下使 用 EXIT 語(yǔ)句:語(yǔ)法EXIT.EXIT 語(yǔ)句之后, 系統(tǒng)立即退 出循環(huán),繼 續(xù)結(jié)束語(yǔ)句 (ENDDO、 ENDWHILE、 ENDSELECT)后 面的處理。 在嵌套循環(huán) 中,系統(tǒng)僅 退出當(dāng)前循 環(huán)。DO 4 TIMES. IF SY-INDEX = 3. EXIT. ENDIF.WRITE SY-INDEX.ENDDO.產(chǎn)生如下輸 出: 1 2此處系統(tǒng)不 處理 WRITE 語(yǔ)句或第四 個(gè)循環(huán)過(guò)程 ,就在第三 個(gè)循環(huán)過(guò)程 中完全終止 循環(huán)。 8: 概覽內(nèi)容ABAP/4中 流控制的概 念編程邏輯表 達(dá)式比較所有的 字段類(lèi)型比較字符串 和數(shù)字串二進(jìn)制位結(jié) 構(gòu)的比較檢查字段是 否屬于某一 范圍檢查初始值檢查選擇條 件組合幾個(gè)邏 輯表達(dá)式編程分支和 循環(huán)使用 IF 的條件分支使用 CASE 的條件分支使用 DO 的無(wú)條件循 環(huán)使用 WHILE 的條件循環(huán)終止循環(huán)要根據(jù)一定 條件執(zhí)行程 序組件,或 要將重復(fù)語(yǔ) 句序列組合 在循環(huán)中, 可以使用 ABAP/4 提供的用于 控制程序流 的標(biāo)準(zhǔn)關(guān)鍵 字。ABAP/4 也包含重要 的附加特征 。ABAP/4 程序流可以 內(nèi)部控制和 外部控制。 ABAP/4 程序流的內(nèi) 部控制和外 部控制之間 的差別在ABAP/4中 流控制的概 念 (頁(yè) 8) 中 解釋。本節(jié)主要討 論內(nèi)部流控 制。為此, 可使用其他 編程語(yǔ)言( 例如,C、 FORTRAN、 PASCAL 等等)中熟 悉的標(biāo)準(zhǔn)控 制關(guān)鍵字。下列主題描 述19ABAP/4中 流控制的概 念與其他高級(jí) 編程語(yǔ)言一 樣(如,C、 FORTRAN 和 PASCAL 等等),ABAP/4 提供也用于 控制程序流 的標(biāo)準(zhǔn)關(guān)鍵 字。這些關(guān) 鍵字用于_ 分支 (IF、CASE)_ 循環(huán) (DO、WHILE)然而,ABAP/4 與其他編程 語(yǔ)言不同之 處在于其具 有程序流的 內(nèi)部控制和 外部控制。_ 內(nèi)部控制 由上述標(biāo)準(zhǔn) 關(guān)鍵字引導(dǎo) 。在程序代 碼中對(duì)其進(jìn) 行定義。_ 外部控制 由事件引導(dǎo) 。事件由 ABAP/4 程序(系統(tǒng) 程序或用戶 程序)或者 交互式用戶 輸入(例如 ,使用鼠標(biāo) 在屏幕上單 擊)生成。 系統(tǒng)不必按 ABAP/4 程序中列出 的順序?qū)M(jìn) 行語(yǔ)句處理 。這使得 ABAP/4 成為事件驅(qū) 動(dòng)編程語(yǔ)言 ,類(lèi)似于 Microsoft 的Visual Basic。時(shí)間事件和 ABAP/4 程序的連接 由事件關(guān)鍵 字提供。ABAP/4 程序中的每 個(gè)語(yǔ)句都屬 于特別的事 件關(guān)鍵字。 即使在程序 中沒(méi)有指定 任何事件關(guān) 鍵字,所有 語(yǔ)句都自動(dòng) 歸屬于標(biāo)準(zhǔn) 事件關(guān)鍵字 (START-OF-SELECTION) ,與程序中 事件語(yǔ)句的 次序完全不 相干。所有屬于某 一特定事件 關(guān)鍵字的語(yǔ) 句形成一個(gè) 處理塊。處 理塊是一個(gè) 在事件發(fā)生 時(shí)執(zhí)行的模 塊。處理塊 內(nèi)的程序流 依賴于內(nèi)部 控制。系統(tǒng) 按順序處理 語(yǔ)句,或按 照前面提到 的標(biāo)準(zhǔn)關(guān)鍵 字定義的順 序處理。ABAP/4 程序常規(guī)結(jié) 構(gòu)如下:假設(shè)當(dāng)用戶 選擇一行后 ,生成列表 且提供一些 細(xì)分設(shè)備的 報(bào)表程序必 須作出反應(yīng) (詳細(xì)信息 ,參見(jiàn) 交互列表)。需要為 該事件處理 的代碼必須 插入事件關(guān) 鍵字 AT LINE-SELECTION 之后。AT LINE-SELECTION. MOVE X TO FLAG. .無(wú)論何時(shí)用 戶通過(guò)單擊 鼠標(biāo)或按 F2 鍵在列表中 選擇一個(gè)項(xiàng) 目時(shí),AT LINE-SELECTION 和下一個(gè)事 件關(guān)鍵字之 間的所有語(yǔ) 句將被處理關(guān)于外部控 制的詳細(xì)信 息,如事件 及其如何與 ABAP/4 程序相互作 用的信息, 參見(jiàn) C通過(guò)事件控制 ABAP/4 程序流。該節(jié)說(shuō)明如 何使用外部 控制控制處 理塊內(nèi)的程 序流。要控制 ABAP/4 程序中的內(nèi) 部流,請(qǐng)遵 循結(jié)構(gòu)化編 程原則并將 程序模塊劃 分為單個(gè)邏 輯相關(guān)語(yǔ)句 塊(這些組 成控制結(jié)構(gòu) )。其中的 每個(gè)語(yǔ)句塊 都執(zhí)行主任 務(wù)的一部分 。要使程序易 于閱讀,應(yīng) 該縮排控制 結(jié)構(gòu)中的語(yǔ) 句塊。出于 布局需要, 可以使用 ABAP/4 編輯器功能 “編輯 - 插入語(yǔ)句.” 和“程序 - 整齊打印程 序”(詳細(xì) 信息,參見(jiàn) ABAP/4 程序布局 (頁(yè) 26)。可以用 IF、CASE、 DO 和 WHILE 之類(lèi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲服務(wù)溝管理制度職責(zé)
- 建筑維修三級(jí)感染管理職責(zé)與制度他
- 2025-2030智慧城市建設(shè)中的物聯(lián)網(wǎng)技術(shù)集成與投資回報(bào)評(píng)估報(bào)告
- 汽車(chē)銷(xiāo)售財(cái)務(wù)制度和流程
- 2025至2030遠(yuǎn)程放射服務(wù)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國(guó)稀貴金屬行業(yè)經(jīng)營(yíng)效益與發(fā)展行情走勢(shì)預(yù)測(cè)報(bào)告
- 2025至2030中國(guó)移動(dòng)人行道行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國(guó)社交媒體管理軟件行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國(guó)堿性蓄電池行業(yè)發(fā)展對(duì)策及前景趨勢(shì)洞察報(bào)告
- 2025至2030中國(guó)電熱毯市場(chǎng)需求趨勢(shì)及零售渠道發(fā)展現(xiàn)狀報(bào)告
- 體外診斷試劑盒線性范圍研究線性區(qū)間評(píng)價(jià)資料及可報(bào)告區(qū)間建立
- AQ 1097-2014 井工煤礦安全設(shè)施設(shè)計(jì)編制導(dǎo)則(正式版)
- 甲乙方施工合同范本
- 嬰幼兒配方乳粉市場(chǎng)銷(xiāo)售管理規(guī)范
- 小班語(yǔ)言《誰(shuí)的救生圈》課件
- 海思芯片PC-測(cè)試技術(shù)規(guī)范
- 內(nèi)陸?zhàn)B殖與水生植物種植
- 集體協(xié)商培訓(xùn)課件
- Unit 3 What would you like A Let's learn(教學(xué)設(shè)計(jì))人教PEP版英語(yǔ)五年級(jí)上冊(cè)
- 物業(yè)社區(qū)團(tuán)購(gòu)方案
- 仙家送錢(qián)表文-文字打印版
評(píng)論
0/150
提交評(píng)論