移动4字节字段的最后2个字节?

时间:2014-01-07 19:03:07

标签: cobol

我需要将四字节字段的两个字节移动到一个两个字节的新字段中。

我想使用的代码:

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).

3 个答案:

答案 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