PL/I和COBOL如何取得当天的日期
在Mainframe上做开发会经常遇到用PL/I或者COBOL取得当天的日期,对于PL/I,一般的公司都采取如下的做法:
DCL PIC_TODAY PIC'999999' INIT(0);
PIC_TODAY = DATE;
IF SUBSTR(DATE,1,2) > '50'
THEN TODAYS_DATE = 19000000 + PIC_TODAY;
ELSE TODAYS_DATE = 20000000 + PIC_TODAY;
我所在的公司也是这种写法来获得YYYYMMDD
格式的当日日期,很明显这种写法代码的寿命只有几十年了,相比之下COBOL获得YYYYMMDD
格式的当日日期就显得方便得多,一个ACCEPT
语句即可:
WORKING-STORAGE SECTION.
01 TODAYS-DATE PIC 9(08).
.
.
.
PROCEDURE DIVISION.
ACCEPT TODAYS ...
PLI 动态数组的例子
新写了一个PL/I
程序,需要在程序里面用到动态数组来提高效率,所以总结了一下PL/I
中动态数组(Dynamic Array)的用法:
1.申明一个Controlled的数组叫做WT_TMPARRAY_INFO
,此时并不知道该数组的长度:
DCL INPUTFIL FILE RECORD INPUT;
DCL TMPARRAY_CTR FIXED BIN(31) INIT(0);
DCL TMPARRAY_SUB FIXED BIN(31) INIT(1);
DCL 01 TMPARRAY_RECORD,
05 INPUT_CUR CHAR(03) INIT(' '),
05 INPUT_ACCT CHAR(05) INIT(' ');
/*******定义未知长度的动态数组WT_TMPARRAY_INFO*************************/
DCL ...
PLI打印出PIC类型输出
使用PLI打印输出信息,最常见的是:
PUT SKIP(1) EDIT ('CODE = ',ERR_CODE)(A,A);
这里是打印PIC类型的输出,不怎么常用。今天用到了,所以记在这:
PUT EDIT('ACCOUNT PROCESSED : ',ACCOUNT_CTR)
(SKIP(1),COL(1),A,P'999999999');
PUT SKIP FILE(OUTFILE) EDIT('CHENGDU: ',SOURCE)
(A,P'ZZ,ZZZV.ZZ');