Massimo, It is not clear as to what you are trying to do. Can you please show us the desired output from the sample you have given? Also please tell us about the DCB properties of the input and output datasets.
Thanks, Sri Hari Kolusu DFSORT Development IBM Corporation From: Massimo Biancucci <[email protected]> To: [email protected] Date: 05/27/2016 05:36 AM Subject: Sort PARSE, ABSPOS and SUBPOS. How to PARSE when one or more fields are missed. Sent by: IBM Mainframe Discussion List <[email protected]> Hi everybody, I'm trying to parse a variable record where some fields can and cannot be present. It seems, after the first search failure (pointer hit the end of record) there's no chance to restart the parsing from the beginning. This is a test: //SORTIN DD * *F00:FIELD00*F01:FIELD01*F02:FIELD02* *F01:FIELD01*F00:FIELD00*F02:FIELD02* *F02:FIELD02*F00:FIELD00*F01:FIELD01* *F00:FIELD00*F02:FIELD02* *F00:FIELD00*F02:FIELD02*F01:FIELD01* *F02:FIELD02*F01:FIELD01* /* //SORTOUT DD SYSOUT=* //SYSIN DD * INREC PARSE=(%00=(STARTAFT=C'F00:', ENDBEFR=C'*', FIXLEN=15), %=(ABSPOS=1,FIXLEN=1), %01=(SUBPOS=1000,STARTAFT=C'F01:', ENDBEFR=C'*', FIXLEN=15), %=(ABSPOS=1,FIXLEN=1), %02=(STARTAFT=C'F02:', ENDBEFR=C'*', FIXLEN=15)), BUILD=(C'F00=',%00,C'-F01=',%01,C'-F02=',%02,C'-') SORT FIELDS=COPY /* The output is: F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - F00=FIELD00 -F01= -F02= - F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - F00= -F01= -F02= - I tried with: //SYSIN DD * INREC PARSE=(%00=(STARTAFT=C'F00:', ENDBEFR=C'*', FIXLEN=15), %01=(SUBPOS=1000,STARTAFT=C'F01:', ENDBEFR=C'*', FIXLEN=15), %02=(SUBPOS=1000,STARTAFT=C'F02:', ENDBEFR=C'*', FIXLEN=15)), BUILD=(C'F00=',%00,C'-F01=',%01,C'-F02=',%02,C'-') SORT FIELDS=COPY /* too with no difference. The behaviour is the same for DFSort and SyncSort. This does lead me to think I didn't fully understand the following manual statement (from DFSort): "*ABSPOS=p* Sets the Start Pointer for this parsed field to p. p can be 1 to 32752. By default, the Start Pointer for the first %nn parsed field is position 1 for fixed-length records or position 5 for variable-length records, and the Start Pointer for each subsequent %nn parsed field is the Start Pointer set by the previous %nn field. You can use ABSPOS=p to set the Start Pointer to position p to override the default Start Pointer. If the resulting Start Pointer is less than position 5 for variable length records, it will be set to position 5." and " *SUBPOS=y* Decrements the Start Pointer for this parsed field by y. y can be 1 to 32752. By default, the Start Pointer for the first %nn parsed field is position 1 for fixed-length records or position 5 for variable-length records, and the Start Pointer for each subsequent %nn parsed field is the Start Pointer set by the previous %nn field. You can use SUBPOS=y to decrement the Start Pointer by x to override the default Start Pointer. If the resulting Start Pointer is less than position 1 for fixed-length records, it will be set to position 1. If the resulting Start Pointer is less than position 5 for variable-length records, it will be set to position 5." Thanks a lot for your support. Massimo ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
