具有多个输入文件的 IEBGENER

IEBGENER with multiple input file

我是大型机新手。 我有一份工作,在 JCL 中的这一步似乎有点混乱。

//*----------------------------------------------------------
//*       IEBGENER
//*----------------------------------------------------------
//GENER02  EXEC PGM=IEBGENER,COND=(8,LT)                     
//SYSPRINT DD   SYSOUT=I                                     
//SYSUT1   DD   DSN=&&FILE1,DISP=(OLD,DELETE)                
//         DD   DSN=&&FILE2,DISP=(OLD,DELETE)                
//         DD   DSN=&&FILE3,DISP=(OLD,DELETE)                
//SYSUT2   DD   DSN=&&OUT1,DISP=(NEW,PASS),              
//         SPACE=(TRK,(100,100),RLSE),UNIT=WORK,             
//         DCB=(LRECL=90,BLKSIZE=22950,RECFM=FB)             
//SYSIN    DD   *                                            
  GENERATE MAXLITS=100                                       
  RECORD FIELD=(20,'                    ',,1),               
         FIELD=(28,'                            ',,21),      
         FIELD=(16,'AB110000AB012561',,49),                  
         FIELD=(26,'                          ',,65)         
/*      

我知道 IEBGENER 是一个复制实用程序,但是有 3 个输入文件和那个参数,输出文件到底是什么? 它是否合并了 3 个文件?

简短的回答是肯定的。 z/OS将一条DD语句中的所有DD卡拼接成一个逻辑包,然后一起处理。参见 https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.ieab600/iea3b6_Syntax4.htm

较长的答案是,您是从文件(z/OS 术语中的数据集)的角度来看事物; z/OS 的大部分内容都不是这种结构。 z/OS 实用程序倾向于从某种面向数据的角度看待事物,通常称为记录或记录块;在上面的示例中,IEBGENER 将查看通过 SYSUT1 提供的每条记录,进行一些处理(记录在此处:https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.idau100/u1132.htm),然后将输出写入 SYSUT2。 IEBGENER 甚至不知道有多个输入数据集;它只是向操作系统询问来自 SYSUT1 的下一条记录,z/OS 将响应,然后 IEBGENER 告诉 z/OS 将输出记录写入 SYSUT2。

回答你的第二个问题,输出会是什么样子。这种编码方式看起来像是从输出中删除字段并在其位置放置空格。基本上它会是这样的:

输入记录

         1         2         3         4         5         6         7         8         9
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
This is my input data to IEBGENER so I can see what the output records will look like ....

输出记录
注意:_ 表示根据您的实用程序 FIELD 语句插入的空格。

         1         2         3         4         5         6         7         8         9
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
________________________________________________AB110000AB012561__________________________

实际上,IEBGENER 作业不会复制任何数据,而是将一个文字放入输出数据集中。

看来您还需要 MAXFLDS=4,否则您会收到一条消息:

IEB342I INVALID SPACE ALLOCATION

如果你想用真正的大型机系统练习,我建议MVS 3.8 Turkey 4-系统。它从 1980 年的 Free MVS 3.8 开始,系统修复到 1985 年 5 月,运行在模拟器上使用用户开发程序来替换一些受版权保护的软件,其他软件则丢失。 99.99% 的功能都可以在 z/OS 2.3 上完成,更新了一些功能并添加了其他功能。一些依赖较新功能的项目不会 运行。