由於任一編碼列中僅能使用一個運算子(operator)
,對於較複亭的數學計算就比較難處理些,類似下列之代數式子即無法使用於RPG中:
A=X*(B/C)
處理此種運算式一次只能有一個運算(如下所示)。
RPG的基本運算子有四個:ADD、SUB、MULT及DIV,其語法如下:
1、代數:A=X-Y
C X ADD Y A
2、代數:A=X-Y
C X SUB Y A
3、代數:A=X*Y
C X MULT Y A
4、代數:A=X/Y
C X DIV Y A
而前述例子在RPG中之寫法,如下所示:
C B DIV C A
C B MULT C A
RPG中提供IF、DO WHILE及GOTO等指引程式流程的基本邏輯運算子,包括:
說明 IF OR AND DO WHILE
等於 IFEQ OREQ ANDEQ DOWEQ
不等於 IFNE ORNE ANDNE DOWNE
小於 IFLT ORLT ANDLT DOWLT
大於 IFGT ORGT ANDGT DOWGT
邏輯運算子的一般語法如下:
1、邏輯:例如A>B或C=1,即回到START常式
C A IFGT B
C C OREQ 1
C GOTO START C
END
注意!邏輯區段之後為END敘述,每一IF或DOWHILE需有一END
2、邏輯:假如X
C X DOWLT25
C ADD 1 X C
END
注意!邏輯區段之後為END敘述,每一IF或DOWHILE需有一END
GOTO敘述可改變程式流程到一標記中,此標記為與TAG OP碼所定義者,如下例所示:
C *IN99 IFEQ'1'
C GOTO END
C
C*
.
.
.
C*
C END TAG
C SETON LR
I/O:查詢、讀與寫或更新記錄
在RPG中,資料庫的I/O所使用之OP碼包括:
EXFMT 執行已設計過且已編譯過RPG之螢幕,傳送RPG欄位到螢幕中,例如:
C EXFMTORDSCR
CHAIN 查詢索引中的名稱值、讀取記錄、及設定未找著之RPG特殊指標(本例為77):
C CODE CHAINORDER 77
READ 讀取下一筆記錄,設定檔結束之指標為77:
C READ ORDER 77
READE 設定所指的下一筆記錄為相同索引值並設定未找著之特殊指標為77:
C CODE READORDER 77
SETGT 設定大於名稱值之數值指到下一筆記錄並設定未找著之指標為77,此OP碼不在讀取記錄;但必需下達READ命令
C CODE SETGRORDER 77
UPDAT 更新目前之記錄(需為記錄格式名稱而不是資料庫名稱):
C UPDATORD
WRITE 新增一記錄到資料庫中(需為記錄格式名稱而非資料庫名稱):
C CODE WRITEORDER 77
指標
RPG中提供協助程式邏輯流程與控制用之特殊指標(indicators),這些指標參考之方式有兩種:
第一種,使用*INnn語法,如下例所示:
C EXFMTORDSCR
C*
C *IN99 IFEQ '1'
C GOTO END
C END
此表示,使用EXFMTORDSCR執行一個螢幕畫面,假如指標99是設定當使用者離開畫面後為1,就強迫到END標記下執行
指標99乃定義於螢幕中,SDA,由使用者按下的F3鍵信號而來
RPG允許指標設定為01~99之間,供程式師作為程式之旗標(flag)
這些指標通常使用於告之檔案中的檔結束、確定邏輯條件為真(ture)、使用者傳送於螢幕中的鍵值是什麼…等等
程式師可設定下列敘述之指標為12:
C SETON 12
並以相同指標撤除之:
C SETOF 12
第二種,在特殊行中根據用途由RPG來提供之,例如下列N77的意思是表示,假如指標77未傳回,即更新ORD的記錄格式,此種方式通常使用於與CHAIN連結,以決定資料庫中是否記錄早已存在於索引中,假如不存在,即使用UPDAT;否則使用WRITE:
C CODE CHAINORDER 77
C QTY MULT PRICE TOT
C* *IN77 IFNE '1'
C UPDATORD
C ELSE
C WRITEORD
C END
此碼可以為:
C N77 UPDATORD
C 77 WRITEORD
這種簡潔的方式比較缺乏明確性,故建議讀者仍以使用IFNE結構為佳
RPG提供一組特殊的指標以用來決定程式流程與分支(branching)但我們僅需考慮LR指標即可,它可用來告之RPG,是否所讀取之記錄為輸入檔的最後一筆記錄
不論由RPG週期(cycle)或程式師來設定LR,RPG皆允許隨時結束程式,在程式中可利用GOTO指示程式流程到END TAG,但這不足以構成結束程式之條件,通常是加一SETON LR來告之RPG已完成處理,如下所示:
C END TAG
C SETON LR
RPG週期
RPG中有一自動式週期,除非是程式師將色中斷之外,基本上,此週期與F規格中所定義主要的資料檔之一有密切之關係
首先是RPG從此檔中一次讀取一筆記錄,然後執行主要之輸入檔計算規格的所有邏輯問題,假如,主要輸入檔已結束,最後即設定LR為最後一筆記錄
啟動DEBUG
當程式編譯無誤後,可執行DEBUG程式,它會顯示所選擇列號之變數內容,若欲啟動DEBUG,可鍵入如下命令:
STRDBG pgmname UPDPROD(*YES)
其中,pgmname為所欲除錯之程式的名稱,UPDPROD(*YES)系指程式中指定所欲執行之已存在資料檔,進行所需改變之資料
設定中斷點
當啟動DEBUG後,可於程式中所欲停止及所欲查看之指定變數設定行號之中斷點(berakpoints),例如:
ADDBKP STMT(23500) PGMVAR((X)(NAME))
此敘述會在畫面上將程式停止在第235列,並顯示X及NAME變數之內容
注意!列號之後,有2個0,它們不能省略
中斷點需設定在可執行的列號,不能設定於註解列之列號,例如:
以一般方式呼叫程式:
CALL PGMNAME
它將會停在表示之列號並顯示其變數之內容
若欲移開中斷點,則需使用下列命令:
RMVBKP STMT(23500)
若欲結束DEBUG,祇需鍵入如下命令即可:
ENDDBG
每次重編譯時需結束並重啟動DEBUG一次