DECODE

Statement: Translates data from character to internal form. It is comparable to using internal files in formatted sequential READ statements.

Syntax

DECODE (c, f, b [, IOSTAT=i-var] [, ERR=label]) [io-list]

c
Is a scalar integer expression. It is the number of characters to be translated to internal form.


f
Is a format identifier. An error occurs if more than one record is specified.


b
Is a scalar or array reference. If b is an array reference, its elements are processed in the order of subscript progression.
b contains the characters to be translated to internal form.


i-var
Is a scalar integer variable that is defined as a positive integer if an error occurs and as zero if no error occurs.


label
Is the label of an executable statement that receives control if an error occurs.


io-list
Is an I/O list. An I/O list is either an implied-do list or a simple list of variables (except for assumed-size arrays). The list receives the data after translation to internal form.

The interaction between the format specifier and the I/O list is the same as for a formatted I/O statement.

Rules and Behavior

The number of characters that the DECODE statement can translate depends on the data type of b. For example, an INTEGER(2) array can contain two characters per element, so that the maximum number of characters is twice the number of elements in that array.

The maximum number of characters a character variable or character array element can contain is the length of the character variable or character array element.

The maximum number of characters a character array can contain is the length of each element multiplied by the number of elements.

See Also: READ, WRITE, ENCODE

Examples

In the following example, the DECODE statement translates the 12 characters in A to integer form (as specified by the FORMAT statement):

     DIMENSION K(3)
     CHARACTER*12 A,B
     DATA A/'123456789012'/
     DECODE(12,100,A) K
100  FORMAT(3I4)
     ENCODE(12,100,B) K(3), K(2), K(1)

The 12 characters are stored in array K:

K(1) = 1234
K(2) = 5678
K(3) = 9012