Notes for symbols
- EFS programs cannot be used with symbol processing.
- DFSORT or ICETOOL scans each SYMNAMES statement for errors, and
prints an error message for the first error detected. A marker ($)
is printed directly below the SYMNAMES statement near the error, if
appropriate.
Scanning stops at the first error, and then continues with the next SYMNAMES statement. However, once an error is detected, positions generated by using an asterisk (*) for p or POSITION,symbol in subsequent statements will not be checked for errors. DFSORT and ICETOOL terminate after all SYMNAMES statements are scanned if an error is detected in any statement.
- If DFSORT or ICETOOL detects an error in a control statement or
operator statement during the substitution phase (that is, while attempting
to substitute values for symbols), it may either:
- print the original statement in error followed by a $ marker (if appropriate) and an error message, continue the substitution phase with the next statement and terminate when the substitution phase is complete, or
- stop performing substitution for the statement in error, continue with the next statement and let processing after the substitution phase handle the error. It is possible in this case for a symbol, rather than a substituted value, to appear in a transformed statement.
- If the substitution phase is successful, DFSORT and ICETOOL will
substitute values for symbols wherever symbols are allowed. Substituted
values which are invalid for a particular statement or operand will
be detected after the substitution phase. This makes it easier to
determine the cause of the error. For example, if SYMNAMES contains:
the statement:Sym1,5,4,ZD Con1,'1234' Con2,1234
will be transformed to the following during the substitution phase:INCLUDE COND=(Sym1,EQ,Con1)
An ICE114A message with a $ marker under C'1234' will then be issued for the statement because a ZD field cannot be compared to a character constant. In this example, the error could be fixed by using Con2 (a decimal constant) in the statement instead of Con1 or by redefining Con1 as a decimal constant.INCLUDE COND=(5,4,ZD,EQ,C'1234')
- If you use a temporary or permanent message data set, it is best to specify a disposition of MOD to ensure you see all messages and control statements in the message data set. In particular, if you use symbols processing and do not use MOD, you will not see the original control statements unless Blockset is selected.
- If you rearrange your records in any way (for example, using E15,
E35, INREC, OUTREC or OUTFIL) and want to use symbols for the rearranged
records, be sure to use symbols that map to the new positions of your
fields. For example, if you use a SYMNAMES data set with the following
statements:
for this INREC statement:Field1,1,5,ZD Field2,*,6,ZD Field3,*,3,ZD Field4,*,4,ZD
the resulting records will only contain Field2 and Field4. If you want to use symbols for the rearranged records (for example, in a SORT statement), you will need to use a SYMNAMES data set with symbols that map to the rearranged records, such as:INREC FIELDS=(Field2,Field4)
New_Field2,1,6,ZD New_Field4,*,4,ZD
If you use unique symbols for the rearranged fields, as in the previous example, you can concatenate the old and new symbol data sets together and use the old and new symbols where appropriate, as in this example:INREC FIELDS=(Field2,Field4) SORT FIELDS=(New_Field2,A,New_Field4,A)