我需要将四字节字段的两个字节移动到一个两个字节的新字段中。
我想使用的代码:
MOVE C-SERVICE-CYE TO S-CYE.
我需要一年的最后两位数字。例如:2014年将是14
数据结构:
02 S-DATE.
10 S-MME PIC X(02).
10 FILLER PIC X(01) VALUE '/'.
10 S-DDE PIC X(02).
10 FILLER PIC X(01) VALUE '/'.
10 S-CYE PIC X(02).
第二个数据结构:
02 C-SERVICE-DATE-E.
10 C-SERVICE-CYE PIC X(04).
10 C-SERVICE-MME PIC X(02).
10 C-SERVICE-DDE PIC X(02).
答案 0 :(得分:5)
有两种相当直接的方法可以做到这一点。
一个是细分源变量声明:
02 C-SERVICE-DATE-E.
10 C-SERVICE-CYE.
15 C-SERVICE-CYE-CC PIC X(02).
15 C-SERVICE-CYE-YY PIC X(02).
10 C-SERVICE-MME PIC X(02).
10 C-SERVICE-DDE PIC X(02).
然后将MOVE语句修改为:MOVE C-SERVICE-CYE-YY TO S-CYE
另一种方法是使用参考修改:MOVE C-SERVICE-CYE (3:2) TO S-CYE
这一切都有效,因为您在此处引用的数据项是DISPLAY
类型。他们
是数字(例如COMP事物)这种技术不起作用。
答案 1 :(得分:1)
虽然我会将NealB的第一种方法用于您的实际示例,并避免引用修改(我认为它会掩盖代码,因此下一个人必须先找出(3:2)之前的内容才能“读取”代码 - 下一个人可能在几个月内成为你,还有其他方法。
10 S-CYE PIC 9(02).
现在,当您执行MOVE时,编译器将生成右对齐和左截断的代码。使用字母数字到字母数字,您可以左对齐右截断。
如果您的源字段是“计算”(二进制或压缩十进制),则可以从当前年份获得“14”。
如果源字段恰好是您需要显示的顺序,并且包含相同的数据(不是您的示例),则可以一次性完成所有操作。
01 EDITED-DATE-1 PIC XX/XX/XXXX.
01 EDITED-DATE-2 PIC XXXX/XX/XX.
现在当你将PIC X(8)日期移到上述任何一个时(取决于年份的位置),你会得到斜线。如果源是“计算”的,则PIC中的X可以更改为9。
答案 2 :(得分:1)
你可以使用: 将C-SERVICE-CYE(3:2)转移到S-CYE