AS400的庫類似於windows上的檔夾,但他與windows有些區別。
主要的層次關係是:庫-〉對象-〉成員
其最上一層是一個叫做QSYS的庫,這也是唯一一個特殊的庫,因為它的下面仍然可以包含其他的庫,而除此之外的庫下都不能再有庫。也就是說,庫只有一個層次,不象windows下面的檔夾是可以多層存在的。
緊跟著庫下來的一層是對象。一般來說,物件是一個可以實際應用和運行的。例如:編譯後的資料檔案,列印檔和程式。當然,物件也不僅僅包括這些,還有其他屬性的物件,最常見的就是QPRGSRC\QDDSSRC\QDSPSRC,這些名字都是預定俗成的名字,當然也可以改成其他的名字。
這幾個物件是作為物理原始檔案屬性的。
對象的下面一層叫做成員。最常見的成員類型包括 PF LF DSPF RPG PRTF。這些類型的成員是我們在實際編程中經常打交道的,因為我們所作的編碼工作就是針對這幾個類型的成員進行的。成員編譯後形成相應的物件。如PF\LF --->可以存儲資料的物理檔和相應的邏輯檔;RPG --->可執行的程式,等等。編譯系統根據檔不同的類型編譯後會形成不同的物件類型。
AS400下編程的檔
1、文件類型
這裏所說的檔主要是指物理檔、邏輯檔、顯示檔和列印檔。物理檔和邏輯檔主要是存儲資料的檔;顯示檔主要是用於畫面顯示格式和屬性的;列印檔主要是控制列印檔的佈局和顯示格式的。這些檔都是在RPG程式中的F表中進行聲明的,供程式中資料處理和存儲使用。利用通過RPG程式從多個物理檔中取得相應的資料項目顯示到畫面上,也可以通過RPG程式將用戶在畫面上輸入的資料存儲到物理檔中。物理檔中的資料是實際客觀存在的,而顯示檔和列印檔中的資料只是在程式運行時才有存在,程式退出後其中的資料也相應的消失。
2、檔使用
RPG程式中對所用的檔進行聲明以後,這些檔中的欄位名稱都可以作為已知變數使用。比如當對一個檔進行讀操作後,該欄位名稱中的值即為檔當前讀到記錄的相應的欄位的值,在RPG程式中就可以通過引用該欄位名稱來獲得當前記錄的相應欄位的值。如果要想檔中寫入資料,只需要在RPG程式中,將想要寫入的數值傳送到相應的欄位名稱中,然後執行檔的寫操作,就可以生成一條新的紀錄。更新檔也是一樣,不同的就是執行檔的更新操作。顯示檔和列印檔的使用也類似,都是將想要的數值傳入相應檔的相應欄位中,然後執行相應的操作即可。
主要的幾種說明表(H, F, I, E, C)
RPG語言中對作用不同的部分分別用開頭一列字母來劃分,也可以稱為XX表或XX部。
RPG語言中包括H表、 F表、 E表、 I表、 C表、 L表、 O表。
但是現在經常用到的主要是H表、 F表、 E表、 I表、 C表。
H表(控制說明標):提供你的程式和系統的資訊,其中可說明程式的名字、程式所用日期的格式和是否應用交替核對排序和檔翻譯。(可選)
F表(文件說明表):描述程式應用的所有檔資訊,包括檔案名、如何應用文件、檔記錄的大小、檔應用的輸入輸出設備、檔是否被外部指示器控制等。
E表(擴展說明表):描述所有在程式中應用的記錄位址檔、表檔和矩陣檔的資訊;包括記錄地檔、矩陣或表的名字,表或矩陣資料記錄的入口數目,表或矩陣的入口數目及長度。
I表(輸入說明表):可以定義資料結構,說明輸入檔的記錄和欄位的一些資訊。
C表(計算說明表): 描述在資料上作的計算和計算次序,也可以用於控制某些輸入輸出操作;其資訊包括對操作說明控制級和條件指示器,程式中應用的欄位和常數,被處理的操作以及處理之後是否設置結果指示器等,這也是我們編碼主要處理的部分,這裏實現了程式的處理功能。
====================================================================================
先說說RPG一般用來做什麼吧,舉例說:
1. 整個RPG程式不包含任何外部程式,只是做些簡單的數學運算,或者對資料區、DATAQ等非檔目標進行操作,這屬於相對最簡單的情況;
2. RPG程式對物理檔或者邏輯檔進行讀、寫、更新、刪除操作;
3. RPG程式結合物理檔或邏輯檔、以及顯示檔進行操作,這屬於比較複雜的情況;
4. RPG程式結合物理檔或邏輯檔、顯示檔、以及ICF檔(即通訊檔)進行操作,這種情況也比較複雜。
當然,以上的情況只是平時使用的歸納,你也可以根據自己的實際需要結合各種情況,此處不再深入探討。
=============================================
以下結合例子簡單說說各種情況,假設以下源碼檔存放的路徑是 庫MYLIB、源物理檔MYSRCPF
1. (1)做個簡單的運算,比如AXB/(C-D)+E,有加減乘除等運算,代碼如下:
*************** Beginning of data *************************************
0001.00 C Z-ADD2 A 10
0002.00 C Z-ADD10 B 20
0003.00 C Z-ADD5 C 10
0004.00 C Z-ADD1 D 10
0005.00 C Z-ADD2 E 10
0006.00 C Z-ADD0 TEM 30
0007.00 C Z-ADD0 RST 30
0008.00 C A MULT B TEM
0009.00 C C SUB D RST
0010.00 C TEM DIV RST RST
0011.00 C MVR TEM2 30
0012.00 C RST ADD E RST
0013.00 C RST DSPLY
0014.00 C SETON LR
****************** End of data ****************************************
<注>:
(a) Z-ADD表明把Factor2處的變數值賦給Result處的變數,值得注意的是這兩個變數都是數值型的,例如,"Z-ADD2 A 10 "表示把2賦給變數A,後面的"10"中的“1”表示變數A的長度是1,“0”表示小數位長度是0,即A是一個長度為1整型變數;
(b) MULT表示做乘法運算,“A MULT B TEM”表示AXB,把結果賦給整型變數TEM;
(c) SUB表示做減法運算,“C SUB D RST”表示C-D,把結果賦給整型變數RST;
(d) DIV表示做除法運算,“TEM DIV RST RST”表示TEM/RST,把結果賦給整型變數RST;
(e) MVR表示做取餘數運算,“MVR TEM2 30”表示把餘數賦給整型變數TEM2;
(f) ADD表示做取加法運算,“RST ADD E RST”表示RST+E,把結果賦給整型變數RST,這句一般寫成“ADD E RST”也可以。
(g) DSPLY表示顯示變數值,“RST DSPLY”表示顯示變數RST的值;
(h) SETON表示給指示器置為*ON的狀態,即'1',“SETON LR”表示把LR指示器置為*ON,該句的意思表示最後一條記錄,即程式結束。
按F3保存,假設該檔案名是MYRPG,所在的庫是MYLIB,源物理檔是MYSRCPF。
程式寫好之後,應該進行編譯了。用WRKMBRPDM FILE(MYLIB/MYSRCPF),找到剛才的檔MYRPG,輸入14,按F4,進入“Create RPG/400 Program (CRTRPGPGM)” 畫面,參數:
(i) Program: 生成的目標名(假如為MYOBJ);
(ii) Library: 生成的目標存放的庫(假如為MYLIB)。
參數填好之後,按確認鍵即進行編譯,如果程式沒錯,則生成目標檔,假設為MYOBJ。
在命令行輸入CALL MYLIB/MYOBJ,這時命令上應該顯示RST的值。
(<注>:目標即可執行檔)
-
沒有留言:
張貼留言