Parameters 可以在ILE COBOL过程中使用任意长度参数吗?

Parameters 可以在ILE COBOL过程中使用任意长度参数吗?,parameters,ibm-midrange,procedure,cobol,Parameters,Ibm Midrange,Procedure,Cobol,我要做的是定义一个(AS400)ILE COBOL过程,该过程接受PICX(n)参数,处理字符串,并将结果代码返回给调用程序。我关注的是: 1) 无论我为最大字符串大小选择什么长度,很可能某些程序需要使用更大的字符串调用它,并且 2) 就结果而言,尾随空格可能是有意义的 因此,该过程需要能够接受任意长度的参数,并在运行时确定字符串的实际长度 在阅读IBM文档时,我倾向于认为这是不可能做到的。我是对的,还是真的有办法做到这一点?我不知道使用任意长度的参数有什么问题(除了学习如何做)。与每种语言一样

我要做的是定义一个(AS400)ILE COBOL过程,该过程接受PICX(n)参数,处理字符串,并将结果代码返回给调用程序。我关注的是:

1) 无论我为最大字符串大小选择什么长度,很可能某些程序需要使用更大的字符串调用它,并且

2) 就结果而言,尾随空格可能是有意义的

因此,该过程需要能够接受任意长度的参数,并在运行时确定字符串的实际长度


在阅读IBM文档时,我倾向于认为这是不可能做到的。我是对的,还是真的有办法做到这一点?

我不知道使用任意长度的参数有什么问题(除了学习如何做)。与每种语言一样,您需要定义可变长度字段或在第二个参数中接收实际长度。PIC需要声明允许的最大长度

可变长度参数如下所示:

01   VL-FIELD.  
   05   i      PIC   S9(4)   COMP-4.  
   05   data   PIC   X(n).

i变量报告长度,PIC(n)将被编码为最大值。您无法安全地访问超出我所说内容的任何字节。

我不知道使用任意长度参数有任何问题(除了学习如何操作)。与每种语言一样,您需要定义可变长度字段或在第二个参数中接收实际长度。PIC需要声明允许的最大长度

可变长度参数如下所示:

01   VL-FIELD.  
   05   i      PIC   S9(4)   COMP-4.  
   05   data   PIC   X(n).

i变量报告长度,PIC(n)将被编码为最大值。您不能安全地访问超出我所说的任何字节。

您需要知道被调用程序中字段的长度。所以我希望你能在你的通话节目中知道这一点。所以如果你知道那里的长度,你会没事的

通常有两种方法可以继续:

  • 在数据前面加上长度前缀(COBOL中VARCHAR的通用定义)

  • 将长度作为单独的参数传递

  • 如果您不想仅仅为了给数据加前缀(如果还没有),那么第二种方法会更方便

    长度字段的类型?二进制将是好的。哪个二进制?根据您的描述,听起来“本地二进制”最合适,而不是图片大小有十进制限制的二进制字段。那可能是COMP-4,但我还没有检查你的COBOL

    如何定义字段

    01  THE-DATA.
        05  THE-LENGTH                      COMP-4 PIC S9(4).
        05  THE-STRING.
            10  FILLER OCCURS 0 TO 32767
                DEPENDING ON THE-LENGTH.
                15  FILLER                         PIC X.
    

    在您的程序中,您只需在移动或显示中使用字符串。Exception CALL,它不向被调用程序传递任何信息,只传递数据开头的地址:-)

    在调用程序中不需要这样的定义,除非需要。对于被调用的程序来说,这是一个方便的定义,尽管还有其他的方法,包括无赖的避难所,引用修改:-)


    如果您能够使用NOSTDTRUNC进行编译,您将能够使用上述值,否则您将需要定义更大的二进制字段,如PIC S9(6)

    您需要知道被调用程序中字段的长度。所以我希望你能在你的通话节目中知道这一点。所以如果你知道那里的长度,你会没事的

    通常有两种方法可以继续:

  • 在数据前面加上长度前缀(COBOL中VARCHAR的通用定义)

  • 将长度作为单独的参数传递

  • 如果您不想仅仅为了给数据加前缀(如果还没有),那么第二种方法会更方便

    长度字段的类型?二进制将是好的。哪个二进制?根据您的描述,听起来“本地二进制”最合适,而不是图片大小有十进制限制的二进制字段。那可能是COMP-4,但我还没有检查你的COBOL

    如何定义字段

    01  THE-DATA.
        05  THE-LENGTH                      COMP-4 PIC S9(4).
        05  THE-STRING.
            10  FILLER OCCURS 0 TO 32767
                DEPENDING ON THE-LENGTH.
                15  FILLER                         PIC X.
    

    在您的程序中,您只需在移动或显示中使用字符串。Exception CALL,它不向被调用程序传递任何信息,只传递数据开头的地址:-)

    在调用程序中不需要这样的定义,除非需要。对于被调用的程序来说,这是一个方便的定义,尽管还有其他的方法,包括无赖的避难所,引用修改:-)


    如果您能够使用NOSTDTRUNC进行编译,您将能够使用上述值,否则您将需要定义更大的二进制字段,如PIC S9(6)

    您是否考虑过使用ILE C或ILE RPG?ILE的全部要点是,您可以将用不同语言编写的模块链接到单个*PGM或*SRVPGM中。这样,你就可以为工作使用最好的工具;如果我被允许使用C,我会的。你考虑过使用ILE C或ILE RPG吗?ILE的全部要点是,您可以将用不同语言编写的模块链接到单个*PGM或*SRVPGM中。这样,你就可以为工作使用最好的工具;不要使用锤子来驱动螺钉。如果允许我使用C,我会。请注意,
    COMP-5
    在AS/400行中不是有效的用法,但ODO子句可能是一个不错的选择。谢谢@user2338816。您有允许访问所有位的二进制文件吗?我们的是COMP-5,我们的COMP-4与COMP和BINARY完全相同(它们进行十进制截断),所以看起来很刺激,但什么都不做。COBOL在这方面有很多变化。我会将其更改为COMP-4,如果这是错误的,请告诉我。DB2 on I和variable length字段通常会将可变前缀指定为COMP-4,这相当于二进制。COMP-4可以覆盖2、4和8字节的二进制/整数值。当然,可变长度前缀将始终是整数,并且将是2个字节。@user2338816谢谢。无符号双字节COMP-4字段的最大值是多少?我猜是菲古