当记录中的最后一列是字符串时,行的大小可以可变。 其大小在 0 和 picture 子句中指定的最大大小之间可能有所不同。 如果具有可变大小的行,应用程序必须在发送行之前显式指定每行的大小。
实际大小字段在自动化端不可见。 事务集成商 (TI) 运行时环境使用自动化服务来确定输入数据的大小。 当 TI 运行时环境将数据发送到主机时,它会自动设置实际大小字段。
导入 COBOL 向导永远不会创建具有可变大小行的记录集。 显示包含可变大小行的记录集的属性。 可变 大小的行 属性允许用户为特定记录集手动配置此选项。 可变大小的行属性提供高级选项。 可以指定实际行大小变量为半字或全字二进制文件。 实际大小变量将包含自身或仅包含行的大小。
以下 COBOL 示例演示主机应用程序如何发送大小可变的行。 长度字段包含在行大小中:
01 CUSTOMER-DATA.
05 CUSTOMER-NUMBER PIC 9(9).
05 LAST-NAME PIC X(20).
05 FIRST-NAME PIC X(20).
05 INVOICE-COUNT PIC 9(7) COMP-3.
05 INVOICES OCCURS 50 TIMES DEPENDING ON INVOICE-COUNT.
10 INVOICE-DATA.
15 INVOICE-ROW-SIZE PIC S9(4) COMP.
15 INVOICE-NUMBER PIC 9(10).
15 INVOICE-DATE PIC 9(7) COMP-3.
15 INVOICE-AMOUNT PIC S9(13)V9(2) COMP-3.
10 INVOICE-DESCRIPTION PIC X(4096).
.
.
.
MOVE LENGTH OF CUSTOMER-DATA TO SEND-LENGTH.
SUBTRACT LENGTH OF INVOICES FROM SEND-LENGTH.
EXEC-CICS SEND FROM(CUSTOMER-DATA)
LENGTH(SEND-LENGTH)
END-EXEC.
PERFORM VARYING ROW FROM 1 BY 1 UNTIL ROW > INVOICE-COUNT
INSPECT INVOICE-DESCRIPTION TALLYING INVOICE-ROW-SIZE
FOR CHARACTERS BEFORE INITIAL ' '
ADD LENGTH OF INVOICE-DATA TO INVOICE-ROW-SIZE
EXEC-CICS SEND FROM(INVOICE-ROW-SIZE)
LENGTH(2)
END-EXEC
EXEC-CICS SEND FROM(INVOICES(ROW))
LENGTH(INVOICE-ROW-SIZE)
END-EXEC
END-PERFORM.
以下 COBOL 示例演示主机应用程序如何发送大小可变的行。 长度字段不包括在行大小中:
01 CUSTOMER-DATA.
05 CUSTOMER-NUMBER PIC 9(9).
05 LAST-NAME PIC X(20).
05 FIRST-NAME PIC X(20).
05 INVOICE-COUNT PIC 9(7) COMP-3.
05 INVOICE-ROW-SIZE PIC S9(4) COMP.
05 INVOICES OCCURS 50 TIMES DEPENDING ON INVOICE-COUNT.
10 INVOICE-DATA.
15 INVOICE-NUMBER PIC 9(10).
15 INVOICE-DATE PIC 9(7) COMP-3.
15 INVOICE-AMOUNT PIC S9(13)V9(2) COMP-3.
10 INVOICE-DESCRIPTION PIC X(4096).
.
.
.
MOVE SIZE OF CUSTOMER-DATA TO SEND-LENGTH.
SUBTRACT LENGTH OF INVOICES FROM SEND-LENGTH.
SUBTRACT LENGTH OF INVOICE-ROW-SIZE FROM SEND-LENGTH.
EXEC-CICS SEND FROM(CUSTOMER-DATA)
LENGTH(SEND-LENGTH)
END-EXEC.
PERFORM VARYING ROW FROM 1 BY 1 UNTIL ROW > INVOICE-COUNT
INSPECT COMMENTS TALLYING INVOICE-ROW-SIZE
FOR CHARACTERS BEFORE INITIAL ' '
ADD LENGTH OF INVOICE-DATA TO INVOICE-ROW-SIZE
EXEC-CICS SEND FROM(INVOICE-ROW-SIZE)
LENGTH(LENGTH OF INVOIVE-ROW-SIZE)
END-EXEC
EXEC-CICS SEND FROM(INVOICES(ROW))
LENGTH(INVOICE-ROW-SIZE)
END-EXEC
END-PERFORM.