将固定格式的Rpg代码转换为自由格式

时间:2017-04-02 14:32:56

标签: rpgle

您好我需要根据我的公司编码标准说明将固定格式代码转换为自由格式。我甚至不明白以下是什么意思,除了一些日期的移动和转换正在发生..

C     *ISO          MOVE      BCEXDT        MDYDATE
C                   MOVE      MDYDATE       PEXPDATT
C     *ISO          MOVE      BCSTDT        MDYDATE  
C                   MOVE      MDYDATE       PSTRDAT  

以下字段定义:

BCEXDT         8S 0  
BCSTDT         8S 0
D  MDYDATE        S               D   DATFMT(*MDY)

2 个答案:

答案 0 :(得分:5)

您显示定义的两个移动操作可以像这样转换:

C     *ISO          MOVE      BCEXDT        MDYDATE
C     *ISO          MOVE      BCSTDT        MDYDATE  

MDYDate = %date(bcexdt: *ISO);
MDYDate = %date(bcstdt: *ISO);

请注意,MDYDate是一个日期字段,其内部格式与每个其他日期字段相同。 DATFMT(* MDY)关键字仅定义在加载到(或来自)字符或数字字段时默认情况下外部表示字段的方式。它还设置了允许值的限制。对于* MDY,这些限制为01-01-194012-31-2039。请注意,BCEXDTBCSTDT中的值为*ISO格式,并且这些字段的值限制不同。具体为0001-01-019999-12-31。因此,在尝试将*ISO日期分配到*MDY日期字段时,您可能会收到错误。

我没有为你转换的两个动作将通过以下方式之一完成。

  1. 如果目标是日期字段:
  2. pexpdatt = MDYDate;
    pstrdat = MDYDate;
    
    1. 如果目标是数字字段:
    2. pexpdatt = %dec(MDYDate);
      pstrdat = %dec(MDYDate);
      
      1. 如果目标是字符字段:
      2. pexpdatt = %char(MDYDate);
        pstrdat = %char(MDYDate);
        

        %dec()%char()将以*MDY格式分配日期字段,因为分配中未明确指定日期字段,日期字段为DATFMT(*MDY)

答案 1 :(得分:0)

没有其他人可以告诉你发生了什么事;没有源和目标字段的定义。

这就是为什么IBM从自由格式中贬低MOVE操作码的原因。