HP 3000 Manuals

MOVE Statement [ HP COBOL II/XL Reference Manual ] MPE/iX 5.0 Documentation


HP COBOL II/XL Reference Manual

MOVE Statement 

The MOVE statement transfers data to one or more data areas in accordance
with the rules of editing.

Syntax 

The MOVE statement has two general formats:

	       Click here to view figure.
            

Parameters 

identifier-1 and      the sending areas.  The special registers, TALLY,
literal-1             TIME-OF-DAY, CURRENT-DATE, and WHEN-COMPILED may be
                      used as sending items.

identifier-2          and its subsequent occurrences, are the receiving
                      areas.

CORR                  an abbreviation for CORRESPONDING. An index data
                      item cannot be used as an operand of a MOVE
                      statement.

Description 

If you use format 2, both identifiers must be group items.  Selected
items are moved from within identifier-1 to selected items within
identifier-2.  The results are the same as if you referred to each pair
of corresponding identifiers in separate MOVE statements.  The rules
governing correspondence are presented in Chapter 8  under the
heading, "CORRESPONDING Phrase".

If you use format 1, the data designated by literal-1, or by identifier-1 
is moved, in turn, to identifier-2.  Any subscripting or indexing
associated with identifiers to the right of the keyword TO is evaluated
immediately before the data is moved to the respective data items.

Any subscripting, indexing,[REV BEG] reference modification, or
function[REV END] associated with identifier-1 is evaluated only once,
immediately before the data is moved to the first of the receiving
operands.

For example, the result of the following statement:

     MOVE A(B) TO B, C(B)

Is equivalent to the following three statements:

     MOVE A(B) TO temp 
     MOVE temp TO B
     MOVE temp TO C(B)

Where temp is an intermediate result item used internally by the
compiler.  Note that the move of A(B) to B affects the element of C to
which A(B) is moved.  That is, if B is initially one and A(B) is 9, then
after 9 is moved to B, A(1) is moved to C(9).  It is not moved to C(1).

Rules For Moving Data 

All data is moved according to the rules for moving elementary data items
to elementary data items.  This is called an elementary move.  Valid and
invalid moves are determined by the categories of the sending and
receiving data items.  Refer to "PICTURE Clause" in Chapter 7  for a
description of the various categories.

Any move that is not an elementary move is treated exactly as if it were
a move from one alphanumeric elementary data item to another, except that
there is no conversion from one form of internal representation to
another.  In such a move, the receiving data item is filled without
respect to the individual elementary or group items contained in either
the sending or receiving area, except when the sending data item contains
a table whose OCCURS clause uses the DEPENDING ON clause.  In this case,
only the area specified by the DEPENDING ON clause is filled or moved.

 When a receiving item is a variable length data item and contains the 
object  of the DEPENDING ON phrase, the maximum length of the item is
used. 

If the move is from a group to an elementary item, justification takes
place if specified in the receiving item.

Rules For Elementary Moves 

The following rules apply to an elementary move between data items
belonging to one of the five categories of data:

   *   All numeric literals and the figurative constant ZERO belong to
       the numeric category; all nonnumeric literals, and all figurative
       constants except SPACE and ZERO belong to the alphanumeric
       category; SPACE belongs to the alphabetic category.

   *   An alphanumeric-edited or alphabetic data item cannot be moved to
       a numeric or numeric-edited data item.

   *   A numeric or numeric-edited data item cannot be moved to an
       alphabetic data item.

   *   A noninteger numeric literal or noninteger numeric data item
       cannot be moved to an alphanumeric or alphanumeric-edited data
       item.

   *   All other elementary moves are valid and are performed according
       to the rules listed below.

Any necessary conversion from one internal representation to another
takes place during valid elementary moves, as does any editing specified
for, or de-editing implied by, the receiving data item.

Alphanumeric or Alphanumeric-Edited Receiving Item 

When an alphanumeric-edited or alphanumeric item is a receiving data
item, alignment and any necessary space filling takes place as defined
under "Data Alignment" in Chapter 4 .  If the size of the sending item
is larger than the receiving item, the excess characters are truncated on
the right after the receiving data item is filled.

If the sending item is a signed numeric item, the sign is not moved,
regardless of whether the sign is separate or not.  If the sign is
separate, however, the sending item is considered to be one character
shorter than its actual size.  If the sending operand is numeric-edited,
no de-editing takes place.  If the usage of the sending operand is
different from that of the receiving operand, the sending operand is
converted to the internal representation of the receiving operand.  If
the sending operand is numeric and contains the PICTURE symbol 'P', all
digit positions specified with this symbol are considered to have the
value zero and are counted in the size of the sending operand.

Numeric or Numeric-Edited Receiving Item 

When a numeric or numeric-edited item is the receiving item, alignment by
decimal point and any necessary zero filling is performed as defined
under "Data Alignment" in Chapter 4 .  The exception to this rule is
when zeros are replaced because of editing requirements of the receiving
data item.

For signed numeric receiving items, the sign of the sending item is
placed in the receiving item.  An unsigned numeric sending item causes a
positive sign to be generated for the receiving item.  Also, any
conversion of the representation of the sign, such as from a zoned
overpunched sign to a separate sign, is done as necessary.

For an unsigned numeric receiving item, the absolute value of the sending
item is moved and no operational sign is generated for the receiving
item.

For an alphanumeric sending item, data is moved as if the sending item
were described as an unsigned numeric integer.  The ANSI limit for the
length of a numeric item is 18 digits; however, HP COBOL II extends the
limit to the length of an intermediate result, as defined in the COMPUTE
statement.

 When the sending operand is numeric-edited, de-editing is implied to 
establish  the operand's unedited numeric value, which may be signed; 
then the unedited   numeric value is moved to the receiving field.  This 
means that blanks are   converted to zeros and insertion characters and 
floating characters are   stripped.  Any sign characters are translated 
into the proper internal form   of the sign described by the USAGE 
clause.   

Alphabetic Receiving Item 

When a receiving field is described as alphabetic, justification and any
necessary space filling is performed as specified under "Data Alignment"
in Chapter 4 .  If the size of the sending data item is larger than
the receiving data item, the excess characters are truncated to the right
after the receiving item is filled.

Table 9-2  summarizes the rules presented above.

          Table 9-2.  Permissible Moves 

	       Click here to view figure.
            

Example 

     FILE SECTION.
     FD FILE-IN.
     01 FILE-REC.
       02 EMP-FIELD.
          03 NAME     PIC X(20).
          03 AGE      PIC 99.
          03 EMP-NO   PIC X(9).
       02 LOCALE      PIC X(35).
          :
     WORKING-STORAGE SECTION.
     01 FIELD.
        02 SUB-F1   PIC BBXX        VALUE SPACES.
        02 SUB-F2   PIC XX/XX/XX    VALUE SPACES.
     01 NUM-IN      PIC S9(3)V99    VALUE -12099.
     01 CARD-NUM    PIC S9(3)V99    SIGN IS TRAILING VALUE ZERO.
     01 NUM-JUNK    PIC S9(5)       VALUE -12345

     01 INFO-OUT.
        02 EMP-FIELD.
           03 NAME    PIC X(20)BBB        VALUE SPACES.
           03 AGE     PIC XXBBB           VALUE SPACES.
           03 EMP-NO  PIC XXXBXXBXXXXBBB  VALUE SPACES.
        02 EXEMPTIONS PIC 99              VALUE ZERO.

Given the fields described above, the MOVE statement:

     MOVE NUM-IN TO FIELD

gives the result:

     1209R_______

A group move is done with no conversion.

The statement, MOVE NUM-JUNK TO SUB-F2, gives the result:

     12/34/5_

The space to the right was supplied in order to fill the field, and no
operational sign was moved.

Assuming that the current contents of FILE-REC are in order:

     NAME                       JASON_PENNY_________
     AGE                        AGE
     EMP-NO                     585241215
     LOCALE                     WASHINGTON_DISTRICT_OF_COLUMBIA____

and the current contents of INFO-OUT are all spaces for NAME, AGE, and
EMP-NO, and zeros for EXEMPTIONS, then the statement MOVE CORRESPONDING
FILE-REC TO INFO-OUT gives the following results in INFO-OUT,

     NAME                      JASON_PENNY____________
     AGE                       39___
     EMP-NO                    585_24_1215___
     EXEMPTIONS                00

Finally, the MOVE statement:

     MOVE NUM-IN TO CARD-NUM

results in the contents of CARD-NUM being 1209R, since R is the zoned
overpunch character for 9 in a negative number.

 The following example contains a de-edited MOVE statement. 

Given:

     01  NUM-ITEM   PIC S9(5)V99.
     01  EDITED-ITEM  PIC  $ZZZ,ZZZ.99-.

     MOVE -23.00 TO EDITED-ITEM

The following is a valid de-edited MOVE:

     MOVE  EDITED-ITEM  TO NUM-ITEM.

The results of the example above are the same as in the following
example:

     MOVE -23.00 TO NUM-ITEM



MPE/iX 5.0 Documentation