DISPLAY
语句可以让你“记录”任何变量值。然而,我的问题是:有没有办法做类似 PHP 中的
var_dump
或 JavaScript 中的 console.log 的事情,当你给它们一个变量时,它们会打印值和变量名称。假设我有以下数据:
01 MY-DATA.
05 FIRST-PART PIC X(05) VALUE 'DATA1'.
05 SECOND-PART PIC X(05) VALUE 'DATA2'.
我的问题是:有没有办法在我的日志上有类似的东西(通过一次调用和任何给定的变量):
'MY-DATA:'
'FIRSTPART : DATA1'
'SECOND PART: DATA2'
曾经有 EXHIBIT 语句,但在 Enterprise COBOL 中“未实现”。该链接上有一些关于您自己实现类似功能的讨论。
我为自己编写了一个 ISPF 编辑宏,以生成 COBOL 代码来执行等效的 DISPLAY,如上面的 IBM 文档链接所示。
过度杀戮就是调用 CEE3DMP,但众所周知,我在沮丧时会过度杀戮。您也许可以使用其他更精细的语言环境
转储服务
之一,例如 CEEVDMP 或 CEEHDMP。使用 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"}}
这并不完全是你想要的,但它“更接近”。您可以轻松地将上面的示例更改为一个部分,然后您可以执行它(这就像“单个调用”)
在
toString
(或类似)方法,但这会执行对象所说的内容(并且可能不包含单个实际内容) a 变量的全部)。
COBOL 使用语句(如您提到的
DISPLAY
),而 var_dump
是 php 内置函数。不同的 OO 编程语言可以选择使用一种反射,允许您(有一些先决条件)自己编写 var_dump 函数,但据我所知,支持 OO 的 COBOL 编译器没有反射功能。正如@cschneid提到的,有
EXHIBIT
声明(实际上该链接是我找到的最好的文档),但没有支持它的实现(据我所知)将记录的子字段显示为单独的就像 var_dump 一样。
CEE3DMP,因为 z/OS 不会为您提供帮助,因为它会转储您指定的所有内容 - 但您无法指定单个变量。那里的其他转储例程也不会按照您的要求工作(为了记录,分为子字段)。 所以回答这个问题是 - “不,没有转储记录的标准选项”。 如果您不限于任何 COBOL 实现,您可以将此语言功能添加到 GnuCOBOL 中,也可以在 z/OS 上用作 64 位 COBOL ;-)