是否可以在ILE COBOL过程中使用任意长度的参数?

时间:2014-08-28 17:43:07

标签: parameters ibm-midrange procedure cobol

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

1)无论我选择最大字符串大小的长度,某个程序可能需要用更大的字符串调用它,

2)尾随空格在结果方面可能有意义。

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

在阅读IBM文档时,我倾向于相信无法做到这一点。我是对的,还是实际上有办法实现这个目标?

2 个答案:

答案 0 :(得分:2)

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

可变长度参数将如下所示:

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

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

答案 1 :(得分:2)

您需要知道CALLed程序中字段的长度。所以我希望你在CALLing计划中知道它。所以,如果你知道那里的长度,你会没事的。

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

  1. 使用长度(COBOL中VARCHAR的通用定义)作为数据前缀

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

  3. 如果你不想仅仅为了给它添加前缀(如果它还没有),第二个可以更方便。

    长度的字段类型?二进制会很好。哪个二进制?根据你的描述,它听起来像"原生二进制"最适合,而不是具有PICture大小的小数限制的二进制字段。那可能是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.
    

    或者

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

    在你的程序中,你只需使用THE-STRING,MOVE或DISPLAY等等。除了CALL之外的CALL,除了数据开头的地址之外没有传达任何内容,所以: - )

    除非您需要,否则您不需要 CALLing计划中的定义。这是CALLed程序的一个方便的定义,虽然还有其他方法可以做到这一点,包括恶棍的避难所,参考修改: - )

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