View previous topic :: View next topic
|
Author |
Message |
Karthik Chandrasekaran
New User
Joined: 21 Aug 2006 Posts: 8
|
|
|
|
I have a KSDS with file length 1500.I need to populate 3rd,4th and 5th byte with BLanks and the last 3 bytes in the input file can be ommited.Please let me know how can i achieve this using synsort.
File description of the KSDS:
Device type: 3390
Organization: KSDS
KSDS key length: 20
KSDS key location: 0
Average record size: 200
Maximum record size: 1500
First i copied the data from KSDS to a PS variable length file with max record length 1500 using synsort. ---I have a question here
Is the output file length(1500) which i used is correct or not ? or should i declare the output file length as 1504 ? since the VSAM will not have the RDW details.Pls confirm.
When i was trying to achieve i got the abend as given in the subject(WER244A OUTREC - SHORT RECORD).
Can anyone explain why this abend has occured ?
I gave the following as SYSIN:
SORT FIELDS=COPY
OUTREC FIELDS=(1:1,6,3X,10:7,1491) |
|
Back to top |
|
|
guptae
Moderator
Joined: 14 Oct 2005 Posts: 1208 Location: Bangalore,India
|
|
|
|
Hi there,
Please try with this follwing sort card
Code: |
//SYSIN DD *
OPTION COPY,VLSCMP
OUTREC FIELDS=(1:1,6,3X,10:7,1491)
/* |
|
|
Back to top |
|
|
William Thompson
Global Moderator
Joined: 18 Nov 2006 Posts: 3156 Location: Tucson AZ
|
|
|
|
The error:
Quote: |
EXPLANATION: The ddname will be SORTOUT, SORTOFxx, SORTOFx or the ddname provided by an OUTFIL FNAMES parameter. A variable-length record was too short to contain all the fields specified on the control statement. Program HISTOGRM may be used to determine the length of the shortest record in the input file. |
In the section for OUTREC:
Quote: |
To include any portion of the variable part of the input records, specify a position value without a length value as the last entry. |
That should solve your problem.
And, yes, vsam lrecl does not include the llbb but the ps must. |
|
Back to top |
|
|
William Thompson
Global Moderator
Joined: 18 Nov 2006 Posts: 3156 Location: Tucson AZ
|
|
|
|
guptae wrote: |
OPTION COPY,VLSCMP |
What is VLSCMP? |
|
Back to top |
|
|
Karthik Chandrasekaran
New User
Joined: 21 Aug 2006 Posts: 8
|
|
|
|
Hi Ekta,
VLSCMP is not working.I gave the sysin card as you told but without comma, since it abended with comma.But getting the same abend(Short)
Hi William,
When i ommited the length field it assumed the length as 1507.I pasted the spool listing below. The sysin card which i gave is SORT FIELDS=COPY
OUTREC FIELDS=(1:1,6,3X,10:7)
SPOOL:
SORTIN : RECFM=V ; LRECL= 1500; CISIZE = 4096
OUTREC RECORD LENGTH = 1507
SORTOUT : RECFM=VB ; LRECL= 1500; BLKSIZE= 27998
SORTOUT HAS INCOMPATIBLE LRECL |
|
Back to top |
|
|
William Thompson
Global Moderator
Joined: 18 Nov 2006 Posts: 3156 Location: Tucson AZ
|
|
|
|
Maybe using the VLTEST=0 parm would help, maybe not....I wonder how Frank would do it? |
|
Back to top |
|
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
Quote: |
I wonder how Frank would do it? |
This is a Syncsort question (WER messages). I'm a DFSORT developer. DFSORT and Syncsort are competitive products. I'm happy to answer questions on DFSORT and DFSORT's ICETOOL, but I don't answer questions on Syncsort. |
|
Back to top |
|
|
dick scherrer
Moderator Emeritus
Joined: 23 Nov 2006 Posts: 19243 Location: Inside the Matrix
|
|
|
|
Hello,
Sortout most likely needs to be 1504 rather than 1500.
VLSCMP deals with "short" records in a variable length file (DFSORT). |
|
Back to top |
|
|
William Thompson
Global Moderator
Joined: 18 Nov 2006 Posts: 3156 Location: Tucson AZ
|
|
|
|
Frank Yaeger wrote: |
This is a Syncsort question (WER messages). I'm a DFSORT developer. DFSORT and Syncsort are competitive products. I'm happy to answer questions on DFSORT and DFSORT's ICETOOL, but I don't answer questions on Syncsort. |
I know that Frank, I was just wondering what DFSORT facility would allow the end three bytes to be chopped off.....VLSCMP? |
|
Back to top |
|
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
VLSCMP is only applicable to short INCLUDE/OMIT records. Chopping three bytes off at the end would be done with INREC, OUTREC or OUTFIL - VLSCMP has nothing to do with it. |
|
Back to top |
|
|
William Thompson
Global Moderator
Joined: 18 Nov 2006 Posts: 3156 Location: Tucson AZ
|
|
|
|
OK, I can take a hint... ...I'll just treat it as a test and see if I can find if it's possible and if so how.....Did I ever mention just how big your DFSORT manual is??? |
|
Back to top |
|
|
dick scherrer
Moderator Emeritus
Joined: 23 Nov 2006 Posts: 19243 Location: Inside the Matrix
|
|
|
|
And if memory serves, Syncsort has no stinkin' vlscmp.
To select some but not all of the record, INREC works w/ Syncsort. |
|
Back to top |
|
|
William Thompson
Global Moderator
Joined: 18 Nov 2006 Posts: 3156 Location: Tucson AZ
|
|
|
|
That's a point, Syncsort, by default, will err if inrec or sort (IIRC) fields (operations?) get hit by short recs, but outrec is not mentioned.
Syncsort has a parm that will (again IIRC) mitigate the error and allow some tolerance.
So if the poster set the parm, chopped off the end three with inrec and upon outrec did the fields without specifying the final length, he/she would have a Syncsort solution...
Dang, sometimes it just takes a while....
Well, Karthik, willing to give it a try? |
|
Back to top |
|
|
guptae
Moderator
Joined: 14 Oct 2005 Posts: 1208 Location: Bangalore,India
|
|
|
|
Hi Karthik,
Please try with VLTEST1
Code: |
//STEP001 EXEC PGM=SORT,PARM='VLTESTI=1'
//SYSIN DD *
OPTION COPY
OUTREC FIELDS=(1:1,6,3X,10:7,1491)
/* |
It's working in my shop |
|
Back to top |
|
|
Karthik Chandrasekaran
New User
Joined: 21 Aug 2006 Posts: 8
|
|
|
|
Hi Ekta,
I tried with VLTESTI but it did'nt work, i got the same abend(short record).
Hi William,
I tried VLTEST=0 too and i am getting the same abend.
I gave PARM='IIRC', it shouted at me saying PARM FIELD ERROR - IIRC and gave the same abend. am i using the correct syntax ?
By the way what does the parm VLTESTI=1 or VLTESTI=0 does ? |
|
Back to top |
|
|
Karthik Chandrasekaran
New User
Joined: 21 Aug 2006 Posts: 8
|
|
|
|
Hi Ekta,
I tried with VLTESTI but it did'nt work, i got the same abend(short record).
Hi William,
I tried VLTEST=0 too and i am getting the same abend.
I gave PARM='IIRC', it shouted at me saying PARM FIELD ERROR - IIRC and gave the same abend. am i using the correct syntax ?
By the way what does the parm VLTESTI=1 or VLTESTI=0 does ?
Thanks all for your time! |
|
Back to top |
|
|
William Thompson
Global Moderator
Joined: 18 Nov 2006 Posts: 3156 Location: Tucson AZ
|
|
|
|
Did you try to trim the 3 bytes on the inrec, VLTEST does not seem to work against outrec problems.
IIRC is short for If I Recall Correctly.... |
|
Back to top |
|
|
superk
Global Moderator
Joined: 26 Apr 2004 Posts: 4652 Location: Raleigh, NC, USA
|
|
|
|
Just a thought, but maybe it's time to post this question to the guys from SYNCSORT. They do participate in SYNCSORT discussions elsewhere. |
|
Back to top |
|
|
dick scherrer
Moderator Emeritus
Joined: 23 Nov 2006 Posts: 19243 Location: Inside the Matrix
|
|
|
|
Hello,
There was misunderstanding in the previous post(s).
Here is the descripton of the Syncsort VLTEST* parms:
Quote: |
VLTESTI
VLTESTI specifies to SyncSort how to process variable-length records that do not contain
all specified INCLUDE or OMIT fields. VLTESTI applies to the INCLUDE and OMIT
control statements as well as OUTFIL and JOINKEYS INCLUDE/OMIT processing.
The delivered default of 0 instructs SyncSort to terminate if a record does not completely
contain all INCLUDE or OMIT fields. A WER250A critical error message is generated to
indicate this condition.
When VLTESTI=1 is specified, a record that does not completely contain all INCLUDE/
OMIT fields is treated as having failed the comparison. SyncSort will omit the record if
INCLUDE is being used or include the record if OMIT has been specified.
When VLTESTI=2 is specified, SyncSort will treat comparisons to fields not completely
contained within the record as false and decide a record?s status for inclusion or omission
from fields that are available. If all fields are not present, the record will be processed as
having failed the comparison. SyncSort will omit the record if INCLUDE is being used or
include the record if OMIT has been specified.
Cannot be used with Tape Sort. |
Quote: |
VLTEST
VLTEST allows you to do the following when variable-length records are processed:
? Choose the type of record length validity testing to be performed.
? Choose whether or not to verify the correct sequence of segments in variable-length spanned records.
Record length validity testing may be performed in all types of applications: sort, merge,
copy, and BetterGener. Segment sequence checking may only be done during sort and
merge applications.
The first subparameter of the VLTEST PARM is a number n that instructs SyncSort in the
type of validity testing to be performed on variable-length records. Choosing a validity test
instructs SyncSort to terminate with a critical error (outlined in WER027A, WER160A or
WER167A) in the event of an illegal condition.
In particular, VLTEST instructs the sort/merge in the handling of ?short? variable-length
records, i.e., records not long enough to contain all of the control fields specified in the
SORT/MERGE control statement. The delivered default for VLTEST is 1.
When VLTEST is set to an even number, SyncSort will accept short variable-length records,
padding them with binary zeros to the length of the sort key for the sort compare process.
In order to prevent system 0C7 abends due to the binary zero padding, the CMP PARM is
automatically set to CMP=CLC in these cases. The binary zeros are removed from the
record, restoring it to its original state, as the output record is being written.
0** No validity testing of variable-length records.
1 If input record is shorter than control fields, terminate. This is the delivered
default.
2** If input record is longer than maximum LRECL or l2 value, terminate.
3 If either or both of tests 1 and 2, terminate.
4** If input record is longer than output LRECL or l3 value, terminate.
5 If input record is shorter than control fields, or longer than output LRECL or l3
value, or both, terminate.
6** If input record is longer than the maximum input LRECL or l2 value, or longer
than the output LRECL, or both, terminate.
7 If input record is shorter than control fields, or longer than input LRECL or l2
value, or longer than output LRECL or l3 value, or any or all of these, terminate.
The second subparameter allows you to specify whether or not SyncSort should verify that
the sequence of segments is correct in each variable-length spanned record during sort and
merge applications. ON is the delivered default and signals that the segment sequence
should be verified. If OFF is selected, all illogical record segments encountered in the input
file will be eliminated and message WER464I will be produced. If OFF4 is selected, the processing
described for OFF will occur, but in addition if an illogical segment is found, a
return code of 4 will be returned if not overridden by a higher return code set for another
reason.
SyncSort 5.32 for z/OS 1.2 Programmer?s Guide
The second subparameter does not apply during copy applications.
Note: If an illegal condition is detected during a validity test and segment sequence checking
is on, message WER182A will be issued.
Cannot be used with Tape Sort.
** These values force the use of CMP=CLC for variable-length input. |
If you don't have a Syncsort manual, you should obtain one. The documentation is free to registered users. |
|
Back to top |
|
|
superk
Global Moderator
Joined: 26 Apr 2004 Posts: 4652 Location: Raleigh, NC, USA
|
|
|
|
Karthik Chandrasekaran, were you able to get a resolution from the SYNCSORT folks? |
|
Back to top |
|
|
|