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 

DFSORT SUBSET to split DB2/Cobol code

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


Joined: 02 Dec 2002
Posts: 22
Topics: 9
Location: www.state.ct.us

PostPosted: Wed Dec 24, 2008 9:12 am    Post subject: DFSORT SUBSET to split DB2/Cobol code Reply with quote

Frank/Kolusu: The new SUBSET command looks very useful.

Can SUBSET split a DB2 DCLGEN so that just the Cobol copybook can be written to a file? Thank You.

Given data:
Code:
      ******************************************************************
      * DCLGEN TABLE(MYTABSE)                                           
      *        LIBRARY(TESTY.R15.VA11111C(DTMYTABS))                   *
      *        LANGUAGE(COBOL)                                         *
      *        QUOTE                                                   *
      * ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS   *
      ******************************************************************
           EXEC SQL DECLARE MYTABSE_TABLE TABLE                         
           ( COMPANY_CODE                   CHAR(3) NOT NULL,           
             MASTER_ID                      CHAR(15) NOT NULL,         
             MYTABS_AREA                    VARCHAR(3672)               
           ) END-EXEC.                                                 
      ******************************************************************
      * COBOL DECLARATION FOR TABLE VACYONRA.MYTABSE                   *
      ******************************************************************
       01  MYTABSE-TABLE.                                               
           10 COMPANY-CODE         PIC X(3).                           
           10 MASTER-ID            PIC X(15).                           
           10 MYTABS-AREA.                                             
              49 MYTABS-AREA-LEN       PIC S9(4) USAGE COMP.           
              49 MYTABS-AREA-TXT       PIC X(3672).                     
      ******************************************************************
      * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 4       *
      ******************************************************************


Desired Result file:
Code:
       01  MYTABSE-TABLE.                                               
           10 COMPANY-CODE         PIC X(3).                           
           10 MASTER-ID            PIC X(15).                           
           10 MYTABS-AREA.                                             
              49 MYTABS-AREA-LEN       PIC S9(4) USAGE COMP.           
              49 MYTABS-AREA-TXT       PIC X(3672).                     
      ******************************************************************
      * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 4       *
      ******************************************************************

_________________
Regards,
Pete.
Back to top
View user's profile Send private message
Frank Yaeger
Sort Forum Moderator
Sort Forum Moderator


Joined: 02 Dec 2002
Posts: 1618
Topics: 31
Location: San Jose

PostPosted: Wed Dec 24, 2008 10:47 am    Post subject: Reply with quote

You could use SUBSET for this if the number of DCLGEN lines was always the same. But I suspect that's not the case so I'd suggest using DFSORT's new WHEN=GROUP function instead. Assuming you want the output to contain all of the records starting with the '01' record, you could use this DFSORT job:

Code:

//S1    EXEC  PGM=ICEMAN
//SYSOUT    DD  SYSOUT=*
//SORTIN DD DSN=...  input file (FB/80)
//SORTOUT DD DSN=...  output file (FB/80)
//SYSIN    DD    *
  OPTION COPY
  INREC IFTHEN=(WHEN=GROUP,BEGIN=(8,2,CH,EQ,C'01'),
    PUSH=(81:ID=1))
  OUTFIL OMIT=(81,1,CH,EQ,C' '),BUILD=(1,80)
/*


For complete details on the new WHEN=GROUP and SUBSET functions and the other new functions available with PTF UK90013, see:

www.ibm.com/systems/support/storage/software/sort/mvs/ugpf/
_________________
Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort
Back to top
View user's profile Send private message Send e-mail Visit poster's website
pete
Beginner


Joined: 02 Dec 2002
Posts: 22
Topics: 9
Location: www.state.ct.us

PostPosted: Wed Dec 24, 2008 11:38 am    Post subject: Reply with quote

Thank you Frank. It is a succinct solution... It looks like we do not have the PTF.

Code:
ICE143I 0 BLOCKSET     COPY  TECHNIQUE SELECTED                                 
ICE250I 0 VISIT http://www.ibm.com/storage/dfsort FOR DFSORT PAPERS, EXAMPLES AN
ICE000I 1 - CONTROL STATEMENTS FOR 5694-A01, Z/OS DFSORT V1R5 - 11:16 ON WED DEC
            OPTION COPY                                                         
            INREC IFTHEN=(WHEN=GROUP,BEGIN=(8,2,CH,EQ,C'01'),                   
                               $                                               
ICE007A 0 SYNTAX ERROR                                                         
              PUSH=(81:ID=1))                                                   
              $                                                                 
ICE005A 0 STATEMENT DEFINER ERROR                                               
            OUTFIL OMIT=(81,1,CH,EQ,C' '),BUILD=(1,80)                         
ICE751I 0 C5-K26318 C6-K90007 C7-K90000 C8-K23476 E7-K24705                     
ICE052I 3 END OF DFSORT                                                         
 ********************************** End of Data ********************************

_________________
Regards,
Pete.
Back to top
View user's profile Send private message
Frank Yaeger
Sort Forum Moderator
Sort Forum Moderator


Joined: 02 Dec 2002
Posts: 1618
Topics: 31
Location: San Jose

PostPosted: Wed Dec 24, 2008 11:54 am    Post subject: Reply with quote

Yes, you do not have the PTF installed. Ask your System Programmer to install it (it's free).
_________________
Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort
Back to top
View user's profile Send private message Send e-mail Visit poster's website
kolusu
Site Admin
Site Admin


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

PostPosted: Wed Dec 24, 2008 12:08 pm    Post subject: Reply with quote

pete,

You need to consider the block starting with "cobol declaration for table" as the beginning and end with "the number of columns described" as a single group to get only the DCLGEN blocks as a cobol program may have several 01 level defined items apart from DCLGEN. Since you don't have the Latest PTF try this DFSORT/ICETOOL JCL which will give you the desired results.
Code:

//STEP0100 EXEC PGM=ICETOOL                                             
//TOOLMSG  DD SYSOUT=*                                                 
//DFSMSG   DD SYSOUT=*                                                 
//IN       DD *                                                         
      ******************************************************************
      * DCLGEN TABLE(MYTABSE)                                           
      *        LIBRARY(TESTY.R15.VA11111C(DTMYTABS))                   *
      *        LANGUAGE(COBOL)                                         *
      *        QUOTE                                                   *
      * ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS   *
      ******************************************************************
           EXEC SQL DECLARE MYTABSE_TABLE TABLE                         
           ( COMPANY_CODE                   CHAR(3) NOT NULL,           
             MASTER_ID                      CHAR(15) NOT NULL,         
             MYTABS_AREA                    VARCHAR(3672)               
           ) END-EXEC.                                                 
      ******************************************************************
      * COBOL DECLARATION FOR TABLE VACYONRA.MYTABSE                   *
      ******************************************************************
       01  MYTABSE-TABLE.                                               
           10 COMPANY-CODE         PIC X(3).                           
           10 MASTER-ID            PIC X(15).                           
           10 MYTABS-AREA.                                             
              49 MYTABS-AREA-LEN       PIC S9(4) USAGE COMP.           
              49 MYTABS-AREA-TXT       PIC X(3672).                     
      ******************************************************************
      * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 4       *
      ******************************************************************
//OUT      DD SYSOUT=*                                                 
//TOOLIN   DD *                                                         
  SPLICE FROM(IN) TO(OUT) ON(81,8,CH) KEEPNODUPS KEEPBASE -             
  WITHALL WITH(01,80) USING(CTL1)                                       
//CTL1CNTL DD *                                               
  SORT FIELDS=COPY                                             
  INREC IFTHEN=(WHEN=INIT,OVERLAY=(81:SEQNUM,8,ZD)),           
  IFTHEN=(WHEN=(9,27,CH,EQ,C'COBOL DECLARATION FOR TABLE',OR, 
                9,31,CH,EQ,C'THE NUMBER OF COLUMNS DESCRIBED'),
  OVERLAY=(81:SEQNUM,8,ZD,9,31)),                             
  IFTHEN=(WHEN=NONE,OVERLAY=(89:SEQNUM,8,ZD,                   
          81:81,8,ZD,SUB,89,8,ZD,M11,LENGTH=8))               
  OUTFIL FNAMES=OUT,BUILD=(1,80),                             
  INCLUDE=(89,27,CH,EQ,C'COBOL DECLARATION FOR TABLE')         
/*


if you had the latest PTF it would be have much easier like this
Code:

//STEP0100 EXEC PGM=ICEMAN                                             
//SYSOUT   DD SYSOUT=*                                                 
//SORTIN   DD *                                                         
      ******************************************************************
      * DCLGEN TABLE(MYTABSE)                                           
      *        LIBRARY(TESTY.R15.VA11111C(DTMYTABS))                   *
      *        LANGUAGE(COBOL)                                         *
      *        QUOTE                                                   *
      * ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS   *
      ******************************************************************
           EXEC SQL DECLARE MYTABSE_TABLE TABLE                         
           ( COMPANY_CODE                   CHAR(3) NOT NULL,           
             MASTER_ID                      CHAR(15) NOT NULL,         
             MYTABS_AREA                    VARCHAR(3672)               
           ) END-EXEC.                                                 
      ******************************************************************
      * COBOL DECLARATION FOR TABLE VACYONRA.MYTABSE                   *
      ******************************************************************
       01  MYTABSE-TABLE.                                               
           10 COMPANY-CODE         PIC X(3).                           
           10 MASTER-ID            PIC X(15).                           
           10 MYTABS-AREA.                                             
              49 MYTABS-AREA-LEN       PIC S9(4) USAGE COMP.           
              49 MYTABS-AREA-TXT       PIC X(3672).                     
      ******************************************************************
      * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 4       *
      ******************************************************************
//SORTOUT  DD SYSOUT=*                                                 
//SYSIN    DD *                                                         
  SORT FIELDS=COPY                                                     
  INREC IFTHEN=(WHEN=GROUP,                                             
  BEGIN=(9,27,CH,EQ,C'COBOL DECLARATION FOR TABLE'),                   
  END=(9,31,CH,EQ,C'THE NUMBER OF COLUMNS DESCRIBED'),                 
  PUSH=(81:ID=8,SEQ=8))                                                 
  OUTFIL INCLUDE=(81,8,ZD,GT,0,AND,89,8,ZD,GT,2),BUILD=(1,80)           
/*


Hope this helps...

Cheers
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Frank Yaeger
Sort Forum Moderator
Sort Forum Moderator


Joined: 02 Dec 2002
Posts: 1618
Topics: 31
Location: San Jose

PostPosted: Wed Dec 24, 2008 3:41 pm    Post subject: Reply with quote

As I said, "Assuming you want the output to contain all of the records starting with the '01' record, you could use this DFSORT job". If there's more to it then that, I wish the OP had provided a better description of what was wanted or indicated my assumption was incorrect. I don't know DB2 or COBOL, so I was just going by the description given.

Kolusu or Pete,

It would help people reading this thread later if you would show a more complete input example that requires the more involved solution.
_________________
Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort
Back to top
View user's profile Send private message Send e-mail Visit poster's website
kolusu
Site Admin
Site Admin


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

PostPosted: Wed Dec 24, 2008 8:45 pm    Post subject: Reply with quote

Frank,

This is how a sample program COBOL program looks like

Code:

       IDENTIFICATION DIVISION.
       PROGRAM-ID.    xxxxxx
       DATE-COMPILED.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.

            SELECT IN1-FILE
            ASSIGN TO IN1
            ORGANIZATION IS SEQUENTIAL
            FILE STATUS IS W-JNF1-FILE-STATUS.

       DATA DIVISION.
       FILE SECTION.

       FD IN1-FILE
           RECORDING MODE IS F
           LABEL RECORDS ARE STANDARD
           BLOCK CONTAINS 0 RECORDS
           DATA RECORD IS IN1-REC.

       01 IN1-REC.
          05 FILLER                   PIC X(30).
          05 INF1-KEY1                PIC X(04).
          05 INF1-KEY2                PIC X(02).
          05 INF1-KEY3                PIC S9(09) COMP.
          05 FILLER                   PIC X(20).

       WORKING-STORAGE SECTION.

       01 S-EOF-JNF1-FILE             PIC X(01)  VALUE 'N'.
       01 S-EOF-JNF2-FILE             PIC X(01)  VALUE 'N'.
       01 S-TABLE-LOAD                PIC X(01)  VALUE 'N'.
      ******************************************************************
      * DCLGEN TABLE(MYTABSE)                                           
      *        LIBRARY(TESTY.R15.VA11111C(DTMYTABS))                   *
      *        LANGUAGE(COBOL)                                         *
      *        QUOTE                                                   *
      * ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS   *
      ******************************************************************
           EXEC SQL DECLARE MYTABSE_TABLE TABLE                         
           ( COMPANY_CODE                   CHAR(3) NOT NULL,           
             MASTER_ID                      CHAR(15) NOT NULL,         
             MYTABS_AREA                    VARCHAR(3672)               
           ) END-EXEC.                                                 
      ******************************************************************
      * COBOL DECLARATION FOR TABLE VACYONRA.MYTABSE                   *
      ******************************************************************
       01  MYTABSE-TABLE.                                               
           10 COMPANY-CODE         PIC X(3).                           
           10 MASTER-ID            PIC X(15).                           
           10 MYTABS-AREA.                                             
              49 MYTABS-AREA-LEN       PIC S9(4) USAGE COMP.           
              49 MYTABS-AREA-TXT       PIC X(3672).                     
      ******************************************************************
      * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 4       *
      ******************************************************************

       01 W-SAVE-IN1-KEY.
          05 W-SAVE-KEY1              PIC S9(09) COMP.
          05 W-SAVE-KEY2              PIC X(04).
          05 W-SAVE-KEY3              PIC X(02).

      ******************************************************************
      * DCLGEN TABLE(XXXXXXX)                                           
      *        LIBRARY(TESTY.R15.VA11111C(xxxxxxxxx)                   *
      *        LANGUAGE(COBOL)                                         *
      *        QUOTE                                                   *
      * ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS   *
      ******************************************************************
           EXEC SQL DECLARE xxxxxxx_TABLE TABLE                         
           ( CODEA                          CHAR(3) NOT NULL,           
             IDB                            CHAR(15) NOT NULL,         
             AREAC                          VARCHAR(672)               
           ) END-EXEC.                                                 
      ******************************************************************
      * COBOL DECLARATION FOR TABLE VACYONRA.XXXXXXXXX                 *
      ******************************************************************
       01  XXXXXX-TABLE.                                               
           10 CODEA                    PIC X(3).                           
           10 IDB                      PIC X(15).                           
           10 AREAC.                                             
              49 AREAC-LEN             PIC S9(4) USAGE COMP.           
              49 AREAC-TXT             PIC X(672).                     
      ******************************************************************
      * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 3       *
      ******************************************************************

       01 W-JNF1-REC-COUNT            PIC S9(15) COMP-3 VALUE 0.
       01 W-JNF1-FILE-STATUS          PIC 99.


.....



Now the output desired is


Code:

      ******************************************************************
      * COBOL DECLARATION FOR TABLE VACYONRA.MYTABSE                   *
      ******************************************************************
       01  MYTABSE-TABLE.                                               
           10 COMPANY-CODE         PIC X(3).                           
           10 MASTER-ID            PIC X(15).                           
           10 MYTABS-AREA.                                             
              49 MYTABS-AREA-LEN       PIC S9(4) USAGE COMP.           
              49 MYTABS-AREA-TXT       PIC X(3672).                     
      ******************************************************************
      * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 4       *
      ******************************************************************
      ******************************************************************
      * COBOL DECLARATION FOR TABLE VACYONRA.XXXXXXXXX                 *
      ******************************************************************
       01  XXXXXX-TABLE.                                               
           10 CODEA                    PIC X(3).                           
           10 IDB                      PIC X(15).                           
           10 AREAC.                                             
              49 AREAC-LEN             PIC S9(4) USAGE COMP.           
              49 AREAC-TXT             PIC X(672).                     
      ******************************************************************
      * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 3       *
      ******************************************************************


_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
pete
Beginner


Joined: 02 Dec 2002
Posts: 22
Topics: 9
Location: www.state.ct.us

PostPosted: Tue Dec 30, 2008 9:12 pm    Post subject: Reply with quote

Frank/Kolusu:

Sorry, I was away for a few days. My company is not putting any maintenance on our system for a few weeks. Last week I wrote a CLIST to build my copybooks. I will use a provided SORT solution to maintain my new jobs. Thank you for the help.
_________________
Regards,
Pete.
Back to top
View user's profile Send private message
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