3

因此,我将 mmddyyyy (01012000) 日期读入 pic x (8) 中,我想知道如何将以前的变量信息创建为 yyyymmdd (20000101) 格式的新变量。我确定必须有某种方法可以使用子字符串来做到这一点,或者什么不是?

4

3 回答 3

4

@ScottNelson 提供了答案的“使用子字符串”部分,以下是答案的“或者什么不是”部分。

01  mmddyyyy.
    05  mm     pic xx.
    05  dd     pic xx.
    05  yyyy   pic xxxx.

01  yyyymmdd.
    05  yyyy   pic xxxx.
    05  mm     pic xx.
    05  dd     pic xx.

move corresponding mmddyyyy to yyyymmdd
于 2016-04-05T19:52:52.673 回答
2

在工作存储中:

77  mmddyyyy-date pic x(8).
77  yyyymmdd-date pic x(8).

在您的程序划分逻辑中:

move mmddyyyy-date(1:2) to yyyymmdd-date(5:2)
move mmddyyyy-date(3:2) to yyyymmdd-date(7:2)
move mmddyyyy-date(5:4) to yyyymmdd-date(1:4)
于 2016-04-05T15:00:15.290 回答
2
   01  a-name-to-describe-the-source-date.
       05  antdtsd-dd                      PIC XX.
       05  antdtsd-mm                      PIC XX.
       05  antdtsd-yyyy                    PIC XXXX.

   01  a-name-to-describe-the-destination-date.
       05  antdtdd-yyyy                    PIC XXXX.
       05  antdtdd-mm                      PIC XX.
       05  antdtdd-dd                      PIC XX.

或者

   01  a-name-to-describe-the-source-date  PIC X(8).
   01  FILLER 
       REDEFINES a-name-to-describe-the-source-date.
       05  antdtsd-dd                      PIC XX.
       05  antdtsd-mm                      PIC XX.
       05  antdtsd-yyyy                    PIC XX.

   01  a-name-to-describe-the-destination-date.
   01  FILLER 
       REDEFINES a-name-to-describe-the-destination-date.
       05  antdtdd-yyyy                    PIC XX.
       05  antdtdd-mm                      PIC XX.
       05  antdtdd-dd                      PIC XX.

然后

       MOVE antdtsd-dd                     TO antdtdd-dd
       MOVE antdtsd-mm                     TO antdtdd-mm
       MOVE antdtsd-yyyy                   TO antdtdd-yyyy

首先,如果您将此称为“转换”,则您夸大了。这是对数据的简单重新排列。

其次,有很多方法可以做到这一点。你用哪种方式做?COBOL 往往由“团队”编码,如果您这样做是为了一份工作,那么您最好按照团队中其他人的方式来做。

向您展示了两种方式:引用修改和使用 CORRESPONDING(如果您在实际代码中看到它,通常会缩写为 CORR - 如果意图不输入太多,谁将输入 CORRESPONDING ......?) .

否则如何在它们之间进行选择?表现?他们可能会生成相同的代码。所以编译器不在了。人类读者的可理解性?对我来说,这在 COBOL(或任何语言)中非常重要。

参考修改的两个问题。错字?没问题,代码会编译执行。你会在测试中找到它。你不会吗?在某一点?并浪费所有的时间,直到你找到它。第二个是,(5:4)是什么意思?当有人告诉你“那个程序在做一些奇怪的事情”时,你必须首先发现年份被伪装成(5:4)。哦,还有(1:4)。太好了,您甚至还没有开始寻找程序的问题,您仍然需要检查位置和长度是否正确。好的,日期是一个微不足道的例子,但是参考修改用户大概将其应用于他们可以做的所有事情(如果不是,为什么将其应用于日期)?所以,祝阅读愉快。

哦,COBOL 没有“字符串”,它有固定长度的字段。引用修改创建字段

CORR。使用它可以节省大量打字(它存在的原因可能是由于穿孔卡片,以及许多 COBOL 程序处理输入数据和创建新输出数据的方式。穿孔卡片上的程序,因此减少打字的真正原因 -用于打孔卡程序)。

嗯,现在是现代。

假设您想使用“月份”作为下标来获取月份名称(如果年份是 2005 年)。

IF yy OF yyyymmdd EQUAL TO "2005"
    MOVE month-name-in-table ( mm OF yyyymmdd ) TO ...
END_IF

(假设 mm OF yyyymmdd 被定义为数字)。

您是否想在整个程序中分散“限定”(使用 OF 或 IN 通过引用它所属的东西来使名称唯一),以便您可以使用 CORR?

于 2016-04-07T12:17:13.697 回答