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 ***