2

我知道有一个 DIPSLAY 操作数可以让你“记录”任何变量值。但是,我的问题是:有没有办法像 javascript 的 console.log 的 PHP 的 var_dump 一样,当你给它们一个变量时,它们会打印出值和变量的名称。

例如,假设我有以下数据:

01 MY-DATA.
   05 FIRST-PART      PIC X(05) VALUE 'DATA1'.
   05 SECOND-PART     PIC X(05) VALUE 'DATA2'.

我的问题是:在我的日志中是否有类似的东西(一次调用和任何给定的变量):

'我的数据:'

'第一部分:DATA1'

'第二部分:数据 2'

谢谢

4

3 回答 3

4

不适用于任何当前支持的大型机 IBM COBOL 编译器(我看到您已用“大型机”标记您的问题)。

曾经有 EXHIBIT 语句,在 Enterprise COBOL中没有实现。该链接上有一些关于自己实现类似功能的讨论。

我为自己编写了一个 ISPF 编辑宏来生成 COBOL 代码来执行上面 IBM 文档链接中所示的等效 DISPLAY。

Overkill 将调用 CEE3DMP,但众所周知,我在沮丧时会过度杀戮。

您可能能够使用其他更精细的语言环境转储服务之一,例如 CEEVDMP 或 CEEHDMP。

于 2019-06-28T18:22:57.510 回答
3

使用 Enterprise COBOL V6R1,您可以在 MY-DATA 上使用 JSON GENERATE 语句,然后将输出从 UTF-16 转换为 EBCDIC,然后显示它。

   Working-storage section.
     01 MY-DATA.
       05 FIRST-PART      PIC X(05) VALUE 'DATA1'.
       05 SECOND-PART     PIC X(05) VALUE 'DATA2'.
     1 i pic 9999 comp.
     1 jn pic N(100).
   Procedure division.
     example.
       json generate jn from MY-DATA count i
       display function display-of(jn(1:i))
       stop run.

输出看起来像:

{"MY-DATA":{"FIRST-PART":"DATA1","SECOND-PART":"DATA2"}}

这并不完全符合您的要求,但它“更接近”。您可以轻松地将上面的示例更改为一个部分,然后您可以执行它(这就像一个“单次调用”)

于 2019-07-04T15:21:58.300 回答
2

在大多数编程语言中没有内置选项(例如,许多 OO 编程语言有一个toString(或类似的)方法,但这就是对象所说的(并且可能根本不包括 a 变量的单个实际内容) )。

COBOL 与语句一起使用(就像DISPLAY您提到的那样),而var_dump它是一个 php 内置函数。不同的 OO 编程语言可以选择使用一种反射,允许您(有一些先决条件)自己编写 var_dump 函数,但据我所知,没有支持 OO 的 COBOL 编译器具有反射功能。

正如@cschneid 提到的那样,有EXHIBIT声明(实际上该链接是我为它找到的最好的文档)但没有支持它的实现(据我所知)显示记录的子字段像 var_dump 那样分开。 作为 z/OS 的CEE3DMP对您没有帮助,因为它会转储您指定的所有内容 - 但您不能指定单个变量。那里的其他转储例程也不会按照您的要求工作(为了记录,分为子字段)。

所以回答这个问题是 - “不,没有标准选项来转储记录”。

如果您不限于任何 COBOL 实现,则可以将此语言功能添加到 GnuCOBOL 中,也可以在 z/OS 上用作 64 位 COBOL ;-)

于 2019-06-28T18:40:19.570 回答