COBOL如何对两个无序文件进行排序和合并?
我正在做一项作业,我有点撞到墙了。我将使这个问题变得非常一般,因为我主要是想寻找一些提示和正确的方向。我将取两个输入文件,它们的记录没有特定的顺序,将它们排序到一个输出文件中,同时排除某些条目。到目前为止,我发现我需要编写排序语句,如下所示:COBOL如何对两个无序文件进行排序和合并?,cobol,Cobol,我正在做一项作业,我有点撞到墙了。我将使这个问题变得非常一般,因为我主要是想寻找一些提示和正确的方向。我将取两个输入文件,它们的记录没有特定的顺序,将它们排序到一个输出文件中,同时排除某些条目。到目前为止,我发现我需要编写排序语句,如下所示: SORT ORDERS-FILE-SORT ON ASCENDING REQUEST-DATE-S ASCENDING CUST-NUMBER-S
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
我还没有弄清楚在输入过程中要编码什么
还有一件事我还没弄明白。这是一种旁注,我不想对这个问题有任何具体的解释,只是一个提示。我们应该排除请求日期不在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,则这将不起作用。这件事让我头疼。谢谢您的帮助,我将非常感激。退房。它给出了几个例子来说明如何使用COBOL排序动词。这个链接会给你很多提示。至于测试日期范围,请考虑在输入过程中执行。请参见链接中的MaleSort.cbl示例,其中根据特定的性别代码包括/排除记录
在一次约会中增加6个月可能有点小把戏。COBOL中有许多内在的日期操作函数,但是使用它们可能有点超出了您现在的位置,但是请看一下:并且可能。另一方面,你可能会发现自己做算术很容易
如果您选择自己做约会数学,请尝试以下方法:
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
将6添加到运行月
将运行月除以12
提供WS-YEAR展期
运行月的剩余部分
端分
计算运行年=运行年+WS年滚动
由于您的运行年份只有两位数,如果WS-DATE早于2000年,您可能必须处理世纪滚动(我不相信在这个日期和年龄段还会有人使用两位数的日期)。另一件事要注意的是天数-8月31日加上6个月,你可以。。。二月只有28或29天
玩得开心。退房。它给出了几个例子来说明如何使用COBOL排序动词。这个链接会给你很多提示。至于测试日期范围,请考虑在输入过程中执行。请参见链接中的MaleSort.cbl示例,其中根据特定的性别代码包括/排除记录
在一次约会中增加6个月可能有点小把戏。COBOL中有许多内在的日期操作函数,但是使用它们可能有点超出了您现在的位置,但是请看一下:并且可能。另一方面,你可能会发现自己做算术很容易
如果您选择自己做约会数学,请尝试以下方法:
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
将6添加到运行月
将运行月除以12
提供WS-YEAR展期
运行月的剩余部分
端分
计算运行年=运行年+WS年滚动
由于您的运行年份只有两位数,如果WS-DATE早于2000年,您可能必须处理世纪滚动(我不相信在这个日期和年龄段还会有人使用两位数的日期)。另一件事要注意的是天数-8月31日加上6个月,你可以。。。二月只有28或29天
玩得开心。我们实际使用的是4位数年份,但除非有理由不这样做,否则我只会在20年中硬编码。我们实际使用的是4位数年份,但我只会在20年中硬编码,除非有理由不这样做。