IBM mainframe PLI 培訓(xùn)教程
《IBM mainframe PLI 培訓(xùn)教程》由會員分享,可在線閱讀,更多相關(guān)《IBM mainframe PLI 培訓(xùn)教程(45頁珍藏版)》請在裝配圖網(wǎng)上搜索。
PL/1 For Entry Level Training,By Raymond,內(nèi)容,簡介 PLI 練習(xí) IMS 練習(xí)和復(fù)習(xí),概論,PLI VS COBOL IMS DC VS CICS IMS DB,編程基礎(chǔ)-規(guī)則(1),PL/I(Programming Language No.1)的特征 通用性 適用于科學(xué)計算,事務(wù)處理等等各方面 容易理解性,使用日常生活相近的語言(英語) (例) IF GRADE = 60 THEN RESULT = “PASS”; ELSE RESULT = “FAIL”; 書寫簡單性 形式自由– 記述的位置沒有限定,編程基礎(chǔ)-規(guī)則(2),程序構(gòu)成,,Program Name: PROC OPTIONS (MAIN);,文件及變量定義,程序邏輯處理,END Program Name;,編程基礎(chǔ)-規(guī)則(3),程序的構(gòu)成(例) REI01: PROC OPTIONS (MAIN); DCL BAR_CODE CHAR( 5), NAME CHAR(10), PRICE FIXED DEC( 5), AMOUNT FIXED DEC( 7), TOTAL FIXED DEC(11); /*** GET INPUT DATA ****/ GET EDIT(BAR_CODE,NAME,PRICE,AMOUNT) (A(5),A(10),F(5),F(6)); /*** COMPUTE ****/ TOTAL = PRICE * AMOUNT; /*** OUTPUT ****/ PUT EDIT(BAR_CODE,NAME,TOTAL) (A(5),X(3),A(10),X(2),F(11)); END REI01;,編程基礎(chǔ)-規(guī)則(4),程序名 英文字母或者數(shù)字 以英文字母開頭 7文字以內(nèi) 與其它的程序不能同名 記述的位置,編程基礎(chǔ)-規(guī)則(5),語句的形式 變量,保留字,符號等之間用一個或以上的空格分隔 以分號結(jié)束一條語句 PL/I里可以使用的文字 數(shù)字 英文字母 特殊記號= + - * / ( ) ; : . ‘ & | _ % ? HEX(‘5F’) 空格 注釋用/* */,編程基礎(chǔ)-變量定義(1),變量的定義(DECLARE語句) DCL DECLARE的省略 變量名31個文字以內(nèi);英文字母,數(shù)字或者下劃線組成;以字母開頭 屬性變量的類型及長度 如果幾個變量具有相同的屬性,可以用類似下面的方式定義: DCL (A,B,C,D) CHAR(5);,編程基礎(chǔ)-變量定義(2),屬性: CHARACTER (文字) CHAR(n): n列的文字 (3)’TOM’ 等于’TOMTOMTOM’ FIXED DECIMAL (固定10進(jìn)制數(shù)) FIXED DEC(p,q),總長度為p的數(shù)字, q位小數(shù) 數(shù)值 精度 最小值 最大值 3.1416 (5,4) → FIXED DEC (5,4) → -9.9999 9.9999 425 (3,0) → FIXED DEC (3,0) → -999 999 5908.3 (5,1) → FIXED DEC (5,1) → -9999.9 9999.9 007 (3,0) → FIXED DEC (3,0) → -999 999 -3510 (4,0) → FIXED DEC (4,0) → -9999 9999 .0048 (4,4) → FIXED DEC (4,4) → -0.9999 0.9999 255. 最大精度FIXED DEC(15),編程基礎(chǔ)-變量定義(3),屬性: FIXED BINARY (固定2進(jìn)制數(shù)) FIXED BIN(p,q),總長度為2p的數(shù)字, 2q位小數(shù) 數(shù)值 精度 最小值 最大值 10110B (5,0) → FIXED BIN (5) → -32 31 11111B (5,0) → FIXED BIN (5) → -32 31 -101B (3,0) → FIXED BIN (3) → -8 8 1011.111B (7,3) → FIXED BIN (7,3) → -16 15 最大精度FIXED BIN(31) - 2 p 2 p-1 其它數(shù)據(jù)類型 BIT bit data GRAPHIC 雙字節(jié) FLOAT DECIMAL 浮點10進(jìn)制數(shù) FLOAT BINARY 浮點2進(jìn)制數(shù),編程基礎(chǔ)-變量定義(4),屬性: PICTURE for Character Picture Characters 說明 X 任意一個字符(二進(jìn)制0-256). A 任意一個字母, #, @, $, blank. 9 任意一個數(shù)字或blank.,編程基礎(chǔ)-變量定義(5),屬性: PICTURE for Numeric Character Data Picture Characters 說明 備注 9 V 數(shù)字和小數(shù)點字符 V并不指明小數(shù)點符號 Z * 去前導(dǎo)零字符用空或’*’代替 Z和*不可同時出現(xiàn) , . / B 嵌入字符 S + - $ 符號和貨幣字符 S:=0時為+,否則為- + - :=0時為+或-,否則 為空 CR DR T I R Y 貸(0), 借, 重定義和零置換字符 Y:無論前導(dǎo)零或非零,用 空替換。 T I R:附加穿孔記號用。 K E 指數(shù) F 比例因數(shù),編程基礎(chǔ)-變量定義(6),屬性: PICTURE(編輯用文字) PIC’ZZZ9’ 要編輯的數(shù) PIC 指定 結(jié)果 01111 99999 01111 01111 ZZZZZ 1111 01111 ZZ,ZZ9 1,111 00222 999B99 002_22 00222 ZZBBZZ 2_ _22 0 ZZZ9 0 0 ZZZZ 01111 $$,$$9 $1,111,編程基礎(chǔ)-變量定義(7),結(jié)構(gòu)定義: DCL 1 結(jié)構(gòu)名 層次 變量名1 屬性, 層次 變量名2 屬性, …. … …. , 層次 變量名n 屬性; 層次: 2-255之間的整數(shù)(最大15層) (例) DCL 1 A1, 3 A11 CHAR(3), 3 A12 FIXED DEC(9), 3 A13 CHAR(4); 定義時不要多重定義和不唯一定義.,編程基礎(chǔ)-變量定義(8),指針定義: DCL 變量名PTR; PTR是POINTER的省略 DCL P PTR; DCL A CHAR(10) INIT(‘ABCDEFGHIJ’); DCL 1 B BASED(P), 3 B1 CHAR(7), 3 B2 CHAR(3); DCL ADDR BUILTIN; P = ADDR(A);,編程基礎(chǔ)-文件定義(1),文件的定義: DCL 文件名FILE [ STREAM|RECORD ] [ INPUT|OUTPUT|UPDATE ] [ PRINT ]; 1) DCL DECLARE的省略 2) 文件名以字母開頭,7位以下的字母與數(shù)字組合 3) FILE 表示定義的是文件 4) 數(shù)據(jù)傳送類型默認(rèn)為STREAM(具體見下頁) 5) 輸入輸出類型指定文件的輸入輸出種類 6) 印刷屬性印刷輸出時指定 (例) DCL FTOUR FILE RECORD ; DCL FOUT FILE STREAM PRINT OUTPUT; (注1) SYSIN 和SYSPRINT等的定義可以省略 (注2)上記4,5,6的選項可以在文件打開時指定,編程基礎(chǔ)-文件定義(2),文件的定義: 數(shù)據(jù)傳送的種類 RECORD方式 文件是由記錄(RECORD)組成的; 用READ,WRITE命令進(jìn)行處理 STREAM方式 文件是連續(xù)的數(shù)據(jù)組成; 用GET,PUT命令進(jìn)行處理 變量的默認(rèn)值 PL/I里如果沒有對變量進(jìn)行定義,則有以下的規(guī)則: 字母I~N開頭的變量默認(rèn)為FIXED BIN(15) I~N以外字母開頭的變量默認(rèn)為FLOAT DEC(6),編程基礎(chǔ)-運(yùn)算符,算術(shù)運(yùn)算符(‘+’,’-’,’*’,’/’,’**’) 邏輯運(yùn)算符(‘&’,’|’,’?’) 比較符(‘’,’=‘) 連接運(yùn)算符(‘||’) 如果兩個運(yùn)算對象都是位串型,不需轉(zhuǎn)換,結(jié)果是位串型.在所有其他情形, 在完成連接運(yùn)算之前運(yùn)算對象要轉(zhuǎn)換為字符串型,結(jié)果是字符串型.若 運(yùn)算對象中有一個是變長或調(diào)用了SUBSTR函數(shù),則結(jié)果是變長字符串, 否則是定長的.,編程基礎(chǔ)-基本命令(1),a) OPEN b) CLOSE c) PUT d) GET e) DO (1)DO GROUP (2)DO WHILE f) END g) 賦值語句 h) ON STATEMENT i) READ j) WRITE k) IF l) SELECT,編程基礎(chǔ)-基本命令(2),OPEN FILE(文件名) [ STREAM|RECORD ][SEQUENTIAL|DIRECT][ INPUT|OUTPUT|UPDATE ] [ PRINT LINESIZE(nn) PAGESIZE(nn)]; i. FILE(文件名) 文件名:程序中使用的必須與JCL中的DD名一致 ii. 數(shù)據(jù)傳送類型默認(rèn)為STREAM iii. RECORD方式傳送數(shù)據(jù)時使用的讀取屬性,默認(rèn)為SEQUENTIAL iv. 輸入輸出類型 v. 印刷屬性 STREAM,OUTPUT時有效 LINESIZE: 一行的長度,默認(rèn)為120 PAGESIZE: 一頁的行數(shù),默認(rèn)為60 (例) OPEN FILE(FOUTPUT) RECORD OUTPUT; OPEN FILE(SYSPRINT) OUTPUT PRINT LINESIZE(132) PAGESIZE(55);,編程基礎(chǔ)-基本命令(3),CLOSE FILE(文件名); FILE(文件名) 文件名:與OPEN的文件名一致 (例) CLOSE FILE(FOUTPUT); CLOSE FILE(SYSPRINT);,編程基礎(chǔ)-基本命令(4),PUT FILE(文件名) [SKIP] EDIT(變量1,變量2….)(格式1,格式2….); PUT FILE(文件名) [SKIP] EDIT(常量1,常量2….)(格式1,格式2….); PUT FILE(文件名) [SKIP] EDIT(變量1,常量2….)(格式1,格式2….); PUT EDIT: 編輯輸出 SKIP: 換行輸出 格式: A(n) n位的文字輸出—可省略 F(n) n位的數(shù)字輸出 X(n) n位空格輸出 P’…’ 數(shù)字的編輯輸出 (例) DCL A1 FIXED DEC(3) INIT( 123 ), A2 FIXED DEC(5) INIT( 45678 ); PUT FILE( FOUT ) EDIT ( A1, ‘ABC’, A2 ) (F(3),X(3),A(5),P’ZZZ,ZZ9’); - 123 _ _ _ABC_ _ _45,678,編程基礎(chǔ)-基本命令(5),GET FILE(文件名) [SKIP] EDIT(變量1,變量2….)(格式1,格式2….); GET EDIT: 編輯輸入 SKIP: 換行輸入 格式: A(n) n位的文字輸出—可省略 F(n) n位的數(shù)字輸出 X(n) n位空格輸出 (例) DCL H1 FIXED DEC(5) , H2 CHAR(5), H3 FIXED DEC(7); GET FILE( FIN ) EDIT ( H1, H2, H3 ) (F(3),X(3),A(3),F(5)); 輸入123 _ _ _ABC45,678 H1=123,H2=‘ABC’,H3=45678,編程基礎(chǔ)-基本命令(6),(1) DO GROUP (DO與END之間的語句作為一個STEP執(zhí)行) (例)IF A 20 THEN DO; B = X * 1.25; C = Y * 1.10; END; ELSE DO; B = X * 0.90; C = Y * 0.75; END; (2) DO WHILE (循環(huán)處理) DO WHILE(條件); 循環(huán)處理; END; (3) DO 變量= 初期值TO 終了值[BY 增減值],編程基礎(chǔ)-基本命令(7),BLOCK或者GROUP的終止標(biāo)志 END [LABEL] (例) LBLX: DO WHILE ( EOF = 0 ); OUT_AREA.XX = IN_AREA.AA; PUT EDIT ( OUT_AREA.XX) ( A(80)); GET EDIT ( IN_AREA.AA) ( A(80)); END LBLX;,編程基礎(chǔ)-基本命令(8),(1) 變量名1 = 變量名2 | 常量 (例) X = Y; EOF = 0; (2) 變量名n = [變量名1 | 常量1 ] 操作符 [變量名2 | 常量2 ] ……; 操作符: + - * / ** (例) X = Y * ( Z + 10); TOTAL = TOTAL * 0.95; SUM = SUM + TOTAL; (3)變量名1 = 變量名2 , BY NAME; (例) DCL 1 AA, 3 YY CHAR(2) INIT(’04’), 3 MM CHAR(2) INIT(’02’), 3 DD CHAR(2) INIT(’11’); DCL 1 BB, 3 YY CHAR(2) , 3 F CHAR(1) INIT(‘/’), 3 MM CHAR(2) , 3 G CHAR(1) INIT(‘/’), 3 DD CHAR(2) ; BB = AA, BY NAME;,編程基礎(chǔ)-基本命令(9),ON 條件處理邏輯; 條件: ERROR ENDFILE ENDPAGE CONVERSION(CONV) ZERODIVIDE(ZDIV) FIXEDOVERFLOW(FOFL) (例) ON ENDFILE(FIN) EOF = 1 ; ON ENDPAGE (SYSPRINT) DO; PUT PAGE EDIT ( OUT_AREA.XX) ( A(80)); PUT SKIP EDIT ( OUT_AREA.YY) ( A(80)); END ;,編程基礎(chǔ)-基本命令(10),READ READ FILE(文件名) INTO (變量名); (例) READ FILE(FINPUT) INTO (IN_AREA) ; WRITE WRITE FILE(文件名) FROM (變量名); (例) WRITE FILE(FOUTPUT) FROM (OUT_AREA) ;,編程基礎(chǔ)-基本命令(11),IF 條件 THEN 滿足條件的處理; ELSE 不滿足條件的處理; 比較種類: 1. 代數(shù)比較: 比較以代數(shù)形勢的帶符號數(shù)字.要進(jìn)行數(shù)字域轉(zhuǎn)換. 2. 字符比較: 根據(jù)對照序列從左到右一對一字符進(jìn)行比較,若運(yùn)算對象長度不同則將短的右邊補(bǔ) 空格. 3. 位比較: 從左到右對二進(jìn)制數(shù)字進(jìn)行比較,不足補(bǔ)零. 注意: 若比較的對象類型不同,低類的對象將被轉(zhuǎn)為高類的對象. 類型的優(yōu)先數(shù)是(1)算術(shù)行(最高)、(2)字符串型、(3)位串,編程基礎(chǔ)-基本命令(12),SELECT多重分支 SELECT (變量名); WHEN (條件1的值) 處理1; WHEN (條件2的值) 處理2; WHEN (條件3的值) 處理3; WHEN (條件4的值) 處理4; …… WHEN (條件n值) 處理n; OTHERWISE 處理n+1; END;,運(yùn)行和調(diào)試,JCL/PRC/PRM PDSRXCB.COMMON.JCL(PLIC) PDSRXCB.COMMON.JCL(PLICL) PDSRXCB.COMMON.PRC(IEL1C) PDSRXCB.COMMON.PRC(IEL1CL),運(yùn)行和調(diào)試,編譯錯誤LEVEL,運(yùn)行和調(diào)試,編譯返回代碼,運(yùn)行和調(diào)試,編譯時的CHECK LIST 編譯的選項是否正確,是否有足夠的編譯信息 程序是否寫在2—72列之間 變量是否有重名 所有的保留字是否正確 有沒有忘記分號 引號是否匹配 括號是否匹配 注釋是否用了正確的范圍 END的使用是否正確 對輸入輸出文件的READ/WRITE 是否正確 使用RECORD方式存取數(shù)據(jù)時,RECORD長度是否與物理長度一致 計算時使用的變量是否都是數(shù)字 變量等是否正確的初始化 沒有明確定義的變量的屬性是否滿足處理的需要,運(yùn)行和調(diào)試,PUT [SKIP] LIST(變量1,變量2….); PUT [SKIP] EDIT(變量1,變量2….)(格式1,格式2….); 以上是2種常用的output語句,主要運(yùn)用于輸出運(yùn)行中的變量內(nèi)容用于調(diào)試程序 DCL A FIXED BIN(15); DCL B FIXED BIN(15); DCL C FIXED BIN(31); A = 1; DO WHILE(A 11); B = A + 1; C = A*B; PUT SKIP LIST(A || '*' || B || '=' || C); PUT SKIP EDIT(A,’*’,B,’=‘,C)(F(4),A(1),F(4),A(1),P’Z,ZZZ’); A= A +!: END;,過程與函數(shù), [ DCL 過程名ENTRY ; ] 過程名: PROC [ ( 參數(shù)1, 參數(shù)2, ……) ]; ………… ………… END 過程名;,過程與函數(shù)(內(nèi)聯(lián)),PROG1A : PROC OPTIONS(MAIN); DCL ROUND BUILITIN, NAMAE CHAR(10), KOKUGO FIXED DEC( 3), SANSUH FIXED DEC( 3), SHAKAI FIXED DEC( 3), RIKA FIXED DEC( 3), EIGO FIXED DEC( 3), GOHKEI FIXED DEC( 3), HEIKIN FIXED DEC( 5,1), EOF FIXED DEC( 1) INIT(0); ON ENDFILE( SYSIN ) EOF = 1; GET SKIP EDIT ( NAMAE, KOKUGO, SANSUH, SHAKAI, RIKA, EIGO ) ( A(10), 5 F(5) ); DO WHILE ( EOF = 0 ); CALL KEISAN; PUT SKIP EDIT( NAMAE, GOHKEI, HEIKIN) ( A(10), X(2), F(3), F(5,1) ); GET SKIP EDIT ( NAMAE, KOKUGO, SANSUH, SHAKAI, RIKA, EIGO ) ( A(10), 5 F(5) ); END; KEISAN : PROC ; GOHKEI = KOKUGO + SANSUH + SHAKAI + RIKA + EIGO; HEIKIN = ROUND( GOHKEI/5, 1 ); END KEISAN; END PROG1A ;,過程與函數(shù)(外部),PROG2A : PROC OPTIONS(MAIN); DCL DEGCONV ENTRY, CONVKEY CHAR( 4), IN_DEG FIXED DEC( 5), OUT_DEG FIXED DEC( 5), EOF FIXED DEC( 1) INIT(0); ON ENDFILE( SYSIN ) EOF = 1; GET SKIP EDIT ( CONVKEY, IN_DEG ) ( A( 4), F(5) ); DO WHILE ( EOF = 0 ); CALL DEGCONV( CONVKEY, IN_DEG, OUT_DEG); PUT LIST( CONVKEY, IN_DEG, ‘??’, OUT_DEG); GET SKIP EDIT ( CONVKEY, IN_DEG ) ( A( 4), F(5) ); END; END PROG2A ; ***************************************************************************************** DEGCONV : PROC(P1,P2,P3) ; DCL P1 CHAR(4), (P2, P3) FIXED DEC( 5); IF P1 = ‘FTOC’ THEN P3 = ( 5 * ( P2 – 32 ) )/ 9; ELSE P3 = 9 * (P2 / 5) + 32; END DEGCONV;,過程與函數(shù), [ DCL 函數(shù)名ENTRY RETURNS (返回值屬性); ] 函數(shù)名: PROC [ ( 參數(shù)1, 參數(shù)2, ……) ] RETURNS (返回值屬性); ………… ………… RETURN (值); END 函數(shù)名;,過程與函數(shù),PROG1B : PROC OPTIONS(MAIN); DCL TEIHEN FIXED DEC( 5), TAKASA FIXED DEC( 5), MENSEKI FIXED DEC( 9); GET LIST ( TEIHEN, TAKASA ); MENSEKI = TRIAREA( TEIHEN, TAKASA ); PUT LIST ( MENSEKI ); TRIAREA : PROC(P1, P2) RETURNS( FIXED DEC(9)); DCL (P1, P2) FIXED DEC( 5); RETURN ( (P1 * P2) / 2); END TRIAREA; END PROG1B ;,過程與函數(shù),PROG2B : PROC OPTIONS(MAIN); DCL ONSOKU ENTRY(FIXED DEC(3) ) EXTERNAL RETURNS FIXED DEC( 5,1)), DEGREEC FIXED DEC( 3); GET LIST ( DEGREEC ); PUT LIST ( DEGREEC, ONSOKU( DEGREEC ) ); END PROG2B ; ************************************************************** ONSOKU : PROC(P1) RETURNS( FIXED DEC(5,1)); DCL P1 FIXED DEC( 3); RETURN ( 331.5 + 0.6 * P1); END ONSOKU;,過程與函數(shù)-系統(tǒng)函數(shù),系統(tǒng)函數(shù)的屬性定義為BUILTIN,使用方法和自定義函數(shù)一樣. SUBSTR ( X, Y, [ Z ]) DATE --返回yymmdd格式的6位字符串.yy為年的后兩位,mm為月,dd為日 LENGTH ( X )返回X的長度. SUM ( X ) MAX ( X1, X2,……Xn ) - MIN MOD ( X, Y ),TIP,一個PROC盡可能控制在一頁之內(nèi), PROC字符數(shù)的最大限制為64K。 使用縮進(jìn)格式 屬性定義格式的對齊 INITIAL部分如果長的話另起一行書寫 語句的范圍使用END來明確 文件名,數(shù)據(jù)名,LABEL,過程名等使用表示內(nèi)容的名字,PLI練習(xí),要求: 調(diào)用外部函數(shù) 外部函數(shù)內(nèi)容如下: 順序讀取文件中的所有內(nèi)容 輸出文件 報表輸出總行數(shù),- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
8 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- IBM mainframe PLI 培訓(xùn)教程 培訓(xùn) 教程
鏈接地址:http://ioszen.com/p-667819.html