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

将多行值从JCL instream传递到Cobol变量88,cobol,mainframe,jcl,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. 如何将JCL中的值作为instream传递给Cobol程序变量88。 因此,在不更改程序的情况下修改值将更容易 我发现了两种解

例如:

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.
如何将JCL中的值作为instream传递给Cobol程序变量88。 因此,在不更改程序的情况下修改值将更容易

我发现了两种解决方案:
1.使用内部索引表。因此,二进制搜索将快速完成任务。
2.使用VSAM文件而不是在流中传递数据。(可能性较小)

我认为二进制搜索肯定比88条件检查慢。
我正试图找到与88条件检查等效的效率。

听起来您想从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= ...'
在COBOL程序链接部分:

  *****************************************************************
   LINKAGE SECTION.
   01  PARM-BUFFER.
       05  PARM-LENGTH         pic S9(4)   comp.
       05  PARM-DATA           pic X(256).

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

听起来您想从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= ...'
在COBOL程序链接部分:

  *****************************************************************
   LINKAGE SECTION.
   01  PARM-BUFFER.
       05  PARM-LENGTH         pic S9(4)   comp.
       05  PARM-DATA           pic X(256).


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

您不能。您要做的是使用
表格
,从JCL加载表格并搜索表格。感谢Bruce为您提供的快速答案。还有别的办法吗?我将从中选择更好的方法。您是否希望像PARM='nnnn'一样从JCL中获取一个值?“我认为88是一条红鲱鱼。”霍格斯特罗姆:任何简单有效的解决方案都可以。你不能。您要做的是使用
表格
,从JCL加载表格并搜索表格。感谢Bruce为您提供的快速答案。还有别的办法吗?我将从中选择更好的方法。您是否希望像PARM='nnnn'一样从JCL中获取一个值?我认为88是一个骗局。@Hogstrom任何简单有效的解决方案都可以。我相信
PARM
限制为100字节。要传递超过100个字节,必须使用
PARMDD
,然后执行的程序必须调用
CEE3PR2
来检索该值。我不认为CEE3PR2是必要的,除非您在LE环境中(当然是COBOL),您使用了CEE3PRM,并且您现在可能正在处理超过100个字节的传递的parmd值。TSO调用命令处理也有一个愚蠢的100字节限制,您必须玩游戏(使用地址LINKMVS从REXX调用效果很好)。对于非LE代码,R1指向的区域是相同的,只是更长。@zarchasmpgmr我关于100字节限制的陈述是基于我对CEE3PR2的关注。一个带有链接部分的主程序应该足够了,该链接部分由一个01条目、一个05 9(5)二进制和一个05 X(32000)组成。如果我们的zPDT稳定下来……我相信
PARM
限制在100字节以内。要传递超过100个字节,必须使用
PARMDD
,然后执行的程序必须调用
CEE3PR2
来检索该值。我不认为CEE3PR2是必要的,除非您在LE环境中(当然是COBOL),您使用了CEE3PRM,并且您现在可能正在处理超过100个字节的传递的parmd值。TSO调用命令处理也有一个愚蠢的100字节限制,您必须玩游戏(使用地址LINKMVS从REXX调用效果很好)。对于非LE代码,R1指向的区域是相同的,只是更长。@zarchasmpgmr我关于100字节限制的陈述是基于我对CEE3PR2的关注。一个带有链接部分的主程序应该足够了,该链接部分由一个01条目、一个05 9(5)二进制文件和一个05 X(32000)组成…