2012-02-22 84 views
1

我正在做一個任務,我有點碰壁。我將會把這個問題變得非常通用,因爲我主要是在尋找一些提示和正確的方向。我需要兩個輸入文件,這些文件的記錄沒有特定的順序,將它們排序到一個輸出文件中,同時排除某些條目。到目前爲止,我想通了,我需要編寫排序之類的語句:COBOL如何排序和合並兩個無序文件?

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.還有一件事我沒有想到。這是一個方面notE,我不希望任何具體的問題,只是一個提示。我們應該排除不在6個月內的REQUEST-DATE的記錄。然而在加入6月份會導致它去超過12,這將無法正常工作的情況下

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 

:起初我一直以爲是那樣簡單。我一直在頭疼這件事。感謝任何幫助,我將非常感激。

回答

4

結帳this link。它給出了幾個例子來說明如何使用COBOL排序動詞。這個鏈接應該給你足夠的提示。至於測試日期範圍,請考慮在輸入過程中進行。根據具有特定性別代碼的鏈接查看包含/排除記錄的鏈接中的MaleSort.cbl示例。

給日期添加6個月可能有一些小技巧。在COBOL中有許多固有的日期操作函數,但使用它們可能會超出您目前的位置,但請看看:date-of-integerinteger-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年只有2位長,你可能不得不面對世紀側翻如果WS- DATE在2000年之前(我不能相信任何人在這個時代仍然會使用兩位數的日期)。另外需要注意的是天數 - 8月31日加6個月讓你到......二月只有28或29天。

玩得開心。

+0

我們實際上會使用4位數的年份,但我只是想在20位硬編碼,除非有沒有理由不這樣做。 – Shane 2012-02-23 06:18:51