【问题标题】:Issue passing parameters to a COBOL program using JCL PARM= on the EXEC statement在 EXEC 语句中使用 JCL PARM= 将参数传递给 COBOL 程序
【发布时间】:2020-12-04 22:10:40
【问题描述】:

我编写了这个简单的代码来打印我通过 JCL 传递的参数,为什么它不打印参数?

代码:

       CBL APOST                                  
       IDENTIFICATION DIVISION.                   
       PROGRAM-ID. GETAPIT.                       
       ENVIRONMENT DIVISION.                      
       CONFIGURATION SECTION.                     
       DATA DIVISION.                             
       WORKING-STORAGE SECTION.                   
       LINKAGE SECTION.                           
       01   PARM-BUFFER.                          
            05 PARM-LENGTH   PIC S9(4) COMP.      
            05 PARM-DATA.                         
               10 numb       PIC X(6).            
               10 filler     PIC X(250).          
       PROCEDURE DIVISION using PARM-BUFFER.      
       MAINLINE SECTION.                          
           DISPLAY "NUMB:   " numb of PARM-DATA.  
       MAINLINE-EXIT.                             
          GOBACK.     
//MVSSYNSQ JOB (3911),'&SYSUID',CLASS=F,MSGCLASS=R,NOTIFY=&SYSUID  
/*JOBPARM R=51,L=100                                               
//*                                                                
//GETAPI1  EXEC PGM=GETAPIT,PARM='000100'                          
//STEPLIB  DD   DISP=SHR,DSN=MVJE.ZCONN.LOADLIB                    
//SYSPRINT DD   SYSOUT=*     
                                      
OUTPUT:
********************************* TOP OF DATA

NUMB:                                        

【问题讨论】:

  • 你的 JCL 长什么样,程序做了什么(也许你根本看不到输出)?
  • 只打印我正在传递的参数 STEP EXEC PGM,PARM='000100'
  • 你能提供你的 JCL 和你的输出吗?
  • 阅读“我有 JCL”和“我看到输出”很有趣——但如果你不显示这些,我们只能猜测而不是确定的答案。将缺失的信息添加到您的问题中,我们可能会提供答案...
  • @Simon Sobisch:numb 是一个定义为PIC X(6) 的字符字段。您将其与字段 PARM-LENGTH 混为一谈。但即使这个字段也会以字符格式显示为可读数字(负数除外)。来自 IBM Enterprise Cobol 手册的“DISPLAY”语句部分:如果 identifier-1 是二进制、内部十进制或内部浮点数据项,则 identifier-1 会自动转换为外部格式,如下所示: v 二进制和内部十进制项目转换为分区十进制。负符号值会导致低阶符号过冲。.

标签: cobol mainframe zos


【解决方案1】:

当我编译没有 CICS 集成器选项的 COBOL 程序时,它对我有用。

【讨论】:

    【解决方案2】:

    使用您的测试程序和另一个 DISPLAY 来打印参数的长度。

    CBL APOST                                 
     IDENTIFICATION DIVISION.                 
     PROGRAM-ID. GETAPIT.                     
     ENVIRONMENT DIVISION.                    
     CONFIGURATION SECTION.                   
     DATA DIVISION.                           
     WORKING-STORAGE SECTION.                 
     LINKAGE SECTION.                         
     01   PARM-BUFFER.                        
          05 PARM-LENGTH   PIC S9(4) COMP.    
          05 PARM-DATA.                       
             10 numb       PIC X(6).          
             10 filler     PIC X(250).        
     PROCEDURE DIVISION using PARM-BUFFER.    
     MAINLINE SECTION.                        
         DISPLAY "LENGTH: " PARM-LENGTH.      
         DISPLAY "NUMB:   " numb of PARM-DATA.
     MAINLINE-EXIT.                           
              GOBACK.         
    

    使用 PARM='12345' 的参数,我得到了这个输出。

    长度:0005
    号码:12345

    请注意,我使用了 SYSOUT 而不是 SYSPRINT DD 语句,这是您在 JCL 中的内容。

    //SYSOUT DD SYSOUT=*

    据我所知,DISPLAY 默认为STDOUT,在JCL 中为SYSOUT

    来自z/OS COBOL Programming Guide 的关于DISPLAY 的另一条评论

    要将数据写入系统逻辑输出设备,可以省略 UPON 子句或将 UPON 子句与目标 SYSOUT 一起使用。

    在 sysout 时显示“Hello”。复制代码输出被定向到 您在 OUTDD 编译器选项中指定的 ddname。您可以指定 分层文件系统中具有此 ddname 的文件。

    如果未分配 OUTDD ddname 并且您未在 z/OS UNIX 环境,分配一个默认 DD SYSOUT=*。如果 未分配 OUTDD ddname 并且您正在 z/OS UNIX 中运行 环境,_IGZ_SYSOUT 环境变量使用如下:

    未定义或设置为标准输出输出被路由到标准输出(文件描述符 1)。设置为 stderr 输出被路由到 stderr(文件描述符 2)。 否则(设置为 stdout 或 stderr 以外的其他内容) 声明失败;严重程度为 3 的语言环境条件是 提高。当 DISPLAY 输出被路由到 stdout 或 stderr 时,输出 不细分为记录。输出写为单个 没有换行符的字符流。

    如果 OUTDD 和语言环境运行时选项 MSGFILE 指定 相同的 ddname,DISPLAY 输出和语言环境运行时 诊断被路由到语言环境消息文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2019-11-01
      • 2018-08-20
      • 2012-05-02
      相关资源
      最近更新 更多