【问题标题】:Cobol - Date loopCobol - 日期循环
【发布时间】:2018-09-04 16:58:55
【问题描述】:

如何实现一个循环显示后续月份(01/01/2018、01/02/2018 等)x 次?另外,如何将日、月、年设置为变量?顺便说一句,我是 Cobol 的新手。 这是我目前写的代码

 01  YYYYMMDD         Pic 9(8).
 01  Integer-Form     Pic S9(9).
 Move Function Current-Date(1:8) to YYYYMMDD
 Compute Integer-Form = Function Integer-of-Date(YYYYMMDD)
 Add 12 to Integer-Form
 Compute YYYYMMDD = Function Date-of-Integer(Integer-Form)
 Display 'Date: ' YYYYMMDD.

编辑!

            PERFORM VARYING Number-Periods FROM 0 BY 1 UNTIL Number-Periods > 36
            DISPLAY ws-current-day, "/", ws-current-month, "/", ws-current-year
            ADD 1 TO  WS-current-month
                IF ws-current-month > 12 THEN
                   COMPUTE ws-current-month = 1
                   ADD 1 TO WS-current-year
                   END-IF
            END-PERFORM

【问题讨论】:

  • 也许有趣? COBOL has a couple nifty date functions that allow you to add or subtract from a given date.。几十年前我开始使用 COBOL - 美好的回忆。 :) 应该有一些有用的日期操作库可用。许多函数与源:simotime.com/simodate.htm
  • 查看REDEFINES 作为访问YYYYMMDD 各个部分的一种方式。
  • 伙计们!我这样做了!我编辑了问题,因此您可以在上面看到我的代码。谢谢你的帮助!你是最好的!就是这么简单
  • 好的,但我不知道如何将这些数据写入文件。有人可以帮我解决这个问题吗?
  • @Raven:请将您的完整解决方案发布为答案,将其标记为答案并编辑您的问题(删除编辑)。然后继续针对新主题开始另一个问题(再次显示您迄今为止尝试过的内容以及缺少的内容[看看SELECTWRITE]。

标签: loops date cobol


【解决方案1】:

最好用redefines和88来检查月份:

01  YYYYMMDD         PIC 9(8).
01  YYYYMMDD-R REDEFINES YYYYMMDD.
    05  YYYY         PIC 9(4).
    05  MM           PIC 9(2).
        88 VALID-MONTH VALUE 1 2 3 4 5 6
                             7 8 9 10 11 12.
    05  DD           PIC 9(2).

然后您可以在检查中使用 88(在您发现的 PERFORM VARYING 中):

  IF NOT VALID-MONTH
     ... increment year

【讨论】:

    猜你喜欢
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2020-12-26
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多