【发布时间】:2019-04-21 11:05:57
【问题描述】:
我遇到过一种情况,记录中的值格式如下 01 WS-PREMIUM PIC S9(05)V9(02) comp-3.
正如我们在 comp-3 中所知道的,符号存储在最后一个半字节中。 例如值为 +1234.10 的 WS-PREMIUM 将存储为 x'0123410C' 或 值为 -1234.10 的 WS-PREMIUM 将存储为 x'0123410D'。
现在我想将其写入报告文件((比如说 Daily Premium 文件)。此值应写入文件,其符号为 +1234.10$ 或 -1234.10$。 我正在这个论坛中搜索答案,但我能找到的是报告部分中的预定义符号变量,而我正在寻找的是通过查看最后一个半字节并相应地写入文件来识别符号的运行时。我还听说他们在 java 中有一种方法可以做到这一点,但不确定如何。
我知道,当我们使用 DISPLAY 时,它会向您显示未压缩的十进制及其符号字节。
有人可以帮我解决这个问题吗? 提前致谢。
这是我使用的示例代码 -
IDENTIFICATION DIVISION.
PROGRAM-ID. V1329006.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OPDATA ASSIGN TO "OPDATA.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD OPDATA.
01 WS-OP-RECORD PIC X(20).
WORKING-STORAGE SECTION.
01 HEADER-LINE.
05 FILLER PIC X(08) VALUE 'DATE'.
05 FILLER PIC X(01).
05 FILLER PIC X(08) VALUE 'PREMIUM'.
01 DETAIL-LINE.
05 WS-DATE PIC 9(08) VALUE '20181119'.
05 FILLER PIC X(01).
05 WS-PREMIUM PIC S9(05)V9(02) comp-3.
01 WS-INPUTS.
05 WS-EARNED-PREMIUM PIC S9(05)V9(02).
05 WS-RETURN-PREMIUM PIC S9(05)V9(02).
PROCEDURE DIVISION.
OPEN OUTPUT OPDATA.
MOVE '+1234.10' TO WS-EARNED-PREMIUM
MOVE '-10.05' TO WS-RETURN-PREMIUM
COMPUTE WS-PREMIUM =
WS-EARNED-PREMIUM + WS-RETURN-PREMIUM
DISPLAY 'WS-PREMIUM='WS-PREMIUM
WRITE WS-OP-RECORD FROM HEADER-LINE
WRITE WS-OP-RECORD FROM DETAIL-LINE
CLOSE OPDATA.
GOBACK.
END PROGRAM V1329006.
我希望输出显示为
日期 PREMIUM20181119 +1224.05
【问题讨论】:
-
请包括您尝试过的源代码、给出的结果以及您的预期结果应该是什么样子。还包括足够的数据值。从上面我无法判断什么是有效的,什么是无效的。
-
我添加了我使用的示例代码,结果应该看起来像 - DATE PREMIUM 20181119 +1224.05
-
仅供参考,我刚刚修复了示例代码 sn-p 的链接。
-
嗨@VinDesai,在上面显示的代码 sn-p 中,看起来
01 DETAIL-LINE组项正在用于WRITE到输出文件。为什么不直接删除COMP-3并用数字编辑的 PICTURE 子句替换它,例如+99999.99?