srj1957
New User
Joined: 15 Dec 2005 Posts: 72 Location: RALEIGH NC, USA
|
|
|
|
Take Name from 1st record in File1 (POS 12 lenght 30) and find a match on the Name in File2 (POS 1 Lenght 30),
If matched, then copy the data from of File2 (pos 31 lenght 9) bytes and append them to the full record from File1 to create output File 3
Now take Name from 2nd recond in File1 and start at beginning of File2 and look for match...then create File3 the same way as before
Now take Name from 3rd recond in File1 and start at beginning of File2 and look for match...If cannot find a match then just take full file2 and write out with 'NO MATCH' appended.
File 1
Code: |
54868452200ABACAVIR SULFATE
00173066400ABACAVIR SULFATE
54569559400ABACAVIR SULFATE/LAMIVUDINE
68158014951ABARELIX
|
File2
Code: |
ABACAVIR SULFATE 001730661
ABARELIX 575160149
ABCIXIMAB 000027140
ABROTANUM TINCTURE 153610101
ACACIA 369870026
|
File3
Code: |
54868452200ABACAVIR SULFATE 001730661
00173066400ABACAVIR SULFATE 001730661
54569559400ABACAVIR SULFATE/LAMIVUDINE NO MATCH
68158014951ABARELIX 575160149 |
Can this tricky challenge be done is DFSORT? |
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
Here's a DFSORT/ICETOOL job that will do what you asked for. I assumed your input file has RECFM=FB and LRECL=80, but the job can be changed appropriately for other attributes.
Code: |
//S1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DSN=... input file1 (FB/80)
//IN2 DD DSN=... input file2 (FB/80)
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(MOD,PASS)
//OUT DD DSN=... output file (FB/80)
//TOOLIN DD *
COPY FROM(IN2) TO(T1) USING(CTL1)
COPY FROM(IN1) TO(T1) USING(CTL2)
SPLICE FROM(T1) TO(OUT) ON(12,30,CH) KEEPNODUPS -
WITHALL WITH(1,11) WITH(81,1) USING(CTL3)
/*
//CTL1CNTL DD *
INREC BUILD=(12:1,30,43:31,9,81:C'BB')
/*
//CTL2CNTL DD *
INREC OVERLAY=(43:C'NO MATCH',81:C'VV')
/*
//CTL3CNTL DD *
OUTFIL FNAMES=OUT,OMIT=(81,2,CH,EQ,C'BB'),
BUILD=(1,80)
/*
|
|
|