|
- 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:
Sym1,5,4,ZD
Con1,'1234'
Con2,1234
the statement: INCLUDE COND=(Sym1,EQ,Con1)
will
be transformed to the following during the substitution phase: INCLUDE COND=(5,4,ZD,EQ,C'1234')
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.
- 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:
Field1,1,5,ZD
Field2,*,6,ZD
Field3,*,3,ZD
Field4,*,4,ZD
for this INREC statement: INREC FIELDS=(Field2,Field4)
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: 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)
|