View previous topic :: View next topic
Author
Message
kennedy_zhu New User Joined: 30 Nov 2007Posts: 27 Location: China
Hi,
I need to line up the some sysin.
The old format like this:
Code:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
DEF GDG (NAME(P&CUST.ZK7AT.BPPART) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.ZK7AT.ORDPREAN) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.ZK7AT.OTBXREF) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.BDCSTCDE)SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.BPPART) SCRATCH LIMIT(03))
The new format need to line up the SRATCH LIMIIT words from the col 49. So we would get the new format like that:
Code:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
DEF GDG (NAME(P&CUST.ZK7AT.BPPART) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.ZK7AT.ORDPREAN) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.ZK7AT.OTBXREF) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.BDCSTCDE) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.BPPART) SCRATCH LIMIT(03))
Anybody who know how to deal with this situation, plz kindly tell me.
Back to top
CICS Guy Senior Member Joined: 18 Jul 2007Posts: 2146 Location: At my coffee table
Back to top
Frank Yaeger DFSORT Developer Joined: 15 Feb 2005Posts: 7129 Location: San Jose, CA
kennedy_zhu,
Here's a DFSORT job that will do what you asked for:
Code:
//S1 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=... input file (FB/72)
//SORTOUT DD DSN=... output file (FB/72)
//SYSIN DD *
OPTION COPY
INREC PARSE=(%01=(ENDAT=C')',FIXLEN=48),
%02=(STARTAT=NONBLANK,ENDBEFR=C' ',FIXLEN=8),
%03=(STARTAT=NONBLANK,FIXLEN=16)),
BUILD=(%01,%02,%03)
/*
Back to top
kennedy_zhu New User Joined: 30 Nov 2007Posts: 27 Location: China
Unfortunately, I got this error:
Code:
SYNCSORT FOR Z/OS 1.2.2.1R U.S. PATENTS: 4210961, 5117495 (C) 2005 SYNCS
ELECTRONIC DATA SYSTEMS z/OS 1.7.0
PRODUCT LICENSED FOR CPU SERIAL NUMBER 31A2C, MODEL 2064 1C8 LICE
SYSIN :
OPTION COPY
INREC PARSE=(%01=(ENDAT=C')',FIXLEN=48),
*
%02=(STARTAT=NONBLANK,ENDBEFR=C' ',FIXLEN=8),
%03=(STARTAT=NONBLANK,FIXLEN=16)),
BUILD=(%01,%02,%03)
WER268A INREC STATEMENT : SYNTAX ERROR
I replace the key word 'INREC' with 'OUTFIL', the same result we got.
Code:
SYNCSORT FOR Z/OS 1.2.2.1R U.S. PATENTS: 4210961, 5117495 (C) 2005 SYNCS
ELECTRONIC DATA SYSTEMS z/OS 1.7.0
PRODUCT LICENSED FOR CPU SERIAL NUMBER 31A2C, MODEL 2064 1C8 LICE
SYSIN :
OPTION COPY
OUTFIL PARSE=(%01=(ENDAT=C')',FIXLEN=48),
*
%02=(STARTAT=NONBLANK,ENDBEFR=C' ',FIXLEN=8),
%03=(STARTAT=NONBLANK,FIXLEN=16)),
BUILD=(%01,%02,%03)
WER268A OUTFIL STATEMENT : SYNTAX ERROR
Back to top
sril.krishy Active User Joined: 30 Jul 2005Posts: 183 Location: hyderabad
kennedy_zhu,
You are using SYNCSORT.Not the DFSORT.SYNCSORT new version is having the support of PARSE(1.3 ).Youe env is having the older version(1.2.2.1R ) which is not supporting the PARSE function.
Thanks
Krishy
Back to top
kennedy_zhu New User Joined: 30 Nov 2007Posts: 27 Location: China
all right. Maybe we can use another utility to solve the trouble. I would try to write a program. Anyway, thx. : )
Back to top
sril.krishy Active User Joined: 30 Jul 2005Posts: 183 Location: hyderabad
kennedy_zhu,
If you are okay with writing the Exit routines for the sort,here is the job which will solve your problem with the earlier releases of SYNCSORT.
Code:
//STEP0200 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYSLIN DD DSN=&S1,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//SYSLMOD DD DSN=&S2,DISP=(,PASS),SPACE=(CYL,(1,1,2),RLSE)
//SORTIN DD *
DEF GDG (NAME(P&CUST.ZK7AT.BPPART) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.ZK7AT.ORDPREAN) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.ZK7AT.OTBXREF) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.BDCSTCDE)SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.BPPART) SCRATCH LIMIT(03))
//SORTOUT DD DSN=XXXXXXX.YY.ZZ,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDK,SPACE=(TRK,(1,1),RLSE)
//SYSTSPRT DD SYSOUT=*
//MODLIB DD YOUR MODLLIB DATA SET,
// DISP=SHR
//SYSIN DD *
SORT FIELDS=COPY
MODS E15=(E15Z,133,MODLIB,X)
You need to place the below code in the MODLIB PDS with the name E15Z.
Code:
/* REXX E15Z */
ADDRESS 'SYNCREXX' 'GIVE'
LS = LENGTH(SYRECORD)
IF LS > 0
THEN DO
SYACTION = 'REPLACE'
LSB = POS(')',SYRECORD)
LSS = POS('SCRATC',SYRECORD)
LSN1 = SUBSTR(SYRECORD,1,LSB)
LSN2 = SUBSTR(SYRECORD,LSS,80)
SYRECORD = SUBSTR(LSN1,1,48,' ')||LSN2
END
ELSE DO
SYACTION = 'CLOSE'
END
ADDRESS 'SYNCREXX' 'TAKE'
RETURN
The o/p will be like below in the SORTOUT dataset.
Code:
DEF GDG (NAME(P&CUST.ZK7AT.BPPART) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.ZK7AT.ORDPREAN) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.ZK7AT.OTBXREF) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.BDCSTCDE) SCRATCH LIMIT(03))
DEF GDG (NAME(P&CUST.BPPART) SCRATCH LIMIT(03))
Thanks
Krishy
Back to top
kennedy_zhu New User Joined: 30 Nov 2007Posts: 27 Location: China
Fabulous.
That's great.
I add some simple logic so that it could execute the continue line.
->
LSN0 = SUBSTR(SYRECORD,1,4)
IF LSN0 = ' '
THEN DO
LSB = 0
END
IF LSB <> 0 & LSS <> 0
THEN DO
LSN1 = SUBSTR(SYRECORD,1,LSB)
Thanks a million! Krishy.
And thanks for all of you, cool guy. : P
Back to top
kennedy_zhu New User Joined: 30 Nov 2007Posts: 27 Location: China
Forget paste the continue line
->
DEF GDG (NAME(P&CUST.ZK7AT.ORDPREAN) -
SCRATCH LIMIT(03))
Back to top
Please enable JavaScript!