Copy partial record after a string in a record using SORT.



IBM's flagship sort product DFSORT for sorting, merging, copying, data manipulation and reporting. Includes ICETOOL and ICEGENER

Re: Copy partial record after a string in a record using SOR

Postby sergeyken » Mon May 15, 2023 5:07 pm

Esmayeelhusen wrote:There will not be X'0908' before 34 bytes in the input record.


This is what you've said:
5th and 9th position X'0908' is present, in our SORT card first occurrence is selected and as there is no 01 ...to 11 etc this record is not selected. However, in 17the position another X'0908' is present and a valid bytes after that.


Esmayeelhusen wrote:I want 158 bytes (%01) to be parsed after X'0908' If sufficed with '01 - '11'. as per BUILD CARD shown (BUILD=(6,5,18,5,31,2,%01)).

Once again: what if the valid combination X'0908'+С'nn' appears more than once within a single record?
1) is only the first valid one required? Or
2) all valid parts to be concatenated one by one, 158 bytes each? Or
3) each valid part is extracted into a separate output record?

Besides of that:
What is the maximum number of X'0908' occurrences within a single record?
Javas and Pythons come and go, but JCL and SORT stay forever.
User avatar
sergeyken
 
Posts: 408
Joined: Wed Jul 24, 2019 10:12 pm
Has thanked: 6 times
Been thanked: 40 times

Re: Copy partial record after a string in a record using SOR

Postby sergeyken » Tue May 16, 2023 1:03 am

I supposed that multiple instances of correct X'0908' must go into different copies of output records. If so, the solution might be as follows

//*====================================================================
//SORT0908 EXEC PGM=ICETOOL                                          
//TOOLMSG  DD  SYSOUT=*                                                
//DFMSG    DD  SYSOUT=*                                                
//*                                                                    
//SYMNAMES DD  *                                                      
Input1,6,5,CH                                                          
Input2,18,5,CH                                                        
Input3,31,2,CH                                                        
FixedPart,1,12,CH                                                      
NewCode1,13,2,CH                                                      
NewData1,=,158,CH                                                      
NewCode2,*,2,CH                                                        
NewData2,=,158,CH                                                      
NewCode3,*,2,CH                                                        
NewData3,=,158,CH                                                      
NewCode4,*,2,CH                                                        
NewData4,=,158,CH                                                      
NewCode5,*,2,CH                                                        
NewData5,=,158,CH                                                      
NewCode6,*,2,CH                                                        
NewData6,=,158,CH                                                      
NewCode7,*,2,CH                                                        
NewData7,=,158,CH                                                      
NewCode8,*,2,CH                                                        
NewData8,=,158,CH                                                              
NewCode9,*,2,CH                                                                
NewData9,=,158,CH                                                              
NewCode10,*,2,CH                                                                
NewData10,=,158,CH                                                              
NewCode11,*,2,CH                                                                
NewData11,=,158,CH                                                              
//*                                                                            
//SORTIN   DD  *                                                                
?????AAAAA???????BBBBB????????CC??  01-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
?????AAAAA???????BBBBB????????CC??  01~1~1~1~1~1~1~1~1~  02~2~2~2~2~2~2~2~2~2~2~
?????AAAAA???????BBBBB????????CC??  XX~B~B~B~B~B~B~B~B~  03~3~3~3~3~3~3~3~3~3~3~
?????AAAAA???????BBBBB????????CC??  X1-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD  
?????AAAAA???????BBBBB????????CC??   02-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-
?????AAAAA???????BBBBB????????CC??   X2-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??    03-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3
?????AAAAA???????BBBBB????????CC??    X3-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??     04-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-
?????AAAAA???????BBBBB????????CC??     X4-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BA
?????AAAAA???????BBBBB????????CC??      05-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5
?????AAAAA???????BBBBB????????CC??      X5-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-B
?????AAAAA???????BBBBB????????CC??       06-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-
?????AAAAA???????BBBBB????????CC??       X6-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-
?????AAAAA???????BBBBB????????CC??        07-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7
?????AAAAA???????BBBBB????????CC??        X7-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??         08-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-
?????AAAAA???????BBBBB????????CC??         X8-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BA
?????AAAAA???????BBBBB????????CC??          09-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9
?????AAAAA???????BBBBB????????CC??          X9-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-B
?????AAAAA???????BBBBB????????CC??           10-10-10-10-10-10-10-10-10-10-10-10
?????AAAAA???????BBBBB????????CC??           X0-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-
?????AAAAA???????BBBBB????????CC??            11-11-11-11-11-11-11-11-11-11-11-1
?????AAAAA???????BBBBB????????CC??            1X-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??||01-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
?????AAAAA???????BBBBB????????CC??||X1-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD  
?????AAAAA???????BBBBB????????CC?? ||02-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-
?????AAAAA???????BBBBB????????CC?? ||X2-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??  ||03-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3
?????AAAAA???????BBBBB????????CC??  ||X3-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??   ||04-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-
?????AAAAA???????BBBBB????????CC??   ||X4-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BA
?????AAAAA???????BBBBB????????CC??    ||05-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5
?????AAAAA???????BBBBB????????CC??    ||X5-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-B
?????AAAAA???????BBBBB????????CC??     ||06-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-
?????AAAAA???????BBBBB????????CC??     ||X6-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-
?????AAAAA???????BBBBB????????CC??      ||07-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7
?????AAAAA???????BBBBB????????CC??      ||X7-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??       ||08-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-
?????AAAAA???????BBBBB????????CC??       ||X8-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BA
?????AAAAA???????BBBBB????????CC??        ||09-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9
?????AAAAA???????BBBBB????????CC??        ||X9-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-B
?????AAAAA???????BBBBB????????CC??         ||10-10-10-10-10-10-10-10-10-10-10-10
?????AAAAA???????BBBBB????????CC??         ||X0-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-
?????AAAAA???????BBBBB????????CC??          ||11-11-11-11-11-11-11-11-11-11-11-1
?????AAAAA???????BBBBB????????CC??          ||1X-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
//*                                                                            
//C01      DD  SPACE=(TRK,(50,50))                                              
//C02      DD  SPACE=(TRK,(50,50))                                              
//C03      DD  SPACE=(TRK,(50,50))                                              
//C04      DD  SPACE=(TRK,(50,50))                                              
//C05      DD  SPACE=(TRK,(50,50))                                              
//C06      DD  SPACE=(TRK,(50,50))                                              
//C07      DD  SPACE=(TRK,(50,50))                                              
//C08      DD  SPACE=(TRK,(50,50))                                              
//C09      DD  SPACE=(TRK,(50,50))                                              
//C10      DD  SPACE=(TRK,(50,50))                                              
//C11      DD  SPACE=(TRK,(50,50))                                              
//*                                                                            
//SORTOUT  DD  SYSOUT=*                                                        
//*--------------------------------------------------------------------        
//TOOLIN   DD  *                                                                
 COPY  FROM(SORTIN)       TO(C01)       USING(SPLT)                            
 MERGE FROM(C01,C02,C03,C04,C05,C06,C07,C08,C09,C10,C11) -                      
       TO(SORTOUT) USING(MRGE)                                                  
//*                                                                            
//SPLTCNTL DD  *                                                        
 INCLUDE COND=(1,80,SS,EQ,X'0908')      GET RID IF THOSE NOT X'0908'    
 INREC  PARSE=(%=(STARTAT=X'0908'),                                      
               %01=(SUBPOS=3,                                            
                    STARTAFT=X'0908',                                    
                    ENDBEFR=X'0908',                                    
                    FIXLEN=158,                                          
                    REPEAT=11)),                                        
        BUILD=(Input1,                                                  
               Input2,                                                  
               Input3,                                                  
        NewData1:%01,                   WHOLE PART AFTER X'0908' #1      
        NewData2:%02,                   WHOLE PART AFTER X'0908' #2      
        NewData3:%03,                   WHOLE PART AFTER X'0908' #3      
        NewData4:%04,                   WHOLE PART AFTER X'0908' #4      
        NewData5:%05,                   WHOLE PART AFTER X'0908' #5      
        NewData6:%06,                   WHOLE PART AFTER X'0908' #6      
        NewData7:%07,                   WHOLE PART AFTER X'0908' #7      
        NewData8:%08,                   WHOLE PART AFTER X'0908' #8      
        NewData9:%09,                   WHOLE PART AFTER X'0908' #9      
        NewData10:%10,                  WHOLE PART AFTER X'0908' #10    
        NewData11:%11)                  WHOLE PART AFTER X'0908' #11    
                                                                         
 SORT FIELDS=COPY                                                        
                                                                         
* split 11 possible fields into intermediate datasets              
 OUTFIL FNAMES=C01,                                                
        INCLUDE=(NewCode1,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',
                               C'07',C'08',C'09',C'10',C'11')),    
        BUILD=(FixedPart,NewData1)                                
 OUTFIL FNAMES=C02,                                                
        INCLUDE=(NewCode2,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',
                               C'07',C'08',C'09',C'10',C'11')),    
        BUILD=(FixedPart,NewData2)                                
 OUTFIL FNAMES=C03,                                                
        INCLUDE=(NewCode3,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',
                               C'07',C'08',C'09',C'10',C'11')),    
        BUILD=(FixedPart,NewData3)                                
 OUTFIL FNAMES=C04,                                                
        INCLUDE=(NewCode4,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',
                               C'07',C'08',C'09',C'10',C'11')),    
        BUILD=(FixedPart,NewData4)                                
 OUTFIL FNAMES=C05,                                                
        INCLUDE=(NewCode5,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',
                               C'07',C'08',C'09',C'10',C'11')),    
        BUILD=(FixedPart,NewData5)                                
 OUTFIL FNAMES=C06,                                                
        INCLUDE=(NewCode6,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',
                               C'07',C'08',C'09',C'10',C'11')),    
        BUILD=(FixedPart,NewData6)                                
 OUTFIL FNAMES=C07,                                                        
        INCLUDE=(NewCode7,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',        
                               C'07',C'08',C'09',C'10',C'11')),            
        BUILD=(FixedPart,NewData7)                                        
 OUTFIL FNAMES=C08,                                                        
        INCLUDE=(NewCode8,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',        
                               C'07',C'08',C'09',C'10',C'11')),            
        BUILD=(FixedPart,NewData8)                                        
 OUTFIL FNAMES=C09,                                                        
        INCLUDE=(NewCode9,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',        
                               C'07',C'08',C'09',C'10',C'11')),            
        BUILD=(FixedPart,NewData9)                                        
 OUTFIL FNAMES=C10,                                                        
        INCLUDE=(NewCode10,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',      
                               C'07',C'08',C'09',C'10',C'11')),            
        BUILD=(FixedPart,NewData10)                                        
 OUTFIL FNAMES=C11,                                                        
        INCLUDE=(NewCode11,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',      
                               C'07',C'08',C'09',C'10',C'11')),            
        BUILD=(FixedPart,NewData11)                                        
//*                                                                        
//MRGECNTL DD  *                                                          
 MERGE FIELDS=(NewCode1,A)                                                
//*                                                                        
//*====================================================================    


********************************* TOP OF DATA ************************
AAAAABBBBBCC01-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1              
AAAAABBBBBCC01~1~1~1~1~1~1~1~1~                                      
AAAAABBBBBCC02-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-              
AAAAABBBBBCC02~2~2~2~2~2~2~2~2~2~2~                                  
AAAAABBBBBCC03~3~3~3~3~3~3~3~3~3~3~                                  
AAAAABBBBBCC03-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3                
AAAAABBBBBCC04-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-                
AAAAABBBBBCC05-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5                  
AAAAABBBBBCC06-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-                  
AAAAABBBBBCC07-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7                    
AAAAABBBBBCC08-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-                    
AAAAABBBBBCC09-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9                      
AAAAABBBBBCC10-10-10-10-10-10-10-10-10-10-10-10                      
AAAAABBBBBCC11-11-11-11-11-11-11-11-11-11-11-1                        
******************************** BOTTOM OF DATA **********************
Javas and Pythons come and go, but JCL and SORT stay forever.
User avatar
sergeyken
 
Posts: 408
Joined: Wed Jul 24, 2019 10:12 pm
Has thanked: 6 times
Been thanked: 40 times

Re: Copy partial record after a string in a record using SOR

Postby Esmayeelhusen » Tue May 16, 2023 8:27 am

Hi Sergeyken,
Thanks you very much for your reply.
Please find my answers for your questions.
Also I will try the CODE provided and let you know. Thanks.

Sergeyken wrote:
Once again: what if the valid combination X'0908'+С'nn' appears more than once within a single record?
1) is only the first valid one required? Or
2) all valid parts to be concatenated one by one, 158 bytes each? Or
3) each valid part is extracted into a separate output record?

Besides of that:
What is the maximum number of X'0908' occurrences within a single record?


Once again: what if the valid combination X'0908'+С'nn' appears more than once within a single record?
Husen >> Only one valid combination X'0908'+С'nn' appears in the record.
1) is only the first valid one required? Or
Husen >> Yes, the first valid is only valid combination.
2) all valid parts to be concatenated one by one, 158 bytes each? Or
Husen >> Only first occurrence should be considered.
3) each valid part is extracted into a separate output record?
Husen >> No, Record should not divided into multiple record.

Thanks
Husen
Esmayeelhusen
 
Posts: 13
Joined: Thu May 04, 2023 1:57 pm
Has thanked: 3 times
Been thanked: 0 time

Re: Copy partial record after a string in a record using SOR

Postby Esmayeelhusen » Tue May 16, 2023 2:12 pm

Hi Sergeyken,

Thank you very much. Your help is much appreciated.
I have build the SORT CARD to achieve the goal.
The only drawback is it can check only the 8 occurrences of X'0908' in a record. We need to repeat the code to cover more occurrences of STRING in a record.
I have taken ideas from your suggestions to build this. Thanks.

Command ===>                                                                                                      Scroll ===> CSR
000051 //SYSOUT   DD SYSOUT=*
000052 //SYSPRINT DD SYSOUT=*
000053 //SYSIN    DD *
000054   SORT FIELDS=COPY
000055   INCLUDE COND=(1,27990,SS,EQ,X'0908')                                 INCLUDE ALL RECORDS HAVING X'0908'
000056   INREC PARSE=(%01=(STARTAFT=X'0908',ENDBEFR=X'0908',FIXLEN=161),      BUILD 161 BYTES AFTER EACH OCCURRENCE OF X'0908'
000057         %02=(SUBPOS=2,STARTAFT=X'0908',ENDBEFR=X'0908',FIXLEN=161),
000058         %03=(SUBPOS=2,STARTAFT=X'0908',ENDBEFR=X'0908',FIXLEN=161),
000059         %04=(SUBPOS=2,STARTAFT=X'0908',ENDBEFR=X'0908',FIXLEN=161),
000060         %05=(SUBPOS=2,STARTAFT=X'0908',ENDBEFR=X'0908',FIXLEN=161),
000061         %06=(SUBPOS=2,STARTAFT=X'0908',ENDBEFR=X'0908',FIXLEN=161),
000062         %07=(SUBPOS=2,STARTAFT=X'0908',ENDBEFR=X'0908',FIXLEN=161),
000063         %08=(SUBPOS=2,STARTAFT=X'0908',ENDBEFR=X'0908',FIXLEN=161)),
000064    BUILD=(6,5,                                                       BUILD RECORD AND STACK 161 BYTES AFTER EACH X'0908'.
000065           8,5,
000066           31,2,
000067           %01,%02,%03,%04,%05,%06,%07,%08)
000068 /*
000069 //*
000070 //*********************************************************************
000071 //*  JS030 - PICK THE DAT FROM REQUIRED POSITIONS.
000072 //*********************************************************************
000073 //*
000074 //JS030    EXEC PGM=SORT,COND=(0,NE)
- - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -   3 Line(s) not Displayed
000078 //            DISP=(NEW,CATLG,DELETE),
000079 //            UNIT=DISK,
000080 //            SPACE=(CYL,(01,2),RLSE),
000081 //            LRECL=1500,RECFM=FB,DSORG=PS
000082 //*
000083 //SYSOUT   DD SYSOUT=*
000084 //SYSPRINT DD SYSOUT=*
000085 //SYSIN    DD *
000086  SORT FIELDS=COPY
000087  INCLUDE COND=(13,2,CH,EQ,L(C'01',C'02',C'03',C'04',C'05',C'06',  INCLUDE RECORDS WHICH ARE HAVING SUFFIX
000088                             C'07',C'08',C'09',C'10',C'11'),OR,    '01 TO '11' 2 BYTES.
000089               174,2,CH,EQ,L(C'
01',C'02',C'03',C'04',C'05',C'06',
000090                             C'
07',C'08',C'09',C'10',C'11'),OR,
000091               335,2,CH,EQ,L(C'
01',C'02',C'03',C'04',C'05',C'06',
000092                             C'
07',C'08',C'09',C'10',C'11'),OR,
000093               496,2,CH,EQ,L(C'
01',C'02',C'03',C'04',C'05',C'06',
000094                             C'
07',C'08',C'09',C'10',C'11'),OR,
000095               657,2,CH,EQ,L(C'
01',C'02',C'03',C'04',C'05',C'06',
000096                             C'
07',C'08',C'09',C'10',C'11'),OR,
000097               818,2,CH,EQ,L(C'
01',C'02',C'03',C'04',C'05',C'06',
000098                             C'
07',C'08',C'09',C'10',C'11'),OR,
000099               979,2,CH,EQ,L(C'
01',C'02',C'03',C'04',C'05',C'06',
000100                             C'
07',C'08',C'09',C'10',C'11'))
000101   INREC IFTHEN=(WHEN=(13,2,CH,EQ,L(C'
01',                        CHECK IF SUFFIX BYTES PRESENT AT 13TH BYTE FIRST OCCURRENCE
000102                                 C'
02',                           IF YES THEN BUILD THE RECORD, IF NO THEN GO TO NXT IFTHEN
000103                                 C'
03',
000104                                 C'
04',
000105                                 C'
05',
000106                                 C'
06',
000107                                 C'
07',
000108                                 C'
08',
000109                                 C'
09',
000110                                 C'
10',
000111                                 C'
11')),
000112          PARSE=(%01=(ABSPOS=13,FIXLEN=161)),                    PICK THE DATA AFTER VALID X'
0908'
000113          BUILD=(1,12,%01)),                                     BUILD THE RECORD.
000114          IFTHEN=(WHEN=(174,2,CH,EQ,L(C'
01',                     CHECK IF SUFFIX BYTES PRESENT AT 1174 BYTE 2ND OCCURRENCE
000115                                  C'
02',
000116                                  C'
03',
000117                                  C'
04',
000118                                  C'
05',
000119                                  C'
06',
000120                                  C'
07',
000121                                  C'
08',
000122                                  C'
09',
000123                                  C'
10',
000124                                  C'
11')),
000125           PARSE=(%02=(ABSPOS=174,FIXLEN=161)),
000126           BUILD=(1,12,%02)),
000127           IFTHEN=(WHEN=(335,2,CH,EQ,L(C'
01',
000128                                   C'
02',
000129                                   C'
03',
000130                                   C'
04',
000131                                   C'
05',
000132                                   C'
06',
000133                                   C'
07',
000134                                   C'
08',
000135                                   C'
09',
000136                                   C'
10',
000137                                   C'
11')),
000138            PARSE=(%03=(ABSPOS=335,FIXLEN=161)),
000139            BUILD=(1,12,%03)),
000140            IFTHEN=(WHEN=(496,2,CH,EQ,L(C'
01',
000141                                    C'
02',
000142                                    C'
03',
000143                                    C'
04',
000144                                    C'
05',
000145                                    C'
06',
000146                                    C'
07',
000147                                    C'
08',
000148                                    C'
09',
000149                                    C'
10',
000150                                    C'
11')),
000151             PARSE=(%04=(ABSPOS=496,FIXLEN=161)),
000152             BUILD=(1,12,%04)),
000153             IFTHEN=(WHEN=(657,2,CH,EQ,L(C'
01',
000154                                     C'
02',
000155                                     C'
03',
000156                                     C'
04',
000157                                     C'
05',
000158                                     C'
06',
000159                                     C'
07',
000160                                     C'
08',
000161                                     C'
09',
000162                                     C'
10',
000163                                     C'
11')),
000164              PARSE=(%05=(ABSPOS=657,FIXLEN=161)),
000165              BUILD=(1,12,%05)),
000166              IFTHEN=(WHEN=(818,2,CH,EQ,L(C'
01',
000167                                      C'
02',
000168                                      C'
03',
000169                                      C'
04',
000170                                      C'
05',
000171                                      C'
06',
000172                                      C'
07',
000173                                      C'
08',
000174                                      C'
09',
000175                                      C'
10',
000176                                      C'
11')),
000177               PARSE=(%06=(ABSPOS=818,FIXLEN=161)),
000178               BUILD=(1,12,%06)),
000179               IFTHEN=(WHEN=(979,2,CH,EQ,L(C'
01',
000180                                       C'
02',
000181                                       C'
03',
000182                                       C'
04',
000183                                       C'
05',
000184                                       C'
06',
000185                                       C'
07',
000186                                       C'
08',
000187                                       C'
09',
000188                                       C'
10',
000189                                       C'
11')),
000190                PARSE=(%07=(ABSPOS=979,FIXLEN=161)),
000191                BUILD=(1,12,%07))
000192 /*
000193 //*


The output looks like as below.

Command ===>                                                                                                      Scroll ===> CSR
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2----
****** ******************************************************* Top of Data ********************************************************
000001     ■88   09021021          ?                                     ¤   ¤E40462  Y             &¬
       00009FF303FFFFFFFF00000000336112200000000000000000000000000000011191119CFFFFF44E00040001122105500000000000000000000044400000
       0001F8820C09021021000300D902F011F000000F000F000F000000F000F000F002C002C540462008000000D011F000F000000C000000C000000C000000C0
----------------------------------------------------------------------------------------------------------------------------------
000002      69   08011001         /"                                          PD1
       00000FF302FFFFFFFF00020000767012000000000000000000000000000000001200120DCF44444400000000000000000000000000000000000044400000
       1002F6927C08011001000000D801F911F000000F000F000F000000F000F000F911C911C741000000000000C000C000C000000C000000C000000C000000C0
----------------------------------------------------------------------------------------------------------------------------------
000003     "
69   05011001        -°┼  ä                                  @   @BH1
       00007FF313FFFFFFFF00010000678074000000000000000000000000000000001170117CCF44444400000000000000000000000000000000000044400000
       1004F6921C05011001000300D801F803F000000F000F000F000000F000F000F910C910C281000000000000C000C000C000000C000000C000000C000000C0
----------------------------------------------------------------------------------------------------------------------------------
000004    Ï?47   08011002                             *                  *   *E06900  N
       00076FF313FFFFFFFF00000001221131100000001323141500000000000000014151415CFFFFF44D00000000000000000000000000000000000044400000
       1007F4721C08011002002000D000C003C002000D000C012C000000C000C000C012C012C506900005002000D000C000F000000C000000C000000C000000C0
----------------------------------------------------------------------------------------------------------------------------------
000005     ■82  *08011002   Í                                            %   %MM2
       00039FF305FFFFFFFF00070000221022200000000000000000000000000000003160316DDF44444400000000000000000000000000000000000044400000
       1014F8232C08011002000500D910F910F000000F000F000F000000F000F000F900C900C442000000000000F000C000C000000C000000C000000C000000C0
----------------------------------------------------------------------------------------------------------------------------------
000006      47   08011002          ¤  ₃         -   -                  -   -  E02390
       00033FF313FFFFFFFF00000001139125100000001630163100000000000000016311631CFFFFF44400000000000000000000000000000000000044400000
       1017F4721C08011002004000D002C003C002000D003C003C000000C000C000C003C003C502390000004000D000C000C000000C000000C000000C000000C0
----------------------------------------------------------------------------------------------------------------------------------
000007    à¬13   03011002        j % j %        j   j                  j   j  C82310  N
       00045FF302FFFFFFFF00000001906191600000001922192100000000000000019101910CFFFFF44D00070000000000000000000000000000000044400000
       1014F1327C03011002000001D012C010C000020D110C413C000000C000C000C112C112C382310005003000D000C000C000000C000000C000000C000000C0
----------------------------------------------------------------------------------------------------------------------------------
000008    k 80   09011002        ⎕Ø|   ¬                                 *   *LW1
       00090FF302FFFFFFFF00010000984007500000000000000000000000000000000750075DEF44444400000000000000000000000000000000000044400000
       1012F8027C09011002002500D800F900F000000F000F000F000000F000F000F900C900C361000000000000C000C000C000000C000000C000000C000000C0
----------------------------------------------------------------------------------------------------------------------------------
000009    ç 80  @08011002        j    j                                 j   j TB1
       00043FF307FFFFFFFF00000000921009200000000000000000000000000000000920092ECF44444400000000000000000000000000000000000044400000
       1038F8022C08011002003500D810F901F000000F000F000F000000F000F000F901C901C321000000000000C000C000C000000C000000C000000C000000C0
----------------------------------------------------------------------------------------------------------------------------------
000010    h┼80   09011002         a<  a*        j    b%                 b%  b%C90156  N
       00188FF302FFFFFFFF00000101284128500000001922118600000000000000011861186CFFFFF44D00000000000000000000000000000000000044400000
       1088F8028C09011002000000D101C101C000010D110C202C000000C000C000C202C202C390156005004000D000C000F000000C000000C000000C000000C0
----------------------------------------------------------------------------------------------------------------------------------


Thanks
Husen
Esmayeelhusen
 
Posts: 13
Joined: Thu May 04, 2023 1:57 pm
Has thanked: 3 times
Been thanked: 0 time

Re: Copy partial record after a string in a record using SOR

Postby sergeyken » Tue May 16, 2023 5:06 pm

Esmayeelhusen wrote:Thank you very much. Your help is much appreciated.
I have build the SORT CARD to achieve the goal.
The only drawback is it can check only the 8 occurrences of X'0908' in a record. We need to repeat the code to cover more occurrences of STRING in a record.
I have taken ideas from your suggestions to build this. Thanks.

Sorry, I hardly understand: did you read my previous response or not?

I gave you the working example to handle 11 (in my version), or any reasonable number of occurrences, with the code much more compact than your latest version. And again, you continue coding in your own way, and continue asking me the same questions as before.

How come? :o :?:
Javas and Pythons come and go, but JCL and SORT stay forever.
User avatar
sergeyken
 
Posts: 408
Joined: Wed Jul 24, 2019 10:12 pm
Has thanked: 6 times
Been thanked: 40 times

Re: Copy partial record after a string in a record using SOR

Postby sergeyken » Tue May 16, 2023 5:39 pm

//*====================================================================
//SORT0908 EXEC PGM=SORT                                              
//SYSOUT   DD  SYSOUT=*                                                
//*                                                                    
//SYMNAMES DD  *                                                      
Input1,6,5,CH                                                          
Input2,18,5,CH                                                        
Input3,31,2,CH                                                        
FixedPart,1,12,CH                                                      
NewCode1,13,2,CH                                                      
NewData1,=,158,CH                                                      
NewCode2,*,2,CH                                                        
NewData2,=,158,CH                                                      
NewCode3,*,2,CH                                                        
NewData3,=,158,CH                                                      
NewCode4,*,2,CH                                                        
NewData4,=,158,CH                                                      
NewCode5,*,2,CH                                                        
NewData5,=,158,CH                                                      
NewCode6,*,2,CH                                                        
NewData6,=,158,CH                                                      
NewCode7,*,2,CH                                                        
NewData7,=,158,CH                                                      
NewCode8,*,2,CH                                                        
NewData8,=,158,CH                                                      
NewCode9,*,2,CH                                                                
NewData9,=,158,CH                                                              
NewCode10,*,2,CH                                                                
NewData10,=,158,CH                                                              
NewCode11,*,2,CH                                                                
NewData11,=,158,CH                                                              
*      . . . . . . . extend as long as desired . . . . . . . . . .                            
//*                                                                            
//SORTIN   DD  *                                                                
?????AAAAA???????BBBBB????????CC??  01-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
?????AAAAA???????BBBBB????????CC??  01~1~1~1~1~1~1~1~1~  02~2~2~2~2~2~2~2~2~2~2~
?????AAAAA???????BBBBB????????CC??  XX~B~B~B~B~B~B~B~B~  03~3~3~3~3~3~3~3~3~3~3~
?????AAAAA???????BBBBB????????CC??  X1-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD  
?????AAAAA???????BBBBB????????CC??   02-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-
?????AAAAA???????BBBBB????????CC??   X2-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??    03-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3
?????AAAAA???????BBBBB????????CC??    X3-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??     04-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-
?????AAAAA???????BBBBB????????CC??     X4-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BA
?????AAAAA???????BBBBB????????CC??      05-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5
?????AAAAA???????BBBBB????????CC??      X5-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-B
?????AAAAA???????BBBBB????????CC??       06-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-
?????AAAAA???????BBBBB????????CC??       X6-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-
?????AAAAA???????BBBBB????????CC??        07-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7
?????AAAAA???????BBBBB????????CC??        X7-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??         08-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-
?????AAAAA???????BBBBB????????CC??         X8-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BA
?????AAAAA???????BBBBB????????CC??          09-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9
?????AAAAA???????BBBBB????????CC??          X9-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-B
?????AAAAA???????BBBBB????????CC??           10-10-10-10-10-10-10-10-10-10-10-10
?????AAAAA???????BBBBB????????CC??           X0-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-
?????AAAAA???????BBBBB????????CC??            11-11-11-11-11-11-11-11-11-11-11-1
?????AAAAA???????BBBBB????????CC??            1X-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??||01-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
?????AAAAA???????BBBBB????????CC??||X1-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD  
?????AAAAA???????BBBBB????????CC?? ||02-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-
?????AAAAA???????BBBBB????????CC?? ||X2-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??  ||03-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3
?????AAAAA???????BBBBB????????CC??  ||X3-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??   ||04-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-
?????AAAAA???????BBBBB????????CC??   ||X4-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BA
?????AAAAA???????BBBBB????????CC??    ||05-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5
?????AAAAA???????BBBBB????????CC??    ||X5-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-B
?????AAAAA???????BBBBB????????CC??     ||06-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-
?????AAAAA???????BBBBB????????CC??     ||X6-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-
?????AAAAA???????BBBBB????????CC??      ||07-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7
?????AAAAA???????BBBBB????????CC??      ||X7-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
?????AAAAA???????BBBBB????????CC??       ||08-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-
?????AAAAA???????BBBBB????????CC??       ||X8-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BA
?????AAAAA???????BBBBB????????CC??        ||09-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9
?????AAAAA???????BBBBB????????CC??        ||X9-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-B
?????AAAAA???????BBBBB????????CC??         ||10-10-10-10-10-10-10-10-10-10-10-10
?????AAAAA???????BBBBB????????CC??         ||X0-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD-
?????AAAAA???????BBBBB????????CC??          ||11-11-11-11-11-11-11-11-11-11-11-1
?????AAAAA???????BBBBB????????CC??          ||1X-BAD-BAD-BAD-BAD-BAD-BAD-BAD-BAD
//*                                                                            
//SORTOUT  DD  SYSOUT=*                                                        
//*--------------------------------------------------------------------        
//SYSIN    DD  *                                                                
 INCLUDE COND=(1,80,SS,EQ,X'0908')      GET RID IF THOSE NOT X'0908'            
 INREC  PARSE=(%=(STARTAFT=X'0908'),                                            
               %01=(ENDBEFR=X'0908',                                            
                    FIXLEN=158,                                                
                    REPEAT=11)),            <=== the max number of occurrences
        BUILD=(Input1,                                                          
               Input2,                                                          
               Input3,                                                          
        NewData1:%01,                   WHOLE PART AFTER X'0908' #1            
        NewData2:%02,                   WHOLE PART AFTER X'0908' #2            
        NewData3:%03,                   WHOLE PART AFTER X'0908' #3            
        NewData4:%04,                   WHOLE PART AFTER X'0908' #4            
        NewData5:%05,                   WHOLE PART AFTER X'0908' #5            
        NewData6:%06,                   WHOLE PART AFTER X'0908' #6            
        NewData7:%07,                   WHOLE PART AFTER X'0908' #7            
        NewData8:%08,                   WHOLE PART AFTER X'0908' #8      
        NewData9:%09,                   WHOLE PART AFTER X'0908' #9      
        NewData10:%10,                  WHOLE PART AFTER X'0908' #10      
        NewData11:%11)                  WHOLE PART AFTER X'0908' #11      
*      . . . . . . . extend as long as desired . . . . . . . . . .                            
                                                                         
 SORT FIELDS=COPY                                                        
                                                                         
* find the first valid occurence in the long concatenation                
 OUTREC IFTHEN=(WHEN=(NewCode1,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),    
                BUILD=(FixedPart,NewData1)),                              
        IFTHEN=(WHEN=(NewCode2,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),    
                BUILD=(FixedPart,NewData2)),                              
        IFTHEN=(WHEN=(NewCode3,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),    
                BUILD=(FixedPart,NewData3)),                              
        IFTHEN=(WHEN=(NewCode4,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),    
                BUILD=(FixedPart,NewData4)),                              
        IFTHEN=(WHEN=(NewCode5,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),    
                BUILD=(FixedPart,NewData5)),                              
        IFTHEN=(WHEN=(NewCode6,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),    
                BUILD=(FixedPart,NewData6)),                              
        IFTHEN=(WHEN=(NewCode7,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),      
                BUILD=(FixedPart,NewData7)),                              
        IFTHEN=(WHEN=(NewCode8,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),      
                BUILD=(FixedPart,NewData8)),                              
        IFTHEN=(WHEN=(NewCode9,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),      
                BUILD=(FixedPart,NewData9)),                              
        IFTHEN=(WHEN=(NewCode10,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),      
                BUILD=(FixedPart,NewData10)),                              
        IFTHEN=(WHEN=(NewCode11,EQ,L(C'01',C'02',C'03',C'04',C'05',        
                               C'06',C'07',C'08',C'09',C'10',C'11')),      
                BUILD=(FixedPart,NewData11))    
*      . . . . . . . extend as long as desired . . . . . . . . . .                            
                                                                           
* exclude completly bad records                                            
 OUTFIL INCLUDE=(NewCode1,EQ,L(C'01',C'02',C'03',C'04',C'05',              
                               C'06',C'07',C'08',C'09',C'10',C'11'))      
//*                                                                        
//*====================================================================    


********************************* TOP OF DATA *******************
AAAAABBBBBCC01-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1        
AAAAABBBBBCC01~1~1~1~1~1~1~1~1~                                  
AAAAABBBBBCC03~3~3~3~3~3~3~3~3~3~3~                              
AAAAABBBBBCC02-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-          
AAAAABBBBBCC03-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3          
AAAAABBBBBCC04-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-            
AAAAABBBBBCC05-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5            
AAAAABBBBBCC06-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-              
AAAAABBBBBCC07-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7              
AAAAABBBBBCC08-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-8-                
AAAAABBBBBCC09-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9                
AAAAABBBBBCC10-10-10-10-10-10-10-10-10-10-10-10                  
AAAAABBBBBCC11-11-11-11-11-11-11-11-11-11-11-1                  
******************************** BOTTOM OF DATA *****************
Javas and Pythons come and go, but JCL and SORT stay forever.

These users thanked the author sergeyken for the post:
Esmayeelhusen (Tue May 23, 2023 12:21 pm)
User avatar
sergeyken
 
Posts: 408
Joined: Wed Jul 24, 2019 10:12 pm
Has thanked: 6 times
Been thanked: 40 times

Re: Copy partial record after a string in a record using SOR

Postby Esmayeelhusen » Mon May 22, 2023 3:50 pm

Hi Sergeyken,
Apology I could not reply to your post last week.
I was coding as per your suggestions and trying many options and getting new ideas and thought of sharing those ideas so I posted my code.
Yes, Your code is much compact and impressive. Thanks.
My requirement is completely fulfilled. I Appreciate your help.
Thanks
Husen.
Esmayeelhusen
 
Posts: 13
Joined: Thu May 04, 2023 1:57 pm
Has thanked: 3 times
Been thanked: 0 time

Previous

Return to DFSORT/ICETOOL/ICEGENER

 


  • Related topics
    Replies
    Views
    Last post