【问题标题】:IEBGENER with multiple input file具有多个输入文件的 IEBGENER
【发布时间】:2019-03-27 07:56:21
【问题描述】:

我是大型机的新手。 我有一份工作,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 个文件?

【问题讨论】:

  • 这和 Cobol 有什么关系???。 3 个输入文件将一个接一个地读取
  • 为什么不运行 JCL 看看会发生什么???;这是记录声明的链接:ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/…
  • 我没有运行它的环境。我试图理解只有谷歌的声明含义。没有示例,IBM 的链接很难理解
  • 我建议把它分成两个问题;我尽量不混淆问题。一个与 DD 语句连接的工作方式有关。与这项特定工作的工作有关。

标签: mainframe jcl utilities


【解决方案1】:

简短的回答是肯定的。 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。

【讨论】:

  • 非常感谢您的解释。关于 RECORD FIELD 过程的一点疑问。它是否将所有记录编辑为 FIELD 中定义的新文字记录?
【解决方案2】:

回答您的第二个问题,即输出的外观。这种编码方式看起来像是从输出中删除字段并在它们的位置放置空格。基本上是这样的:

输入记录

         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

【讨论】:

  • 感谢您的示例。这是否意味着将 90 字节文字放置到最后一条记录?您的示例表明它将最后一个输入记录替换为新的 90 字节 sysin 文字,对吗?这是在一个已经运行的系统中编码的,顺便说一句,我无权编辑它:D
  • 我拿了你的例子并运行它来确认它并在每条记录上都这样做。我不确定目的是什么,除非它只是简单地创建一个新的输出文件,该文件具有与输入数据集相同数量的记录,并用一个文字替换它们。因此,如果您有 100 条输入记录,您将有 100 条完全相同的输出记录。
  • 非常感谢。我正在调查步骤的含义,所以在实际机器上运行这样会很有帮助
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2015-08-04
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多