General Formats (Continued) [ Micro Focus COBOL Language Reference ] MPE/iX 5.0 Documentation
 
  
  
  
 
Micro Focus COBOL Language Reference
General Formats (Continued) 
The INSPECT Statement 
Function.   
The INSPECT statement provides the ability to tally (Format 1), replace
(Format 2), tally and replace (Format 3) or convert (Format 4) (ANS85
only) occurrences of single characters or group of characters in a data
item.
Examples:.   
   1.  Examples of using INSPECT TALLYING, REPLACING, and CONVERTING are
       provided in the Examples chapter in your Language Reference - 
       Additional Topics.
General Formats.   
Format 1.   
            
Format 2.   
            
Format 3.   
            
For ANS85 only:  Format 4.   
            
Syntax Rules.   
All Formats.   
   1.  Identifier-1 must reference either a group item or any category of
       elementary item, described (either implicitly or explicitly) as
       USAGE IS DISPLAY.
   2.  Identifier-3...identifier-n must reference either an elementary
       alphabetic, alphanumeric or numeric item described (either
       implicitly or explicitly) as USAGE IS DISPLAY.
   3.  Each literal must be nonnumeric and can be any figurative
       constant, except ALL. If literal-1, literal-2 or literal-4 is a
       figurative constant, it refers to an implicit one character data
       item.
   4.  No more than one BEFORE phrase and/ (ANS85 only) or one AFTER
       phrase can be specified for any one ALL, LEADING, CHARACTERS,
       FIRST or CONVERTING (ANS85 only) phrase.
   5.  Literal-1, literal-2, literal-3, literal-4, and literal-5, and the
       data items referenced by identifier-3, identifier-4, identifier-5,
       identifier-6, and identifier-7 can be any number of characters in
       length up to the limit allowed for literals or data items.
   6.  For MF only:    All identifiers, except identifier-2 (the TALLYING
       field), can be external floating-point items.  External
       floating-point items are treated as if redefined as alphanumeric
       with the INSPECT statement referring to the alphanumeric item.
Formats 1 and 3.   
7.      Identifier-2 must reference an elementary numeric data item.
Formats 2 and 3.   
8.      The size of the data referenced by literal-3 or identifier-5 must
        be equal to the size of the data referenced by literal-1 or
        identifier-3.  When a figurative constant is used as literal-3,
        the size of the figurative constant is equal to the size of
        literal-1 or the size of the data item referenced by
        identifier-3.
9.      When the CHARACTERS phrase is used, literal-3 or the size of the
        data item referenced by identifier-5 must be one character in
        length.
        For ANS85 only:  This restriction does not apply to literal-2 or
        identifier-4.
For ANS85 only:  Format 4.   
10.     The size of literal-5 or the data item referenced by identifier-7
        must be equal to the size of literal-4 or the data item
        referenced by identifier-6.  When a figurative constant is used
        as literal-5, the size of the figurative constant is equal to the
        size of literal-4 or the size of the data item referenced by
        identifier-6.
11.     The same character must not appear more than once either in
        literal-4 or in the data item referenced by identifier-6.
General Rules.   
All Formats.   
   1.  For ANS85 only:  For the purpose of determining its length,
       identifier-1 is treated as if it were a sending data item.  (See
       the section The OCCURS clause in this chapter).
   2.  Inspection (which includes the comparison cycle, the establishment
       of boundaries for the BEFORE or AFTER phrase, and the mechanism
       for tallying and/or replacing) begins at the leftmost character
       position of the data item referenced by identifier-1, regardless
       of its class, and proceeds from left to right to the rightmost
       character position as described in General Rules 11, 12 and 13.
   3.  For use in the INSPECT statement, the contents of the data item
       referenced by identifier-1, identifier-3, identifier-4,
       identifier-5, identifier-6 or identifier-7 will be treated as
       follows:
          a.  If any of identifier-1, identifier-3, identifier-4,
              identifier-5, identifier-6 or identifier-7 is described as
              alphanumeric, the INSPECT statement treats the contents of
              each such identifier as a character-string.
          b.  If any of identifier-1, identifier-3, identifier-4,
              identifier-5, identifier-6 or identifier-7 is described as
              alphanumeric edited, numeric edited or unsigned numeric,
              the data item is inspected as though it had been redefined
              as alphanumeric (see General Rule 3a.)  and the INSPECT
              statement had been written to reference the redefined data
              item.
          c.  If any of identifier-1, identifier-3, identifier-4,
              identifier-5, identifier-6 or identifier-7 is described as
              signed numeric, the data item is inspected as though it had
              been moved to an unsigned numeric data item with length
              equal to the length of the signed item excluding any
              separate sign position and then the rules in General Rule
              3b had been applied.  (See the section The MOVE Statement 
              later in this chapter.)
   4.  In General Rules 6 through 19, all references to literal-1,
       literal-2, literal-3, literal-4, and literal-5 apply equally to
       the contents of the data item referenced by identifier-3,
       identifier-4, identifier-5, identifier-6, and identifier-7,
       respectively.
   5.  If any identifier is subscripted or is a function-identifier 
       (ANS85 only) , the subscript or function-identifier (ANS85 only)
       is evaluated only once as the first operation in the execution of
       the INSPECT statement.
Format 1.   
6.      For ANS85 only:  Identifier-1 is a sending data item.
7.      The required words ALL and LEADING are adjectives that apply to
        each succeeding literal-1 until the next adjective appears.
8.      The contents of the data item referenced by identifier-2 are not
        initialized by the execution of the INSPECT statement.
9.      The rules for tallying are as follows:
           a.  If the ALL phrase is specified, the contents of the data
               item referenced by identifier-2 are incremented by one for
               each occurrence of literal-1 matched in the contents of
               the data item referenced by identifier-1.
           b.  If the LEADING phrase is specified, the contents of the
               data item referenced by identifier-2 are incremented by
               one for the first and each subsequent contiguous
               occurrence of literal-1 matched in the contents of the
               data item referenced by identifier-1, provided that the
               leftmost such occurrence is at the point where comparison
               began in the first comparison cycle in which literal-1 was
               eligible to participate.
           c.  If the CHARACTERS phrase is specified, the contents of the
               data item referenced by identifier-2 are incremented by
               one for each character matched, in the sense of Format 1
               and 2, General Rule 12e, in the contents of the data item
               referenced by identifier-1.
10.     If identifier-1, identifier-3 or identifier-4 occupies the same
        storage area as identifier-2, the result of the execution of this
        statement is undefined, even if they are defined by the same data
        description entry.  (See the section Overlapping Operands earlier
        in this chapter.)
Formats 1 and 2.   
11.     During inspection of the contents of the data item referenced by
        identifier-1, each properly matched occurrence of literal-1 is
        tallied (Format 1) or replaced by literal-3 (Format 2).
12.     The comparison operation to determine the occurrences of
        literal-1 to be tallied or to be replaced, occurs as follows:
           a.  The operands of the TALLYING or REPLACING phrases are
               considered in the order they are specified in the INSPECT
               statement from left to right.  The first literal-1 is
               compared to an equal number of contiguous characters,
               starting with the leftmost character position in the data
               item referenced by identifier-1.  Literal-1 matches that
               portion of the contents of the data item referenced by
               identifier-1 if, and only if, they are equal, character
               for character, and:
                  a.  If neither LEADING nor FIRST is specified, or:
                  b.  If the LEADING adjective applies to literal-1 and
                      literal-1 is a leading occurrence as defined in
                      General Rules 9 and 15, or:
                  c.  If the FIRST adjective applies to literal-1 and
                      literal-1 is the first occurrence as defined in
                      General Rule 9.
           b.  If no match occurs in the comparison of the first
               literal-1, the comparison is repeated with each successive
               literal-1, if any, until either a match is found or there
               is no next successive literal-1.  When there is no next
               successive literal-1, the character position in the data
               item referenced by identifier-1 immediately to the right
               of the leftmost character position considered in the last
               comparison cycle is considered as the leftmost character
               position, and the comparison cycle begins again with the
               first literal-1.
           c.  Whenever a match occurs, tallying and/or replacing takes
               place as described in General Rules 9 and 15.  The
               character position in the data item referenced by
               identifier-1 immediately to the right of the rightmost
               character position that participated in the match is now
               considered to be the leftmost character position of the
               data item referenced by identifier-1, and the comparison
               cycle starts again with the first literal-1.
           d.  The comparison operation continues until the rightmost
               character position of the data item referenced by
               identifier-1 has participated in a match or has been
               considered as the leftmost character position.  When this
               occurs, inspection is terminated.
           e.  If the CHARACTERS phrase is specified, an implied one
               character operand participates in the cycle described in
               paragraphs 12a through 12d above, except that no
               comparison to the contents of the data item referenced by
               identifier-1 takes place.  This implied character is
               considered always to match the leftmost character of the
               contents of the data item referenced by identifier-1
               participating in the current comparison cycle.
13.     The comparison operation defined in General Rule 12 is affected
        by the BEFORE and AFTER phrases as follows:
           a.  If neither the BEFORE nor the AFTER phrase is specified,
               literal-1 or the implied operand of the CHARACTERS phrase
               is first eligible to participate in matching at the
               leftmost character position of identifier-1.
           b.  If the BEFORE phrase is specified, the associated
               literal-1, or the implied operand of the CHARACTERS phrase
               participates only in those comparison cycles which involve
               that portion of the contents of the data item referenced
               by identifier-1 from its leftmost character position up
               to, but not including, the first occurrence of literal-2,
               in the contents of the data item referenced by
               identifier-1.
               The position of this first occurrence is determined before
               the first cycle of the comparison operation described in
               General Rule 12 is begun.  If, on any comparison cycle,
               literal-1, or the implied operand of the CHARACTERS phrase
               is not eligible to participate, it is considered not to
               match the contents of the data item referenced by
               identifier-1.  If there is no occurrence of literal-2, in
               the contents of the data item referenced by identifier-1,
               its associated literal-1, or the implied operand of the
               CHARACTERS phrase participates in the comparison operation
               as though the BEFORE phrase had not been specified.
           c.  If the AFTER phrase is specified, the associated
               literal-1, or the implied operand of the CHARACTERS phrase
               can participate only in those comparison cycles which
               involve that portion of the contents of the data item
               referenced by identifier-1 from the character position
               immediately to the right of the rightmost character
               position of the first occurrence of literal-2, in the
               contents of the data item referenced by identifier-1 to
               the rightmost character position of the data item
               referenced by identifier-1.
               The position of this first occurrence is determined before
               the first cycle of the comparison operation described in
               General Rule 12 is begun.  If, on any comparison cycle,
               literal-1, or the implied operand of the CHARACTERS phrase
               is not eligible to participate, it is considered not to
               match the contents of the data item referenced by
               identifier-1.  If there is no occurrence of literal-2, in
               the contents of the data item referenced by identifier-1,
               its associated literal-1, or the implied operand of the
               CHARACTERS phrase is never eligible to participate in the
               comparison operation.
Format 2.   
14.     The required words ALL, LEADING and FIRST are adjectives that
        apply to each succeeding BY phrase until the next adjective
        appears.
15.     The rules for replacement are as follows:
           a.  When the CHARACTERS phrase is specified, each character
               matched in the sense of Format 1 and 2, General Rule 12e
               in the contents of the data item referenced by
               identifier-1, is replaced by literal-3.
           b.  When the adjective ALL is specified, each occurrence of
               literal-1 matched in the contents of the data item
               referenced by identifier-1 is replaced by literal-3.
           c.  When the adjective LEADING is specified, the first and
               each subsequent contiguous occurrence of literal-1 matched
               in the contents of the data item referenced by
               identifier-1 is replaced by literal-3, provided that the
               leftmost occurrence is at the point where comparison began
               in the first comparison cycle in which literal-1 was
               eligible to participate.
           d.  When the adjective FIRST is specified, the leftmost
               occurrence of literal-1 matched in the contents of the
               data item referenced by identifier-1 is replaced by
               literal-3.
16.     If identifier-3, identifier-4 or identifier-5 occupies the same
        storage area as identifier-1, the result of the execution of this
        statement is undefined, even if they are defined by the same data
        description entry.  (See the section Overlapping Operands earlier
        in this chapter.)
Format 3.   
17.     A Format 3 INSPECT statement is interpreted and executed as
        though two successive INSPECT statements specifying the same
        identifier-1 had been written with one statement being a Format 1
        statement with TALLYING phrases identical to those specified in
        the Format 3 statement, and the other statement being a Format 2
        statement with REPLACING phrases identical to those specified in
        the Format 3 statement.  The General Rules given for matching and
        counting apply to the Format 1 statement and the General Rules
        given for matching and replacing apply to the Format 2 statement.
For ANS85 only:  Format 4.   
18.     A Format 4 INSPECT statement is interpreted and executed as
        though a Format 2 INSPECT statement specifying the same
        identifier-1 had been written with a series of ALL phrases, one
        for each character of literal-4.  The effect is as if each of
        these ALL phrases referenced, as literal-1, a single character of
        literal-4 and referenced, as literal-3, the corresponding single
        character of literal-5.  Correspondence between the characters of
        literal-4 and the characters of literal-5 is by ordinal position
        within the data item.
19.     If identifier-4, identifier-6 or identifier-7 occupies the same
        storage area as identifier-1, the result of the execution of this
        statement is undefined, even if they are defined by the same data
        description entry.
The MERGE Statement 
Function.   
The MERGE statement combines two or more identically sequenced files on a
set of specified keys, and during the process makes records available, in
merge order, to an output procedure or to an output file.
General Format.   
            
Syntax Rules.   
   1.  File-name-1 must be described in a sort-merge file description
       entry in the Data Division.
   2.  Procedure-name-1 represents the name of an output procedure.
   3.  Procedure-name-1 and procedure-name-2 must be section-names.
       For ANS85and OSVS only:  This restriction is removed.
   4.  For ANS85 only:  If the file referenced by file-name-1 contains
       variable length records, the size of the records contained in the
       files referenced by file-name-2 and file-name-3 must not be less
       than the smallest record, nor greater than the largest record
       described for file-name-1.  If the file referenced by file-name-1
       contains fixed length records, the size of the records contained
       in the files referenced by file-name-2 and file-name-3 must not be
       greater than the largest record described for file-name-1.
   5.  File-name-2, file-name-3, and file-name-4 must be described in a
       file description entry, not in a sort-merge file description
       entry, in the Data Division.
   6.  The words THRU and THROUGH are equivalent.
   7.  Data-name-1 is a KEY data-name and is subject to the following
       rules:
          a.  The data items identified by KEY data-names must be
              described in records associated with file-name-1.
          b.  KEY data-names can be qualified.
          c.  The data items identified by KEY data-names must not be
              variable length items.
          d.  If file-name-1 has more than one record description, then
              the data items identified by KEY data-names need be
              described in only one of the record descriptions.  The same
              character position referenced by a key data-name in one
              record description entry are taken as the key in all
              records of the file.
          e.  None of the data items identified by KEY data-names can be
              described by an entry which either contains an OCCURS
              clause or is subordinate to an entry which contains an
              OCCURS clause.
          f.  For OSVS, VSC2 and MF only:  KEY data items can be
              floating-point items .
          g.  For OSVS, VSC2 and MF only:  If the KEY is an external
              floating-point item, the key is treated as alphanumeric.
              The sequence in which the records are merged depends on the
              collating sequence used.
          h.  For OSVS, VSC2 and MF only:  If the KEY is an internal
              floating-point item, the sequence of key values will be in
              numeric order.
   8.  No more than one file-name from a multiple file reel can appear in
       the MERGE statement.
   9.  File-names must not be repeated in the MERGE statement.
  10.  MERGE statements can appear anywhere except in the declaratives
       portion of the Procedure Division.
  11.  For ANS85 only:  If file-name-4 references an indexed file, the
       first specification of data-name-1 must be associated with an
       ASCENDING phrase, and the data item referenced by that data-name-1
       must occupy the same character positions in its record as the data
       item associated with the prime record key for that file.
  12.  For ANS85 only:  If the GIVING phrase is specified and the file
       referenced by file-name-4 contains variable length records, the
       size of the records contained in the file referenced by
       file-name-1 must be less than the smallest record nor greater than
       the record described for file-name-4.  If the file referenced by
       file-name-4 contains fixed length records, the size of the records
       contained in the file referenced by file-name-1 must not be
       greater than the largest record described for file-name-4.
  13.  If you want to specify more than 10 file-names in the USING or
       GIVING clause, you must use the system directive CALLSORT"EXTSM";
       this allows you to specify up to 255 files.
General Rules.   
   1.  The MERGE statement merges all records contained on the files
       referenced by file-name-2 and file-name-3.
   2.  If the file referenced by file-name-1 contains only fixed length
       records, any record in the file referenced by file-name-2 or
       file-name-3 containing fewer character positions than that fixed
       length is space filled on the right, beginning with the first
       character position after the last character in the record, when
       that record is released to the file referenced by file-name-1.
   3.  The data-names following the word KEY are listed from left to
       right in the MERGE statement in order of decreasing significance
       without regard to how they are divided into KEY phrases.  The
       leftmost data-name is the major key, the next data-name is the
       next more significant key, and so on.
          a.  When the ASCENDING phrase is specified, the merged sequence
              will be from the lowest value of the contents of the data
              items identified by the key data-names to the highest
              value, according to the rules for comparison of operands in
              a relation condition.
          b.  When the DESCENDING phrase is specified, the merged
              sequence will be from the highest value of the contents of
              the data items identified by the key data-names to the
              lowest value, according to the rules for comparison of
              operands in a relation condition.
   4.  When, according to the rules for comparison of operands in
       relation condition, the contents of all the key data items of one
       data record are equal to the corresponding key data items of one
       or more other data records, the order of return of these records:
          a.  follows the order of the associated input files as
              specified in the MERGE statement
          b.  is such that all records associated with one input file are
              returned prior to the return of records from another input
              file.
   5.  The collating sequence that applies to the comparison of the
       nonnumeric key data items specified is determined at the beginning
       of the execution of the MERGE statement in the following order of
       precedence:
          a.  First, the collating sequence established by the COLLATING
              SEQUENCE phrase, if specified, in that MERGE statement.
          b.  Second, the collating sequence established as the program
              collating sequence.
   6.  The results of the merge operation are undefined unless the
       records in the files referenced by file-name-2 and file-name-3 are
       ordered as described in the ASCENDING or DESCENDING KEY phrases
       associated with the MERGE statement.
   7.  All the records in the files referenced by file-name-2 and
       file-name-3 are transferred to the file referenced by file-name-1.
       At the start of execution of the MERGE statement, the files
       referenced by file-name-2 and file-name-3 must not be in the open
       mode.  For each of the files referenced by file-name-2 and
       file-name-3 the execution of the MERGE statement causes the
       following actions to be taken:
          a.  The processing of the file is initiated.  The initiation is
              performed as if an OPEN statement with the INPUT phrase had
              been executed.  If an output procedure is specified, this
              initiation is performed before control passes to the output
              procedure.
          b.  The logical records are obtained and released to the merge
              operation.  Each record is obtained as if a READ statement
              with the NEXT and the AT END phrases had been executed.
              If the file referenced by file-name-1 is described with
              variable length records, the size of any record written to
              file-name-1 is the size of that record when it was read
              from file-name-2 or file-name-3, regardless of the content
              of the data item referenced in the DEPENDING ON phrase of
              either a RECORD IS VARYING clause or an OCCURS clause
              specified in the sort-merge file description entry for
              file-name-1.
              For a relative file, the content of the relative data key
              item is undefined after the execution of the MERGE
              statement.
          c.  The processing of the file is terminated.  The termination
              is performed as if a CLOSE statement without optional
              phrases had been executed.  If an output procedure is
              specified, this termination is not performed until after
              control passes the last statement in the output procedure.
              These implicit functions are performed such that any
              associated USE AFTER EXCEPTION/ERROR procedures are
              executed.
              The value of the data item referenced by the DEPENDING ON
              phrase of a RECORD IS VARYING clause specified in the file
              description entry for file-name-2 or file-name-3 is
              undefined upon completion of the MERGE statement.
   8.  The output procedure can consist of any procedure needed to
       select, modify or copy the records that are made available one at
       a time by the RETURN statement in merged order from the file
       referenced by file-name-1.  The range includes all statements that
       are executed as the result of a transfer of control by CALL, EXIT,
       GO TO, and PERFORM statements in the range of the output
       procedure, as well as all statements in declarative procedures
       that are executed as a result of the execution of statements in
       the range of the output procedure.  The range of the output
       procedure must not cause the execution of any MERGE, RELEASE, or
       SORT statement.  (See the section Explicit and Implicit 
       Specifications in the chapter Concepts of the COBOL Language.)
   9.  If an output procedure is specified, control passes to it during
       execution of the MERGE statement.  The compiler inserts a return
       mechanism at the end of the last statement in the output
       procedure.  When control passes the last statement in the output
       procedure, the return statement provides for termination of the
       merge, and then passes control to the next executable statement
       after the MERGE statement.  Before entering the output procedure,
       the merge procedure reaches a point at which it can select the
       next record in merged order when requested.  The RETURN statements
       in the output procedure are the requests for the next record.
  10.  During the execution of the output procedure, no statement can be
       executed manipulating the file referenced by, or accessing the
       record area associated with, file-name-2, file-name-3, or
       file-name-4.
  11.  If the GIVING phrase is specified, all the merged records are
       written on the file referenced by file-name-4 as the implied
       output procedure for the MERGE statement.  At the start of
       execution of the MERGE statement, the file referenced by
       file-name-4 must not be in the open mode.  For each of the files
       referenced by file-name-4, the execution of the MERGE statement
       causes the following actions to be taken:
          a.  The processing of the file is initiated.  The initiation is
              performed as if an OPEN statement with the OUTPUT phrase
              had been executed.
          b.  The merged logical records are returned and written onto
              the file.  Each record is written as if a WRITE statement
              without any optional phrases had been executed.
              If the file referenced by file-name-4 is described with
              variable length records, the size of any record written to
              file-name-4 is the size of that record when it was read
              from file-name-1, regardless of the content of the data
              item referenced in the DEPENDING ON phrase of either a
              RECORD IS VARYING clause or an OCCURS clause specified in
              the file description entry for file-name-4.
              For a relative file, the relative key data item for the
              first record returned contains the value "1"; for the
              second record returned, the value "2", and so on.  The
              content of the relative key data item is undefined after
              execution of the MERGE statement.
          c.  The processing of the file is terminated.  The termination
              is performed as if a CLOSE statement without optional
              phrases had been executed.
       These implicit functions are performed such that any associated
       USE AFTER EXCEPTION/ERROR procedures are executed; however, the
       execution of such a USE procedure must not cause the execution of
       any statement manipulating the file referenced by, or accessing
       the record area associated with, file-name-4.  On the first
       attempt to write beyond the externally defined boundaries of the
       file, any USE AFTER EXCEPTION/ERROR procedure specified for the
       file is executed; if control is returned from the USE procedure or
       if no such USE procedure is specified, the processing of the file
       is terminated as in paragraph 11c above.
       The value of the data item referenced by the DEPENDING ON phrase
       of a RECORD IS VARYING clause specified in the file description
       entry for file-name-1 is undefined upon completion of the MERGE
       statement for which the GIVING phrase is specified.
  12.  If the file referenced by file-name-4 contains only fixed length
       records, any record in the file referenced by file-name-1
       containing fewer character positions than that fixed length is
       space filled on the right, beginning with the first character
       position after the last character in the record, when that record
       is returned to the file referenced by file-name-4.
  13.  Segmentation, as defined in the chapter Segmentation in your
       Language Reference - Additional Topics, can be applied to programs
       containing the MERGE statement.  However, the following
       restrictions apply:
          a.  If the MERGE statement appears in a section that is not in
              an independent segment, then any output procedure
              referenced by that merge statement must appear:
                 i.  totally within non-independent segments, or
                ii.  wholly contained in a single independent segment.
          b.  If a MERGE statement appears in an independent segment,
              then any output procedure referenced by that MERGE
              statement must be contained:
                 i.  totally within non-independent segments, or
                ii.  wholly within the same independent segment as that
                     MERGE statement.
  14.  For VSC2, OSVS and MF only:  The SORT-RETURN special register is
       available to MERGE programs.  It contains a return code of 0
       (successful) or 16 (unsuccessful) at the completion of the merge
       operation.  You can set the special register to 16 in the output
       procedure to terminate a merge operation before all records are
       processed.  The operation is terminated on the next RETURN
       statement.
 
  
  
  
 
 MPE/iX 5.0 Documentation