我正在完成任务,我有点碰壁。我将提出这个问题非常通用,因为我主要是寻找一些提示并朝着正确的方向推进。我将获取两个输入文件,这些文件的记录没有特定的顺序,将它们分成一个输出文件,同时排除某些条目。到目前为止,我已经发现我需要对排序语句进行编码,如:
SORT ORDERS-FILE-SORT
ON ASCENDING REQUEST-DATE-S
ASCENDING CUST-NUMBER-S
ASCENDING CUST-ORDER-NUMBER-S
ASCENDING PART-NUMBER-S
USING INPUT PROCEDURE 200-SORT-AND-MERGE
GIVING ORDERS-OUT
我还没弄清楚要在输入过程中编写什么代码。
P.S。还有一件我没想到的事情。这是一个方面而不是我并不想要任何具体的这个特定问题,只是一个提示。我们应该排除REQUEST-DATE不在6个月内的记录。起初我觉得它很简单:
01 WS-DATE
05 RUN-YEAR PIC 99.
05 RUN-MONTH PIC 99.
05 RUN-DAY PIC 99.
300-TEST-DATE
ADD 6 TO RUN-MONTH
IF REQUEST-DATE > WS-DATE
但是,如果在月份中添加6个会使其超过12,则无法使用。我一直对这个问题感到头痛。感谢您的帮助,我将非常感激。
答案 0 :(得分:4)
结帐this link。它提供了几个说明如何使用COBOL排序动词的示例。这个链接应该给你很多提示。至于测试日期范围,请考虑在INPUT PROCEDURE中进行测试。请参阅基于具有特定性别代码的记录被包含/排除的链接中的MaleSort.cbl示例。
添加6个月的日期可能有点窍门。 COBOL中有许多固有的日期操作函数,但使用它们可能会超出您现在的位置,但请查看:date-of-integer和integer-of-date以及dateval 。另一方面,您可能会发现自己很容易进行算术运算。
如果您选择进行自己的日期数学运算,请尝试以下方式:
ADD 6 TO RUN-MONTH DIVIDE RUN-MONTH BY 12 GIVING WS-YEAR-ROLLOVER REMAINDER IN RUN-MONTH END-DIVIDE COMPUTE RUN-YEAR = RUN-YEAR + WS-YEAR-ROLLOVER
由于您的RUN-YEAR只有2位数字,如果WS-DATE在2000年之前,您可能不得不处理世纪展期(我不相信任何人在这一天仍会使用2位数日期和年龄)。需要注意的另一件事是天数 - 8月31日加6个月让你... 2月只有28天或29天。
玩得开心。