如何根据我设置的图片子句从COBOL cut制作Compute Result
How to make the Compute Result from COBOL cut based on the picture clause that I set
我正在尝试显示计算结果,例如加法、减法、乘法和 div。
我的问题是我设置了计算结果但没有削减。比方说,如果我说数字 1 x 1
是 99999x99999
,它将产生 10 个数字,所以我必须在数据 division 工作存储部分中使用 PIC 9(10)
。但是如果 11111x22222
它将产生 9 位数字,所以结果将是 0246908402
。应该有一个0,因为我设置了PIC 9(10)
,但它只产生了9位数字......如果我设置PIC 9(6)
,它将被切割成908402
。
我想在不设置 PIC
长度的情况下显示结果,所以它会很灵活,如果它产生 9 位数字,它将显示所有 9 位数字,如果它产生 7 位数字,它将显示所有 7 位数字,而不被切割,并且没有 0 来填充所有空间。可能吗?这是代码
********************************************************
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INBOUND-MESSAGE PIC X(14).
01 OUTBOUND-MESSAGE PIC X(80).
01 WS-VARIABLE.
05 DETAIL1 PIC X(14)
VALUE 'HASIL TAMBAH: '.
05 DETAIL2 PIC X(14)
VALUE 'HASIL KURANG: '.
05 DETAIL3 PIC X(14)
VALUE 'HASIL KALI : '.
05 DETAIL4 PIC X(14)
VALUE 'HASIL BAGI : '.
05 WS-NUM1 PIC 9(5).
05 WS-NUM2 PIC 9(5).
05 WS-ADD PIC 9(6).
05 WS-SUB PIC 9(6).
05 WS-MUL PIC 9(6). -> lets say i set this become 6 so if 11111x22222 it will produced 9 digits and will be cutted into 6 digits
05 WS-DIV PIC 9(6).
01 WS-STRING.
05 WS-CONCAT PIC X(80).
05 WS-CONCAT2 PIC X(80).
05 WS-CONCAT3 PIC X(80).
05 WS-CONCAT4 PIC X(80).
********************************************************
PROCEDURE DIVISION.
EXEC CICS RECEIVE
INTO (INBOUND-MESSAGE)
END-EXEC.
MOVE INBOUND-MESSAGE(5:5) TO WS-NUM1.
MOVE INBOUND-MESSAGE(10:5) TO WS-NUM2.
ADD WS-NUM1 TO WS-NUM2 GIVING WS-ADD.
SUBTRACT WS-NUM1 FROM WS-NUM2 GIVING WS-SUB.
MULTIPLY WS-NUM1 BY WS-NUM2 GIVING WS-MUL.
DIVIDE WS-NUM1 BY WS-NUM2 GIVING WS-DIV.
STRING DETAIL1
WS-ADD
DELIMITED BY ':'
INTO WS-CONCAT.
STRING DETAIL2
WS-SUB
DELIMITED BY ':'
INTO WS-CONCAT2.
STRING DETAIL3
WS-MUL
DELIMITED BY ':'
INTO WS-CONCAT3.
STRING DETAIL4
WS-DIV
DELIMITED BY ':'
INTO WS-CONCAT4.
EXEC CICS SEND
FROM (WS-STRING)
ERASE
NOHANDLE
END-EXEC.
EXEC CICS RETURN
END-EXEC.
任何帮助将不胜感激
如果我对你的问题的理解是正确的,你想取消结果中的前导零吗?因此,在您的示例中,如果输出的最大可能值为 10 位数字,您可以将其定义为 PIC 9(10)。如果特定计算的输出结果为 0000123456,那么您希望显示 123456。理想情况下,您可能希望实际显示为 123,456 或 £123,456。这一切都可以使用 IBM Enterprise COBOL 参考手册 'zero suppression and replacement editing' 部分中描述的零抑制和编辑技术来实现。通常,您使用重新定义将输出字段更改为所需格式。
所以 WS-MUL 仍然是 PIC 9(10),但被 WS-MUL-X 使用 PIC Z(9)9 重新定义。
您可以使用 COBOL edited numerics 即
03 ws-output-number pic zzzzzzzzz9.
ADD WS-NUM1 TO WS-NUM2 GIVING WS-ADD
move WS-ADD to ws-output-number
将抑制前导零,但这会更好。
正如西蒙指出的那样,您可以使用 FUNCTION TRIM(ws-output-number)
删除
前导空格
03 ws-output-number pic --,---,---,--9.
因为它包含符号 + 将逗号添加到输出中
提高可读性
我正在尝试显示计算结果,例如加法、减法、乘法和 div。
我的问题是我设置了计算结果但没有削减。比方说,如果我说数字 1 x 1
是 99999x99999
,它将产生 10 个数字,所以我必须在数据 division 工作存储部分中使用 PIC 9(10)
。但是如果 11111x22222
它将产生 9 位数字,所以结果将是 0246908402
。应该有一个0,因为我设置了PIC 9(10)
,但它只产生了9位数字......如果我设置PIC 9(6)
,它将被切割成908402
。
我想在不设置 PIC
长度的情况下显示结果,所以它会很灵活,如果它产生 9 位数字,它将显示所有 9 位数字,如果它产生 7 位数字,它将显示所有 7 位数字,而不被切割,并且没有 0 来填充所有空间。可能吗?这是代码
********************************************************
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INBOUND-MESSAGE PIC X(14).
01 OUTBOUND-MESSAGE PIC X(80).
01 WS-VARIABLE.
05 DETAIL1 PIC X(14)
VALUE 'HASIL TAMBAH: '.
05 DETAIL2 PIC X(14)
VALUE 'HASIL KURANG: '.
05 DETAIL3 PIC X(14)
VALUE 'HASIL KALI : '.
05 DETAIL4 PIC X(14)
VALUE 'HASIL BAGI : '.
05 WS-NUM1 PIC 9(5).
05 WS-NUM2 PIC 9(5).
05 WS-ADD PIC 9(6).
05 WS-SUB PIC 9(6).
05 WS-MUL PIC 9(6). -> lets say i set this become 6 so if 11111x22222 it will produced 9 digits and will be cutted into 6 digits
05 WS-DIV PIC 9(6).
01 WS-STRING.
05 WS-CONCAT PIC X(80).
05 WS-CONCAT2 PIC X(80).
05 WS-CONCAT3 PIC X(80).
05 WS-CONCAT4 PIC X(80).
********************************************************
PROCEDURE DIVISION.
EXEC CICS RECEIVE
INTO (INBOUND-MESSAGE)
END-EXEC.
MOVE INBOUND-MESSAGE(5:5) TO WS-NUM1.
MOVE INBOUND-MESSAGE(10:5) TO WS-NUM2.
ADD WS-NUM1 TO WS-NUM2 GIVING WS-ADD.
SUBTRACT WS-NUM1 FROM WS-NUM2 GIVING WS-SUB.
MULTIPLY WS-NUM1 BY WS-NUM2 GIVING WS-MUL.
DIVIDE WS-NUM1 BY WS-NUM2 GIVING WS-DIV.
STRING DETAIL1
WS-ADD
DELIMITED BY ':'
INTO WS-CONCAT.
STRING DETAIL2
WS-SUB
DELIMITED BY ':'
INTO WS-CONCAT2.
STRING DETAIL3
WS-MUL
DELIMITED BY ':'
INTO WS-CONCAT3.
STRING DETAIL4
WS-DIV
DELIMITED BY ':'
INTO WS-CONCAT4.
EXEC CICS SEND
FROM (WS-STRING)
ERASE
NOHANDLE
END-EXEC.
EXEC CICS RETURN
END-EXEC.
任何帮助将不胜感激
如果我对你的问题的理解是正确的,你想取消结果中的前导零吗?因此,在您的示例中,如果输出的最大可能值为 10 位数字,您可以将其定义为 PIC 9(10)。如果特定计算的输出结果为 0000123456,那么您希望显示 123456。理想情况下,您可能希望实际显示为 123,456 或 £123,456。这一切都可以使用 IBM Enterprise COBOL 参考手册 'zero suppression and replacement editing' 部分中描述的零抑制和编辑技术来实现。通常,您使用重新定义将输出字段更改为所需格式。 所以 WS-MUL 仍然是 PIC 9(10),但被 WS-MUL-X 使用 PIC Z(9)9 重新定义。
您可以使用 COBOL edited numerics 即
03 ws-output-number pic zzzzzzzzz9.
ADD WS-NUM1 TO WS-NUM2 GIVING WS-ADD
move WS-ADD to ws-output-number
将抑制前导零,但这会更好。
正如西蒙指出的那样,您可以使用 FUNCTION TRIM(ws-output-number)
删除
前导空格
03 ws-output-number pic --,---,---,--9.
因为它包含符号 + 将逗号添加到输出中 提高可读性