我正在研究Cobol程序并需要DISPLAY来打印消息,以便在运行程序时可以看到它们。我以为是用SYSOUC编写这种类型的Cobol消息,但我不能让它显示它应该是这样我可以查看它,只看到显示或至少这是我的想法。
问题:如何让Cobol中的DISPLAY显示消息?
//STEP2 EXEC PGM=MyProgram,REGION=32M,COND=(0,NE)
//STEPLIB DD DSN=MyPrgram,DISP=SHR
//SYSOUT DD SYSOUT=1 --system messages
//SYSDBOUT DD SYSOUT=1
//SYSOUC DD SYSOUT=3 --display
//SYSPRINT DD SYSOUT=1
//SYSUDUMP DD SYSOUT=1
//INPUT1 DD DSN=MyFile,DISP=SHR,BUFNO=30
//INPUT2 DD DSN=CDP.PARMLIB(SomeParmCard),DISP=SHR
//OUTPUT1 DD DSN=&&Temp,DISP=(,PASS),UNIT=SYSDA,
// DCB=aaaa.bbbb.MODEL,MGMTCLAS=TMM
//PRTOUTA DD SYSOUT=2,DCB=(BLKSIZE=0,LRECL=133,RECFM=FBM)
答案 0 :(得分:2)
默认情况下,从IBM的Enterprise COBOL,您的DISPLAY消息将转到//SYSOUT DD SYSOUT=whatyouneedatyoursite
您已将其标记为系统消息,但您应该在那里查看。使用一些实用程序(SORT就是一个很好的例子),它将包含产品的消息输出,但默认情况下不是COBOL的情况。
可以通过编译选项更改DISPLAY输出的位置:OUTDD(YOURDD)。如果输出不在SYSOUT上,请检查编译列表的开头是否有选项,看看是否正在使用OUTDD。
逻辑错误可能会确保您的DISPLAY语句不会被执行。
我建议将TIME =(,2)放在您的EXEC卡或JOB卡上。如果你碰巧得到一个循环,这将节省你。我今天仍然这样做(尽管比我刚开始时更少的循环...,更少,但如果它发生,它将节省一堆CPU)。你可能能够使用TIME =(,1),但有时候会在其黄金时段中关闭转储处理。
当想知道你在程序中放置的DISPLAY时,要检查的另一件事是你正在执行正确的程序版本。我觉得有用的一件事是:
01 W-WHEN-COMPILED PIC X(8)BX(8).
MOVE WHEN-COMPILED TO W-WHEN-COMPILED
DISPLAY "yourprogramname " W-WHEN-COMPILED
您在WORKING-STORAGE中执行01,在“仅运行一次”中执行MOVE和DISPLAY。然后在任何运行之后,你查看sysout并告诉你正在运行你编译的程序(或者你可以告诉你不是)。如果是您正在运行的日期/时间,则日期/时间应与最新编译列表中的日期/时间相同。多年来保存了我很多的时间。
有一个内在函数可以提供类似的输出,包括一个4位数的年份。这是两者之间的唯一区别。两者都在编译时完全解析,因此只要您只在程序的“只使用一次”部分执行它们,就不会对它们中的任何一个产生性能影响。有关WHEN-COMPILED和内在函数的文档,请参阅Enterprise COBOL语言参考,有关编译选项的文档,请参阅编程指南。