This program merges two binary files into one file using key fields.


    *******************************************************************
    ** PROGRAM: MERGE.Q                                              **
    ** PURPOSE: MERGES CURRENT DAY'S STOCK QUOTES WITH THE STOCK     **
    **          MASTER FILE.  FILES ARE ORDERED BY SYMBOL AND DATE.  **
    *******************************************************************

    * New stock file field equates
     EQUATE IFA-KEY              TO IFA1-13
       EQUATE IFA-SYMBOL         TO IFA1-6
       EQUATE IFA-DATE           TO IFA8-13
     EQUATE IFA-LAST             TO IFA15-23-N M5

    * Old master file field equates
     EQUATE IFB-KEY              TO IFB1-13
       EQUATE IFB-SYMBOL         TO IFB1-6
       EQUATE IFB-DATE           TO IFB8-13
     EQUATE IFB-LAST             TO IFB15-23-N M5

     * New master file field equates
     EQUATE OFA-SYMBOL           TO OFA1-6
     EQUATE OFA-DATE             TO OFA8-13
     EQUATE OFA-LAST             TO OFA15-23-N M5

     * Working storage field equates
     EQUATE WST-IFA-RECORDS-IN   TO WST1-4-L  * Long integer
     EQUATE WST-IFB-RECORDS-IN   TO WST5-8-L  * Long integer

     PERFORM 1000-INITIALIZATION   * INITIALIZE PROGRAM
     PERFORM 2000-MERGE-FILES      * MERGE STOCK FILES BY SYMBOL & DATE
     PERFORM 3000-TERMINATION      * TERMINATE PROGRAM
     END

1000-INITIALIZATION:
     CLS
     FASTVIDEO ON
     OPEN IFA 'NEWSTOCK.DAT' BINARY 25
     OPEN IFB 'OLDMASTR.DAT' BINARY 25
     OPEN OFA 'NEWMASTR.DAT' BINARY 25
     MOVE ZEROS     TO WST-IFA-RECORDS-IN
     MOVE ZEROS     TO WST-IFB-RECORDS-IN
     DISPLAY 'IFA FILE RECORDS PROCESSED = '
     DISPLAY 'IFB FILE RECORDS PROCESSED = '
     PERFORM 2100-READ-NEW-STOCK-FILE
     PERFORM 2200-READ-OLD-MASTER-FILE
1099-EXIT:
     EXIT

2000-MERGE-FILES:
     IF IFA IS EOF                       * EOF ON IFA FILE?
       IF IFB IS EOF                     *  AND EOF ON IFB FILE?
         EXIT.                           *  YES, EXIT THIS ROUTINE.  
     IF IFA-KEY > IFB-KEY                * IFA-KEY GREATER THAN IFB-KEY?
       MOVE IFB   TO OFA
       WRITE OFA
       PERFORM 2200-READ-OLD-MASTER-FILE
       GO TO 2000-MERGE-FILES.
     IF IFA-KEY < IFB-KEY                * IFA-KEY LESS THAN IFB-KEY?
       MOVE IFA   TO OFA
       WRITE OFA
       PERFORM 2100-READ-NEW-STOCK-FILE
       GO TO 2000-MERGE-FILES.
     PERFORM 2200-READ-OLD-MASTER-FILE   * ASSUME NEW DATA IS A CORRECTION
     GO TO 2000-MERGE-FILES
2099-EXIT:
     EXIT

2100-READ-NEW-STOCK-FILE:
     READ IFA AT EOF 2110
     ADD 1 TO WST-IFA-RECORDS-IN
     CURSOR 1 30
     DISPLAY WST-IFA-RECORDS-IN NOSKIP
     EXIT
2110 MOVE HIVALUES TO IFA-KEY
2199-EXIT:
     EXIT

2200-READ-OLD-MASTER-FILE:
     READ IFB AT EOF 2210
     ADD 1 TO WST-IFB-RECORDS-IN
     CURSOR 2 30
     DISPLAY WST-IFB-RECORDS-IN NOSKIP
     EXIT
2210 MOVE HIVALUES TO IFB-KEY
2299-EXIT:
     EXIT

3000-TERMINATION:
     CLOSE IFA
     CLOSE IFB
     CLOSE OFA
3099-EXIT:
     EXIT

***   E N D    O F    M E R G E . Q   ***

Back to home Back to home