《IBM mainframe PLI 培训教程》由会员分享,可在线阅读,更多相关《IBM mainframe PLI 培训教程(45页珍藏版)》请在金锄头文库上搜索。
1、PL/1 For Entry Level TrainingBy Raymond内容简介PLI练习IMS练习和复习概论PLI VS COBOLIMS DC VS CICSIMS DB编程基础-规则(1)PL/I(Programming Language No.1)的特征通用性适用于科学计算,事务处理等等各方面容易理解性,使用日常生活相近的语言(英语)(例) IF GRADE = 60THEN RESULT = “PASS”;ELSE RESULT = “FAIL”;书写简单性形式自由 记述的位置没有限定编程基础-规则(2)程序构成1. 2. 3. 4. Program Name: PROC OP
2、TIONS (MAIN);文件及变量定义程序逻辑处理END Program Name;编程基础-规则(3)程序的构成(例)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;/
3、* OUTPUT */PUT EDIT(BAR_CODE,NAME,TOTAL)(A(5),X(3),A(10),X(2),F(11);END REI01;编程基础-规则(4)程序名 英文字母或者数字 以英文字母开头 7文字以内 与其它的程序不能同名记述的位置编程基础-规则(5)语句的形式变量,保留字,符号等之间用一个或以上的空格分隔以分号结束一条语句PL/I里可以使用的文字里可以使用的文字数字英文字母特殊记号= + - * / ( ) ; : . & | =0时为+,否则为-+ - :=0时为+或-,否则为空CR DR T I R Y贷(0), 借, 重定义和零置换字符Y:无论前导零或非零,
4、用 空替换。T I R:附加穿孔记号用。K E指数F比例因数编程基础-变量定义(6)属性:属性:PICTURE(编辑用文字) PICZZZ9要编辑的数要编辑的数PIC 指定指定结果结果0111199999 0111101111ZZZZZ111101111ZZ,ZZ91,11100222999B99002_2200222ZZBBZZ2_ _220ZZZ900ZZZZ01111$,$9$1,111编程基础-变量定义(7)结构定义:结构定义:DCL 1 结构名层次变量名1 属性,层次变量名2 属性,. . . ,层次变量名n 属性;层次: 2-255之间的整数之间的整数(最大最大15层层)(例)DC
5、L 1 A1,3 A11 CHAR(3),3 A12 FIXED DEC(9),3 A13 CHAR(4);定义时不要多重定义和不唯一定义.编程基础-变量定义(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);编程基础-文件定义(1)文件的定义:DCL 文件名FILE STREAM|RECORD INPUT|OUTPUT|UPDATE PR
6、INT ;1) DCL DECLARE的省略2) 文件名以字母开头,7位以下的字母与数字组合3) FILE 表示定义的是文件4) 数据传送类型默认为STREAM(具体见下页)5) 输入输出类型指定文件的输入输出种类6) 印刷属性印刷输出时指定(例) DCL FTOUR FILE RECORD ;DCL FOUT FILE STREAM PRINT OUTPUT;(注注1) SYSIN 和和SYSPRINT等的定义可以省略等的定义可以省略(注注2)上记上记4,5,6的选项可以在文件打开时指定的选项可以在文件打开时指定编程基础-文件定义(2)文件的定义:数据传送的种类RECORD方式文件是由记录(
7、RECORD)组成的;用READ,WRITE命令进行处理STREAM方式文件是连续的数据组成;用GET,PUT命令进行处理变量的默认值PL/I里如果没有对变量进行定义,则有以下的规则:字母IN开头的变量默认为FIXED BIN(15)IN以外字母开头的变量默认为FLOAT DEC(6)编程基础-运算符算术运算符(+,-,*,/,*)逻辑运算符(&,|,)比较符(,=)连接运算符(|)如果两个运算对象都是位串型,不需转换,结果是位串型.在所有其他情形,在完成连接运算之前运算对象要转换为字符串型,结果是字符串型.若运算对象中有一个是变长或调用了SUBSTR函数,则结果是变长字符串,否则是定长的.编
8、程基础-基本命令(1)a) OPENb) CLOSEc) PUTd) GETe) DO(1)DO GROUP(2)DO WHILEf) ENDg) 赋值语句h) ON STATEMENTi) READj) WRITEk) IFl) SELECT编程基础-基本命令(2)OPEN FILE(文件名) STREAM|RECORD SEQUENTIAL|DIRECT INPUT|OUTPUT|UPDATE PRINT LINESIZE(nn) PAGESIZE(nn);i. FILE(文件名) 文件名:程序中使用的必须与JCL中的DD名一致ii. 数据传送类型默认为STREAMiii. RECORD方
9、式传送数据时使用的读取属性,默认为SEQUENTIALiv. 输入输出类型v. 印刷属性STREAM,OUTPUT时有效LINESIZE: 一行的长度,默认为120PAGESIZE: 一页的行数,默认为60(例)OPEN FILE(FOUTPUT) RECORD OUTPUT;OPEN FILE(SYSPRINT) OUTPUT PRINT LINESIZE(132) PAGESIZE(55);编程基础-基本命令(3)CLOSE FILE(文件名);FILE(文件名) 文件名:与OPEN的文件名一致(例)CLOSE FILE(FOUTPUT);CLOSE FILE(SYSPRINT);编程基础
10、-基本命令(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位的数字输出X(n) n位空格输出P 数字的编辑输出(例)DCL A1 FIXED DEC(3) INIT( 123 ),A2 FIXED DEC(5) INIT( 45678 );PUT FILE( FOUT ) EDI
11、T ( A1, ABC, A2 ) (F(3),X(3),A(5),PZZZ,ZZ9);- 123 _ _ _ABC_ _ _45,678编程基础-基本命令(5)GET FILE(文件名) SKIP EDIT(变量1,变量2.)(格式1,格式2.);GET EDIT: 编辑输入SKIP: 换行输入格式: A(n) n位的文字输出可省略F(n) n位的数字输出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);输
12、入123 _ _ _ABC45,678H1=123,H2=ABC,H3=45678编程基础-基本命令(6)(1) DO GROUP(DO与END之间的语句作为一个STEP执行)(例)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 (循环处理)DO WHILE(条件);循环处理;END;(3) DO 变量= 初期值TO 终了值BY 增减值编程基础-基本命令(7)BLOCK或者或者GROUP的终止标志的终止标志END LABEL(例)LBLX: D
13、O 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;编程基础-基本命令(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
14、 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;编程基础-基本命令(9)ON 条件处理逻辑;条件:ERRORENDFILEENDPAGECONVERSION(CONV)ZERODIVIDE(ZDIV)FIXEDOVERFLOW(FOFL)(例)ON ENDFIL
15、E(FIN) EOF = 1 ;ON ENDPAGE (SYSPRINT)DO;PUT PAGE EDIT ( OUT_AREA.XX) ( A(80);PUT SKIP EDIT ( OUT_AREA.YY) ( A(80);END ;编程基础-基本命令(10)READREAD FILE(文件名文件名) INTO (变量名变量名);(例)READ FILE(FINPUT) INTO (IN_AREA) ;WRITEWRITE FILE(文件名文件名) FROM (变量名变量名);(例)WRITE FILE(FOUTPUT) FROM (OUT_AREA) ;编程基础-基本命令(11)IF 条
16、件条件THEN 满足条件的处理满足条件的处理;ELSE 不满足条件的处理不满足条件的处理;比较种类:1. 代数比较:比较以代数形势的带符号数字.要进行数字域转换.2. 字符比较:根据对照序列从左到右一对一字符进行比较,若运算对象长度不同则将短的右边补空格.3. 位比较:从左到右对二进制数字进行比较,不足补零.注意: 若比较的对象类型不同,低类的对象将被转为高类的对象.类型的优先数是(1)算术行(最高)、(2)字符串型、(3)位串编程基础-基本命令(12)SELECT多重分支 SELECT (变量名);WHEN (条件1的值) 处理1;WHEN (条件2的值) 处理2;WHEN (条件3的值)
17、处理3;WHEN (条件4的值) 处理4;WHEN (条件n值) 处理n;OTHERWISE 处理n+1;END;运行和调试JCL/PRC/PRMPDSRXCB.COMMON.JCL(PLIC)PDSRXCB.COMMON.JCL(PLICL)PDSRXCB.COMMON.PRC(IEL1C)PDSRXCB.COMMON.PRC(IEL1CL)运行和调试编译错误LEVEL运行和调试编译返回代码运行和调试编译时的CHECK LIST编译的选项是否正确,是否有足够的编译信息程序是否写在272列之间变量是否有重名所有的保留字是否正确有没有忘记分号引号是否匹配括号是否匹配注释是否用了正确的范围END的
18、使用是否正确对输入输出文件的READ/WRITE 是否正确使用RECORD方式存取数据时,RECORD长度是否与物理长度一致计算时使用的变量是否都是数字变量等是否正确的初始化没有明确定义的变量的属性是否满足处理的需要运行和调试PUT SKIP LIST(变量变量1,变量变量2.);PUT SKIP EDIT(变量变量1,变量变量2.)(格式格式1,格式格式2.);以上是2种常用的output语句,主要运用于输出运行中的变量内容用于调试程序DCL A FIXED BIN(15);DCL B FIXED BIN(15);DCL C FIXED BIN(31);A = 1;DO WHILE(A 11
19、); 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),PZ,ZZZ); A= A +!:END;过程与函数 DCL 过程名ENTRY ; - 内部过程时可省略CALL 过程名 ( 参数1, 参数2, ) ;过程名: PROC ( 参数1, 参数2, ) ;END 过程名;过程与函数(内联)PROG1A : PROC OPTIONS(MAIN);DCLROUND BUILITIN,NAMAE CHAR(10),KOKUGO FIXED DEC( 3
20、),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 SKI
21、P 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 ;过程与函数(外部)PROG2A : PROC OPTIONS(MAIN);DCL
22、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 ( CONV
23、KEY, 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 = FTOCTHEN P3 = ( 5 * ( P2 32 ) )/ 9;ELSE P3 = 9 * (P2 / 5) + 32;END DEGCONV;过程与函数 DCL 函数名ENTRY RETURNS (返回值属性); - 内部函数可省略变量= 函数名 ( 参数1, 参数2, ) ;函数名: PROC ( 参数1, 参数2, ) RETURNS (返回值属性
24、);RETURN (值);END 函数名;过程与函数PROG1B : PROC OPTIONS(MAIN);DCLTEIHEN 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
25、);END TRIAREA;END PROG1B ;过程与函数PROG2B : PROC OPTIONS(MAIN);DCLONSOKU ENTRY(FIXED DEC(3) ) EXTERNALRETURNS 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.
26、6 * P1);END ONSOKU;过程与函数-系统函数系统函数的属性定义为系统函数的属性定义为BUILTIN,使用方法和自定义函数一样使用方法和自定义函数一样.SUBSTR ( X, Y, Z )DATE -返回yymmdd格式的6位字符串.yy为年的后两位,mm为月,dd为日LENGTH ( X )返回X的长度.SUM ( X )MAX ( X1, X2,Xn ) - MINMOD ( X, Y )TIP一个PROC尽可能控制在一页之内, PROC字符数的最大限制为64K。使用缩进格式属性定义格式的对齐INITIAL部分如果长的话另起一行书写语句的范围使用END来明确文件名,数据名,LABEL,过程名等使用表示内容的名字PLI练习要求:调用外部函数外部函数内容如下:顺序读取文件中的所有内容输出文件报表输出总行数