有没有像其他语言一样用COBOL记录变量的方法?

有没有像其他语言一样用COBOL记录变量的方法?,cobol,mainframe,cobol85,Cobol,Mainframe,Cobol85,我知道有一个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'. 我的问题是:我的日志中是否有类似的内容(通过一个调用

我知道有一个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'.
我的问题是:我的日志中是否有类似的内容(通过一个调用和任何给定变量):

“我的数据:”

'第一部分:数据1'

'第二部分:数据2'


感谢当前没有任何受支持的大型机IBM COBOL编译器(我看到您已经用“大型机”标记了您的问题)

过去有一个EXHIBIT语句,在EnterpriseCobol中。在该链接中有一些关于自己实现类似功能的讨论

我为自己编写了一个ISPF edit宏来生成COBOL代码,以便按照上面的IBM文档链接所示进行等效显示

过度杀戮就是给CEE3DMP打电话,但大家都知道我在受挫时会过度杀戮


您可能可以使用另一种更细粒度的语言环境,如CEEVDMP或CEEHDMP。

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

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

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

因此,这个问题的答案是“不,没有标准的转储记录选项”


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

使用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"}}

这不完全是你想要的,但它“更接近”。你可以很容易地将上面的示例更改为一个部分,然后你就可以执行它(这就像一个“单次呼叫”)

这是我在阅读问题后的第一个想法,但我没有时间把它写下来作为答案。。。。