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年中硬编码,除非有理由不这样做。