在子程序中接受 SYSIN
Posted
技术标签:
【中文标题】在子程序中接受 SYSIN【英文标题】:ACCEPT FROM SYSIN in subprogram 【发布时间】:2016-11-21 20:12:12 【问题描述】:假设我从 JCL 执行一个 COBOL 程序,使用 SYSIN DD
提供数据。
如果该程序然后CALLs
是一个 COBOL 子程序,并且某些数据仍然可以从输入中获得,那么子程序是否能够使用 ACCEPT
语句读取它们?
还是只能从 JCL 调用的运行单元的主程序访问 SYSIN?
编辑:我认为这将是一种糟糕的编码习惯。我不打算使用它,也不需要更好的替代品,我知道(例如从主数据中读取输入设备数据并通过他们的LINKAGE
将其传递给子程序)。
实际上我不是在编写 COBOL 代码,而是在研究/处理它,所以我对“极端情况”行为感兴趣,以完善我对 COBOL 语义的理解。
【问题讨论】:
没有“SYSIN DD”子句。 DD 是一个 JCL 语句,SYSIN 是一个名称,它将 JCL 中指定的资源连接到内部使用该名称的程序。这将是一个糟糕的想法,这将使理解您的程序正在做什么比必要的困难得多。如果您想在您的 SYSIN 上定义多个“功能代码”,请编写一个执行 ACCEPT 的程序(更好,只是像正常一样读取)并在多个地方调用它。如果函数是离散的,则一定要使用单独的 DD。其他方法。只是不要尝试你的建议。 不,我不知道它会做什么。可能有足够的关于 SYSIN 的“特殊”来使其工作,但这是一个糟糕的主意,我从未遇到任何尝试过它的人。 我赞同 Bill Woodger 的评论。通常,您在主程序中进行所有输入/输出。您将数据字段传递给子程序,并获得计算字段作为回报。 补充一点,我不会对生产程序中的数据使用 ACCEPT。只需在 COBOL 程序中定义一个文件并执行通常的 OPEN/READ/CLOSE,并进行错误检查。这不会阻止将数据作为“卡片”(DD *
或 DD DATA
)提供,然后您可以确定并且永远知道,除非您将文件定义为 GLOBAL(对于“包含”子程序)或EXTERNAL(对于单独的子程序)该行为不会提供恰好位于周围的下一条记录。而且,鉴于此,不要那样做。只在一个地方做 ACCEPTs,然后让它们 READs。
我认为如果您的潜在问题是“您可以通过哪些方式编写愚蠢的事情,然后再做更多愚蠢的事情,那么您将无法在这里形成一个“关于主题”的问题在经过测试的范围内和在特定情况下,该程序“有效””。试着更清楚地描述你的任务是什么,而不是专注于一个孤立的、但很难解决“主题”的事情。
【参考方案1】:
您只需在主程序上使用 ACCEPT。如果你想发送信息,你应该使用副本。
【讨论】:
感谢您的回答!我倾向于同意你的观点,但你有任何参考资料(手册、网页......)来支持你的主张吗?我们都同意不这样做是不好的做法。但这个问题是关于这种极端情况下的实际运行时行为。以上是关于在子程序中接受 SYSIN的主要内容,如果未能解决你的问题,请参考以下文章
Apple iWork(PagesNumbersKeynote)13.0
VMware Tanzu Community Edition (TCE) 0.9