MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Extracting key of a file present in multiple files.

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities
View previous topic :: View next topic  
Author Message
Dibakar
Advanced


Joined: 02 Dec 2002
Posts: 700
Topics: 63
Location: USA

PostPosted: Tue May 13, 2003 9:53 am    Post subject: Extracting key of a file present in multiple files. Reply with quote

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:

Test INCAST
Code:

Dibakar1.............2212345678..........INFILEA...........
Dibakar2.............2212345678..........INFILEA...........
Dibakar .............2212345600..........INFILEA...........
Dibakar .............2212345600..........INFILEB...........
Dibakar1.............2212345600..........INFILEC...........
Dibakar2.............2212345600..........INFILEC...........


Model INCAST
Code:

Biswas  .............2212345678..........INFILEA...........
Biswas  .............2212345600..........INFILEB...........
Biswas1 .............2212345600..........INFILEC...........
Biswas2 .............2212345600..........INFILEC...........


Test INFILEA
Code:

2212345678..........
2212345600..........


Model INFILEA
Code:

2212345678..........


Test INFILEB
Code:

2212345678..........
2212345600..........


Model INFILEB
Code:

2212345600..........


Outfile will be like this

OUTFILEA
Code:

2212345678


OUTFILEB
Code:

2212345600


Thanks a lot,
Dibakar.

Correction: All input files are KSDS. Corrected the post accordingly.


Last edited by Dibakar on Wed May 14, 2003 12:07 am; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12380
Topics: 75
Location: San Jose

PostPosted: Tue May 13, 2003 1:51 pm    Post subject: Reply with quote

Dibakar,

Concatenate TEST INCAST & MODEL INCAST and sum sort on the key and file name and write 2 different files.

Code:

  SORT FIELDS=(22,10,CH,A,               $ KEY
               42,07,CH,A)               $ FILE-NAME
  SUM FIELDS=NONE
  OUTFIL FNAMES=INA,INCLUDE=(42,07,CH,EQ,C'INFILEA'),
  OUTREC=(22,10,                         $ KEY
          80:X)                          $ LENGTH EQUAL TO INFILEA
  OUTFIL FNAMES=INB,INCLUDE=(42,07,CH,EQ,C'INFILEB'),
  OUTREC=(22,10,                         $ KEY
          80:X)                          $ LENGTH EQUAL TO INFILEA


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.

Hope this helps...

cheers

kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Dibakar
Advanced


Joined: 02 Dec 2002
Posts: 700
Topics: 63
Location: USA

PostPosted: Wed May 14, 2003 12:09 am    Post subject: Reply with quote

Sorry,

All input files are KSDS, I corrected the post accordingly.

Kolusu,

I will try your suggestion.

Thanks,
Dibakar.
Back to top
View user's profile Send private message Send e-mail
Dibakar
Advanced


Joined: 02 Dec 2002
Posts: 700
Topics: 63
Location: USA

PostPosted: Mon May 26, 2003 10:35 pm    Post subject: Reply with quote

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.

5: MATCHED is non VSAM sequential file.

Code:

000100 IDENTIFICATION DIVISION.
000110 PROGRAM-ID. DIBAKAR.
000200 ENVIRONMENT DIVISION.

000300 INPUT-OUTPUT SECTION.

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.

001901    05 WS-CASTTEST-KEY   PIC X(004) VALUE X'02FA0000'.
001901    05 WS-CASTMODL-KEY   REDEFINES  WS-CASTTEST-KEY PIC X(004).

001900       88 88-NOT-CK4-KEY VALUE X'04000000' THRU X'FFFFFFFF'.

001901    05 FILLER            PIC X(146).
001900    05 WS-CASTTEST-SYS   PIC X(003).

001900       88 88-CK4-POL-FOUND          VALUE 'CK4'.

001901    05 FILLER            PIC X(005).
001900    05 WS-CASTTEST-POL   PIC X(010).
001900    05 WS-CASTMODL-POL   REDEFINES  WS-CASTTEST-POL PIC X(010).
001901    05 FILLER            PIC X(011).
001910
001700 01 WS-CASTMODL-REC      REDEFINES  WS-CASTTEST-REC PIC X(179).
001910
001700 01 WS-CK4-KEY.

001901    05 FILLER            PIC X(002) VALUE X'5B02'.
001900    05 WS-PREV-CK4-POL   PIC X(010) VALUE SPACES.
001910
001700 01 WS-NEW-CK4-POL-FOUND PIC X(001) VALUE 'N'.

001900    88 88-NEW-CK4-POL-FOUND         VALUE 'Y'.

001700 01 WS-TOTAL-POL-READ    PIC 9(004) VALUE ZEROES.

001900    88 88-ENOUGH-POL-READ           VALUE 9999.

003200 PROCEDURE DIVISION.
003210
003300     PERFORM   100-OPEN-ALL-START-CAST-FILES.
003210
003400     PERFORM   200-READ-CASTTEST
003400               THRU      500-WRITE-TEMPTEST
                     UNTIL     (88-CASTTEST-EOF)        OR
                               (88-TEMPTEST-SPACE-ERR)  OR
                               (88-NOT-CK4-KEY)         OR
                               (88-ENOUGH-POL-READ).

003500*    PERFORM   900-CLOSE-ALL-FILES.
003210
003600*    STOP RUN.
003210
003500     PERFORM   550-CLOSE-OPEN-TEMPTEST.
003210
003210     INITIALIZE     WS-PREV-CK4-POL.
003210     INITIALIZE     WS-TOTAL-POL-READ.

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.

           INITIALIZE     WS-FS-CK4TEST.

007300     IF   88-NEW-CK4-POL-FOUND
007400          READ CK4TEST
007600     END-IF.
007610
007200 400-FIND-NEW-POL-CK4MODL.

           INITIALIZE     WS-FS-CK4MODL.

007300     IF   88-CK4TEST-REC-FETCHED
007400          READ CK4MODL
007600     END-IF.
007610
007200 500-WRITE-TEMPTEST.

           INITIALIZE     WS-FS-TEMPTEST.

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.

004400     IF   88-NEW-CK4-POL-FOUND
                DELETE TEMPTEST
004801     END-IF.
008000
008100 800-WRITE-MATCHED.
008000
004400     IF   88-TEMPTEST-REC-DELETED
                WRITE FS-MATCHED-REC
006020          DISPLAY   WS-CASTTEST-SYS ' ' FS-TEMPTEST-KEY ' '
006020                    WS-FS-MATCHED
004801     END-IF.
008000
004300 900-CLOSE-ALL-FILES.

004400     CLOSE CASTTEST CASTMODL CK4TEST CK4MODL TEMPTEST MATCHED.


This is my first file handling in COBOL. Please let me know if any improvisation is possible.

Regards,
Dibakar.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
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


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group