将多行值从JCL instream传递到Cobol变量88

dee*_*ner 1 cobol mainframe jcl

例:

01  VAR1             PIC 9(05).      
    88 WS-VAR1  VALUE 1000 1001 1002 1003      
       1004 1009 2000 2002 3000 4000 4009           
       5000 5001 6000 7000 8000 2332 8484.
Run Code Online (Sandbox Code Playgroud)

我们如何将值从JCL作为instream传递给Cobol程序变量88.因此,在不更改程序的情况下修改值会更容易.

我找到了两个解决方案:
1.使用内部索引表.这样二进制搜索就能快速完成任务.
2.使用VSAM文件而不是传递数据.(不太可能)

我认为二进制搜索肯定比88条件检查慢.我试图在88条件检查中找到相同效率的东西.

Hog*_*rom 5

听起来你想从JCL PARM =或SYSIN传递一个值,使COBOL程序独立于硬编码值.

这篇网络文章很好地解释了如何实现这一目标.

JCL看起来像这样:

//* ******************************************************************* 
//* Step 2 of 4, Execute the COBOL program with a parameter. //*
//PARJ1S02 EXEC PGM=CBLPARC1, 
//             PARM='This is a Parameter from the EXEC and PARM= ...'
Run Code Online (Sandbox Code Playgroud)

在COBOL程序链接部分:

  *****************************************************************
   LINKAGE SECTION.
   01  PARM-BUFFER.
       05  PARM-LENGTH         pic S9(4)   comp.
       05  PARM-DATA           pic X(256).
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可以根据您的条件验证链接部分中传递的数据.因此,一旦经过验证,您可以在将其转换为测试的数值后从链接部分移动该值.

  • 我相信`PARM`限制在100个字节.要传递超过100个字节,必须使用`PARMDD`,然后执行的程序必须调用`CEE3PR2`来检索该值. (2认同)