我的目标是在输出的顶部显示三个标题。标题将是";标题"Genre";,以及";评级";。JCL文件输入来自数据集的数据、电影列表、电影类型(使用IF逻辑对其进行编号,然后翻译成单词(和评分(使用打包数据(。我不应该使用任何像SORT这样的程序;硬编码";。
我预计结果如下:预期结果的快照
实际结果如下:
实际结果的快照
作业提交成功,没有任何错误。但是,JCL文件不会产生所需的输出。
我知道JCL文件遵循数据集中每条记录的指令列表,并在每条记录的指示上循环,这就是为什么Title、Genre和Ratings标头重复的原因。我试过用";GOTO";并标记以更改循环从何处恢复,以便JCL文件仅在第一次执行时执行头参数。不幸的是,它似乎不起作用。
我在下面链接了我的JCL文件的截图。正如您所看到的,我将OHEAD变量重新定义为空白("(,这样可以防止标题与电影数据重叠。如果我能找到一种让JCL指令循环的方法;OHEAD";语句,那么我只需要定义OHEAD一次。从概念上讲,这就是我要做的。
我几天前开始在JCL上训练,所以我感谢你的耐心和你能提供的任何意见。
JCL文件截图1
JCL文件截图2
JCL文件截图3
JCL文件截图4
JCL文件截图5
我复制了下面的JCL文件文本。
000001 //DSINC01C JOB (0000,1178),'TRAINING',NOTIFY=DSINC01,
000002 // MSGCLASS=E
000003 //*
000004 //* DELETE STEP FOR EASIER RE-RUNS
000005 //*
000006 //S01 EXEC PGM=IDCAMS,REGION=40M
000007 //SYSPRINT DD SYSOUT=*
000008 //SYSIN DD *
000009 DELETE DSINC01.TRAINING.OUTPUT
000010 IF MAXCC=8 THEN SET MAXCC = 0
000011 /*
000012 //*
000013 //* EASYTRIEVE STEP
000014 //*
000015 //S02 EXEC PGM=EZTPA00,REGION=4M
000016 //SYSLIB DD DSN=ALCHAN.TEST.EMAC,DISP=SHR
000017 // DD DSN=SYS3.EASYPLUS.CAIMAC,DISP=SHR
000018 //FILEI DD DISP=SHR,DSN=DSINC01.TRAINING.MDATA
000019 //FILEO DD DSN=DSINC01.TRAINING.OUTPUT,
000020 // DISP=(,CATLG),
000021 // UNIT=PUBLIC,SPACE=(CYL,(500,250),RLSE),
000022 // DCB=(LRECL=80,RECFM=FB,BLKSIZE=0,DSORG=PS)
000023 //EZTVFM DD UNIT=WORK,SPACE=(CYL,(10,5))
000024 //SORTWK01 DD UNIT=WORK,SPACE=(CYL,(10,5))
000025 //SORTWK02 DD UNIT=WORK,SPACE=(CYL,(1,1))
000026 //SORTWK03 DD UNIT=WORK,SPACE=(CYL,(1,1))
000027 //SYSOUT DD SYSOUT=*
000028 //SYSPRINT DD SYSOUT=*
000029 //SYSLIZ DD SYSOUT=*
000030 //SYSLZ1 DD SYSOUT=*
000031 //SYUDUMP DD SYSOUT=*
000032 //*
000033 //SYSIN DD *
000034 FILE SYSLIZ PRINTER
000035 *
000036 * INPUT FILE LAYOUT
000037 *
000038 FILE FILEI
000039 IMNAME 1 40 A
000040 IMGENRE 41 1 N
000041 IMRATE 42 2 P
000042 * OUTPUT FILE LAYOUT
000043 *
000044 FILE FILEO
000045 OHEAD 1 80 A
000046 OMNAME 1 30 A
000047 OMGENRE 32 7 A
000048 OMRATE 40 3 N
000049 *--------------------------------------------------------------------
000050 * MAIN LINE
000051 *--------------------------------------------------------------------
000052 JOB INPUT FILEI NAME DATA
000053 OHEAD = 'TITLE GENRE RATING'
000054 PUT FILEO
000055 OHEAD = ' '
000056 OMNAME = IMNAME
000057 OMGENRE = ' '
000058 IF IMGENRE = 1
000059 OMGENRE = 'FANTASY'
000060 END-IF
000061 IF IMGENRE = 2
000062 OMGENRE = 'ACTION'
000063 END-IF
000064 IF IMGENRE = 3
000065 OMGENRE = 'COMEDY'
000066 END-IF
000067 IF IMGENRE = 4
000068 OMGENRE = 'HORROR'
000069 END-IF
000070 IF IMGENRE = 5
000071 OMGENRE = 'DRAMA'
000072 END-IF
000073 OMRATE = IMRATE
000074 PUT FILEO
000075 GO TO JOB
000076 /*
只复制Easytrive代码,添加标签,然后更改GO TO。
编辑:我再次修改了Easytrieve。我不知道这是否可行,因为我没有大型机可以测试。
获取在线Easytrive手册并学习语言。
000034 FILE SYSLIZ PRINTER
000035 *
000036 * INPUT FILE LAYOUT
000037 *
000038 FILE FILEI
000039 IMNAME 1 40 A
000040 IMGENRE 41 1 N
000041 IMRATE 42 2 P
000042 * OUTPUT FILE LAYOUT
000043 *
000044 FILE FILEO
000045 OHEAD 1 80 A
000046 OMNAME 1 30 A
000047 OMGENRE 32 7 A
000048 OMRATE 40 3 N
000049 *--------------------------------------------------------------------
000050 * MAIN LINE
000051 *--------------------------------------------------------------------
000052 JOB INPUT FILEI NAME DATA
000053 OHEAD = 'TITLE GENRE RATING'
000054 PUT FILEO
GET FILEI
DO WHILE NOT EOF FILEI
000055 OHEAD = ' '
000056 OMNAME = IMNAME
000057 OMGENRE = ' '
000058 IF IMGENRE = 1
000059 OMGENRE = 'FANTASY'
000060 END-IF
000061 IF IMGENRE = 2
000062 OMGENRE = 'ACTION'
000063 END-IF
000064 IF IMGENRE = 3
000065 OMGENRE = 'COMEDY'
000066 END-IF
000067 IF IMGENRE = 4
000068 OMGENRE = 'HORROR'
000069 END-IF
000070 IF IMGENRE = 5
000071 OMGENRE = 'DRAMA'
000072 END-IF
000073 OMRATE = IMRATE
000074 PUT FILEO
000075 GET FILEI
000076 END-DO
000077 /*
您的头每次都会打印,因为您是在JOB INPUT FILEI内部打印的。相反,将此逻辑移动到JOB INPUT NULL进程(或为此编写STARTER进程(。然后它将只在程序启动时运行。