Joined: 02 Dec 2002 Posts: 700 Topics: 63 Location: USA
Posted: Tue May 13, 2003 9:53 am Post subject: Extracting key of a file present in multiple files.
I have KSDS VSAM file (INCAST) where each record contains an external VSAM KSDS file name and a key of external file name, all in fixed position and of fixed length.
I am interested in only two external file names, INFILEA and INFILEB.
Each file is present in both test and model regions. Now I wan't to extract all keys of INFILEA which are present in both Test and Model INFILEA as well as in INCAST and write them in OUTFILEA, without any duplication. Similarly for INFILEB. But not for any other INFILEs.
All files are huge, contains about 10 to 100 thousand records. But matching records are not expected to be more than 10 thousand.
Below is a sample of input and output.
Please tell me how to proceed with this.
Input files are like this:
now take the file INA and concatenate with TEST INFILEA & MODEL INFILEA and use SELECT verb to get the first dup
Code:
SELECT FROM(CON) ON(1,10,CH) FIRST
Similarly take the file INB and concatenate with TEST INFILEB & MODEL INFILEB and use SELECT verb to get the first dup using the same select verb as shown above.
Joined: 02 Dec 2002 Posts: 700 Topics: 63 Location: USA
Posted: Mon May 26, 2003 10:35 pm Post subject:
The day I posted this question the scope of our project got reduced by 60%, so I had to for only one file name to work with. Next day I was told I will be out of project so there was not much interest left to do this. Again, another day, my new boss asked me to practice some VSAM-COBOL so that's what I finally did.
I am providing the code as it might be tailored for similar purpose.
Logic is:
1: Select common pols from CASTTEST, CK4TEST and CK4MODL into TEMPTEST.
2: Select common pols from TEMPTEST and CASTMODL into MATCHED
3: Pols are key (or part of key) in CK4TEST, CK4MODL and TEMPTEST.
4: CASTTEST and CASTMODL have different keys and pols are extracted by reading the files dyanamically.
000400 FILE-CONTROL.
000710
000710* DYNAMIC KSDS INPUT FROM CAST TEST FROM CK4 POLS
000500 SELECT CASTTEST
ASSIGN TO CASTTEST
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
000610 RECORD KEY IS FS-CASTTEST-KEY
000700 FILE STATUS IS WS-FS-CASTTEST.
000710
000710* DYNAMIC KSDS INPUT FROM CAST MODEL FROM CK4 POLS
000500 SELECT CASTMODL
ASSIGN TO CASTMODL
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
000610 RECORD KEY IS FS-CASTMODL-KEY
000700 FILE STATUS IS WS-FS-CASTMODL.
000710
000710* RANDOM KSDS INPUT FROM CK4 TEST
000500 SELECT CK4TEST
ASSIGN TO CK4TEST
ORGANIZATION IS INDEXED
000610 ACCESS MODE IS RANDOM
000610 RECORD KEY IS FS-CK4TEST-KEY
000700 FILE STATUS IS WS-FS-CK4TEST.
000710
000710* RANDOM KSDS INPUT FROM CK4 MODEL
000500 SELECT CK4MODL
ASSIGN TO CK4MODL
ORGANIZATION IS INDEXED
000610 ACCESS MODE IS RANDOM
000610 RECORD KEY IS FS-CK4MODL-KEY
000700 FILE STATUS IS WS-FS-CK4MODL.
000710
000710* MATCHED KSDS OUTPUT FROM CASTTEST, CK4TEST AND CK4MODL
000800 SELECT TEMPTEST
ASSIGN TO TEMPTEST
ORGANIZATION IS INDEXED
000610 ACCESS MODE IS RANDOM
000610 RECORD KEY IS FS-TEMPTEST-KEY
000700 FILE STATUS IS WS-FS-TEMPTEST.
001010
000710* MATCHED NON VSAM SEQ OUTPUT FROM CASTMODL AND TEMPTEST
000800 SELECT MATCHED
ASSIGN TO MATCHED
ORGANIZATION IS SEQUENTIAL
000610 ACCESS MODE IS SEQUENTIAL
000700 FILE STATUS IS WS-FS-MATCHED.
001010
001100 DATA DIVISION.
001010
001200 FILE SECTION.
001010
001300 FD CASTTEST
001400 LABEL RECORDS ARE STANDARD
001500 BLOCK CONTAINS 0 RECORDS.
001010
* THIS WILL BE READ INTO WS-CASTTEST-REC
001700 01 FS-CASTTEST-REC.
001800 05 FS-CASTTEST-KEY PIC X(0004).
001901 05 FILLER PIC X(0175).
001910
001300 FD CASTMODL
001400 LABEL RECORDS ARE STANDARD
001500 BLOCK CONTAINS 0 RECORDS.
001010
* THIS WILL BE READ INTO WS-CASTMODL-REC
001700 01 FS-CASTMODL-REC.
001800 05 FS-CASTMODL-KEY PIC X(0004).
001901 05 FILLER PIC X(0175).
001910
001300 FD CK4TEST
001400 LABEL RECORDS ARE STANDARD
001500 BLOCK CONTAINS 0 RECORDS.
001010
001700 01 FS-CK4TEST-REC.
001901 05 FILLER PIC X(0002).
001800 05 FS-CK4TEST-KEY PIC X(0012).
001901 05 FILLER PIC X(13986).
001910
001300 FD CK4MODL
001400 LABEL RECORDS ARE STANDARD
001500 BLOCK CONTAINS 0 RECORDS.
001010
001700 01 FS-CK4MODL-REC.
001901 05 FILLER PIC X(0002).
001800 05 FS-CK4MODL-KEY PIC X(0012).
001901 05 FILLER PIC X(13986).
001910
002000 FD TEMPTEST
002100 LABEL RECORDS ARE STANDARD
002200 BLOCK CONTAINS 0 RECORDS.
002300
002400 01 FS-TEMPTEST-REC.
002500 05 FS-TEMPTEST-KEY PIC X(0010).
002700
002000 FD MATCHED
002100 LABEL RECORDS ARE STANDARD
002200 BLOCK CONTAINS 0 RECORDS.
002300
002400 01 FS-MATCHED-REC PIC X(0010).
002700
002800 WORKING-STORAGE SECTION.
002700
002900 01 WS-FILE-STATUS-FIELDS.
002700
002900 05 WS-FS-CASTTEST PIC X(02) VALUE ZEROES.
002900 88 88-CASTTEST-EOF VALUE '10'.
002900 05 WS-FS-CASTMODL PIC X(02) VALUE ZEROES.
002900 88 88-CASTMODL-EOF VALUE '10'.
002900 05 WS-FS-CK4TEST PIC X(02) VALUE 'OK'.
002900 88 88-CK4TEST-REC-FETCHED VALUE '00' THRU '04'.
002900 05 WS-FS-CK4MODL PIC X(02) VALUE 'OK'.
002900 88 88-CK4MODL-REC-FETCHED VALUE '00' THRU '04'.
002900 05 WS-FS-TEMPTEST PIC X(02) VALUE 'OK'.
002900 88 88-TEMPTEST-REC-FETCHED VALUE ZEROES.
002900 88 88-TEMPTEST-REC-DELETED VALUE ZEROES.
002900 88 88-TEMPTEST-SPACE-ERR VALUE '24'.
002900 05 WS-FS-MATCHED PIC X(02) VALUE ZEROES.
002900 88 88-MATCHED-SPACE-ERR VALUE '24'.
003100
001700 01 WS-CASTTEST-REC.
003400 PERFORM 600-READ-CASTMODL
003400 THRU 800-WRITE-MATCHED
UNTIL (88-CASTMODL-EOF) OR
(88-MATCHED-SPACE-ERR) OR
(88-NOT-CK4-KEY) OR
(88-ENOUGH-POL-READ).
003210
003500 PERFORM 900-CLOSE-ALL-FILES.
003210
003600 STOP RUN.
003700
004300 100-OPEN-ALL-START-CAST-FILES.
004310
004320 OPEN INPUT CASTTEST CASTMODL CK4TEST CK4MODL
OUTPUT TEMPTEST MATCHED.
004330
IF WS-FILE-STATUS-FIELDS > ZEROES
DISPLAY 'FILE OPEN ERROR'
DISPLAY 'CASTTEST OPEN RC = ' WS-FS-CASTTEST
DISPLAY 'CASTMODL OPEN RC = ' WS-FS-CASTMODL
DISPLAY 'CK4TEST OPEN RC = ' WS-FS-CK4TEST
DISPLAY 'CK4MODL OPEN RC = ' WS-FS-CK4MODL
DISPLAY 'TEMPTEST OPEN RC = ' WS-FS-TEMPTEST
DISPLAY 'MATCHED OPEN RC = ' WS-FS-MATCHED
PERFORM 900-CLOSE-ALL-FILES
003600 STOP RUN
END-IF.
003210 MOVE WS-CASTTEST-KEY TO FS-CASTTEST-KEY.
003210 START CASTTEST KEY IS > FS-CASTTEST-KEY.
004330
003210 MOVE WS-CASTMODL-KEY TO FS-CASTMODL-KEY.
003210 START CASTMODL KEY IS > FS-CASTMODL-KEY.
003210
005900 200-READ-CASTTEST.
006000
006000 ADD 1 TO WS-TOTAL-POL-READ.
006010 READ CASTTEST NEXT INTO WS-CASTTEST-REC.
006020
INITIALIZE WS-NEW-CK4-POL-FOUND
006102 IF (88-CK4-POL-FOUND) AND
006103 (WS-CASTTEST-POL NOT = WS-PREV-CK4-POL)
006103 MOVE WS-CASTTEST-POL TO WS-PREV-CK4-POL
FS-TEMPTEST-KEY
006103 MOVE WS-CK4-KEY TO FS-CK4TEST-KEY
FS-CK4MODL-KEY
006104 SET 88-NEW-CK4-POL-FOUND TO TRUE
006150 END-IF.
006020
007200 300-FIND-NEW-POL-CK4TEST.
007300 IF 88-CK4MODL-REC-FETCHED
007400 WRITE FS-TEMPTEST-REC
007600 END-IF.
007610
004300 550-CLOSE-OPEN-TEMPTEST.
004310
004320 CLOSE TEMPTEST.
004320 OPEN I-O TEMPTEST.
004330
IF WS-FS-TEMPTEST > ZEROES
DISPLAY 'FILE OPEN ERROR'
DISPLAY 'TEMPTEST OPEN RC = ' WS-FS-TEMPTEST
PERFORM 900-CLOSE-ALL-FILES
003600 STOP RUN
END-IF.
005900 600-READ-CASTMODL.
006000
006000 ADD 1 TO WS-TOTAL-POL-READ.
006010 READ CASTMODL NEXT INTO WS-CASTMODL-REC.
006020
INITIALIZE WS-NEW-CK4-POL-FOUND
006102 IF (88-CK4-POL-FOUND) AND
006103 (WS-CASTMODL-POL NOT = WS-PREV-CK4-POL)
006103 MOVE WS-CASTMODL-POL TO WS-PREV-CK4-POL
006103 MOVE WS-CASTMODL-POL TO FS-TEMPTEST-KEY
FS-MATCHED-REC
006104 SET 88-NEW-CK4-POL-FOUND TO TRUE
006150 END-IF.
006020
008100 700-DELETE-TEMPTEST.
008000
INITIALIZE WS-FS-TEMPTEST.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum