IBM mainframe PLI 培訓(xùn)教程
《IBM mainframe PLI 培訓(xùn)教程》由會(huì)員分享,可在線閱讀,更多相關(guān)《IBM mainframe PLI 培訓(xùn)教程(45頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
PL/1 For Entry Level Training,By Raymond,內(nèi)容,簡(jiǎn)介 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é)計(jì)算,事務(wù)處理等等各方面 容易理解性,使用日常生活相近的語(yǔ)言(英語(yǔ)) (例) IF GRADE = 60 THEN RESULT = “PASS”; ELSE RESULT = “FAIL”; 書寫簡(jiǎn)單性 形式自由– 記述的位置沒有限定,編程基礎(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),語(yǔ)句的形式 變量,保留字,符號(hào)等之間用一個(gè)或以上的空格分隔 以分號(hào)結(jié)束一條語(yǔ)句 PL/I里可以使用的文字 數(shù)字 英文字母 特殊記號(hào)= + - * / ( ) ; : . ‘ & | _ % ? HEX(‘5F’) 空格 注釋用/* */,編程基礎(chǔ)-變量定義(1),變量的定義(DECLARE語(yǔ)句) DCL DECLARE的省略 變量名31個(gè)文字以內(nèi);英文字母,數(shù)字或者下劃線組成;以字母開頭 屬性變量的類型及長(zhǎng)度 如果幾個(gè)變量具有相同的屬性,可以用類似下面的方式定義: 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),總長(zhǎng)度為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),總長(zhǎng)度為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 浮點(diǎn)10進(jìn)制數(shù) FLOAT BINARY 浮點(diǎn)2進(jìn)制數(shù),編程基礎(chǔ)-變量定義(4),屬性: PICTURE for Character Picture Characters 說明 X 任意一個(gè)字符(二進(jìn)制0-256). A 任意一個(gè)字母, #, @, $, blank. 9 任意一個(gè)數(shù)字或blank.,編程基礎(chǔ)-變量定義(5),屬性: PICTURE for Numeric Character Data Picture Characters 說明 備注 9 V 數(shù)字和小數(shù)點(diǎn)字符 V并不指明小數(shù)點(diǎn)符號(hào) Z * 去前導(dǎo)零字符用空或’*’代替 Z和*不可同時(shí)出現(xiàn) , . / B 嵌入字符 S + - $ 符號(hào)和貨幣字符 S:=0時(shí)為+,否則為- + - :=0時(shí)為+或-,否則 為空 CR DR T I R Y 貸(0), 借, 重定義和零置換字符 Y:無(wú)論前導(dǎo)零或非零,用 空替換。 T I R:附加穿孔記號(hào)用。 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); 定義時(shí)不要多重定義和不唯一定義.,編程基礎(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(具體見下頁(yè)) 5) 輸入輸出類型指定文件的輸入輸出種類 6) 印刷屬性印刷輸出時(shí)指定 (例) DCL FTOUR FILE RECORD ; DCL FOUT FILE STREAM PRINT OUTPUT; (注1) SYSIN 和SYSPRINT等的定義可以省略 (注2)上記4,5,6的選項(xiàng)可以在文件打開時(shí)指定,編程基礎(chǔ)-文件定義(2),文件的定義: 數(shù)據(jù)傳送的種類 RECORD方式 文件是由記錄(RECORD)組成的; 用READ,WRITE命令進(jìn)行處理 STREAM方式 文件是連續(xù)的數(shù)據(jù)組成; 用GET,PUT命令進(jìn)行處理 變量的默認(rèn)值 PL/I里如果沒有對(duì)變量進(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)算符(‘||’) 如果兩個(gè)運(yùn)算對(duì)象都是位串型,不需轉(zhuǎn)換,結(jié)果是位串型.在所有其他情形, 在完成連接運(yùn)算之前運(yùn)算對(duì)象要轉(zhuǎn)換為字符串型,結(jié)果是字符串型.若 運(yùn)算對(duì)象中有一個(gè)是變長(zhǎng)或調(diào)用了SUBSTR函數(shù),則結(jié)果是變長(zhǎng)字符串, 否則是定長(zhǎng)的.,編程基礎(chǔ)-基本命令(1),a) OPEN b) CLOSE c) PUT d) GET e) DO (1)DO GROUP (2)DO WHILE f) END g) 賦值語(yǔ)句 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ù)時(shí)使用的讀取屬性,默認(rèn)為SEQUENTIAL iv. 輸入輸出類型 v. 印刷屬性 STREAM,OUTPUT時(shí)有效 LINESIZE: 一行的長(zhǎng)度,默認(rèn)為120 PAGESIZE: 一頁(yè)的行數(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之間的語(yǔ)句作為一個(gè)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ì)的帶符號(hào)數(shù)字.要進(jìn)行數(shù)字域轉(zhuǎn)換. 2. 字符比較: 根據(jù)對(duì)照序列從左到右一對(duì)一字符進(jìn)行比較,若運(yùn)算對(duì)象長(zhǎng)度不同則將短的右邊補(bǔ) 空格. 3. 位比較: 從左到右對(duì)二進(jìn)制數(shù)字進(jìn)行比較,不足補(bǔ)零. 注意: 若比較的對(duì)象類型不同,低類的對(duì)象將被轉(zhuǎn)為高類的對(duì)象. 類型的優(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)試,編譯錯(cuò)誤LEVEL,運(yùn)行和調(diào)試,編譯返回代碼,運(yùn)行和調(diào)試,編譯時(shí)的CHECK LIST 編譯的選項(xiàng)是否正確,是否有足夠的編譯信息 程序是否寫在2—72列之間 變量是否有重名 所有的保留字是否正確 有沒有忘記分號(hào) 引號(hào)是否匹配 括號(hào)是否匹配 注釋是否用了正確的范圍 END的使用是否正確 對(duì)輸入輸出文件的READ/WRITE 是否正確 使用RECORD方式存取數(shù)據(jù)時(shí),RECORD長(zhǎng)度是否與物理長(zhǎng)度一致 計(jì)算時(shí)使用的變量是否都是數(shù)字 變量等是否正確的初始化 沒有明確定義的變量的屬性是否滿足處理的需要,運(yùn)行和調(diào)試,PUT [SKIP] LIST(變量1,變量2….); PUT [SKIP] EDIT(變量1,變量2….)(格式1,格式2….); 以上是2種常用的output語(yǔ)句,主要運(yùn)用于輸出運(yùn)行中的變量?jī)?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的長(zhǎng)度. SUM ( X ) MAX ( X1, X2,……Xn ) - MIN MOD ( X, Y ),TIP,一個(gè)PROC盡可能控制在一頁(yè)之內(nèi), PROC字符數(shù)的最大限制為64K。 使用縮進(jìn)格式 屬性定義格式的對(duì)齊 INITIAL部分如果長(zhǎng)的話另起一行書寫 語(yǔ)句的范圍使用END來(lái)明確 文件名,數(shù)據(jù)名,LABEL,過程名等使用表示內(nèi)容的名字,PLI練習(xí),要求: 調(diào)用外部函數(shù) 外部函數(shù)內(nèi)容如下: 順序讀取文件中的所有內(nèi)容 輸出文件 報(bào)表輸出總行數(shù),- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
8 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- IBM mainframe PLI 培訓(xùn)教程 培訓(xùn) 教程
鏈接地址:http://m.appdesigncorp.com/p-667819.html