我有以下呼叫声明:
038060 CALL PROG USING
038070 DFH
038080 L000
038090 ZONE-E
038100 ZONE-S.
此通话是动态的,并使用 PROG 。
PROG 是一个定义为:
的组018630 01 XX00.
018640 10 PROG.
018650 15 XX00-S06 PICTURE X(6)
018660 VALUE SPACE.
018670 15 XX00-S02 PICTURE X(2)
018680 VALUE SPACE.
018690 10 XX00-S92 PICTURE 9(02)
018700 VALUE ZERO.
018710 10 XX00-S91 PICTURE 9(1)
018720 VALUE ZERO.
018730 10 XX00-S9Z PICTURE 9(1)
018740 VALUE ZERO.
018750 10 XX00-9B0 PICTURE X(05)
018760 VALUE SPACE.
018770 10 XX00-0B0 PICTURE X(02)
018780 VALUE SPACE.
018790 10 XX00-BB1 PICTURE X(01)
018800 VALUE SPACE.
018810 10 XX00-SFN PICTURE X(07)
I cut here but there is a lot of field after...
似乎使用的实际预测存储在:
XX00-S06
和
XX00-S02
我还有其他情况,其名称在3或4个字段上,并且预测长度不总是8。
所以我的问题是 Cobol如何知道在该组中选择好的程序名称?什么是解决规则?
配置:我使用Microfocus Net Express编译器,环境是UniKix。
答案 0 :(得分:3)
COBOL中的动态调用规则非常简单。给出类似的东西:
CALL WS-NAME USING...
COBOL将针对加载模块库解析当前存储在WS-NAME
中的程序名称
基于的可用性
线性搜索。使用匹配WS-NAME
的第一个匹配的加载模块入口点名称。
WS-NAME
的定义有多复杂或简单无关紧要。用于名称的总长度
是WS-NAME
的长度。例如:
01 WS-NAME.
05 WS-NAME-FIRST-PART PIC X(3).
05 WS-NAME-MIDDLE-PART PIC X(2).
05 WS-NAME-LAST-PART PIC X(3).
WS-NAME
由3个从属字段组成,总共有8个字符。您可以单独填充这些或只是移动
整体上WS-NAME
的东西。如果WS-NAME
的长度小于8个字符,则尾随字符将为
设置为任何接收字段上的空格。例如:
01 WS-SHORT-NAME.
05 WS-SHORT-NAME-FIRST-PART PIC X(4) VALUE 'AAAA'.
05 WS-SHORT-NAME-LAST-PART PIC X(2) VALUE 'BB'.
此处WS-SHORT-NAME
只有6个字符。 MOVING WS-SHORT-NAME
更长PIC X
类型变量,如下所示:
MOVE WS-SHORT-NAME TO WS-NAME
将导致WS-NAME采用值'AAAABB bb '(注意两个尾随空格)。在libary搜索期间
对于匹配的入口点名称,尾随空格并不重要,因此您可以使用CALL语句
之一:
CALL WS-NAME
或
CALL-WS-SHORT-NAME
他们将解决相同的切入点。
我不确定MicroFocus COBOL的长度规则是什么,但是对于动态调用的IBM z / os 程序名称不能超过8个字符(如果是,则名称将被截断为8个字符)。
答案 1 :(得分:1)
我将向NeilB添加更多关于Micro Focus COBOL的具体信息。
fyi:PROGRAM-ID,ENTRY-POINTS限制为30-31个字符(请查看文档中的“系统限制和编程限制”部分。)