The PICTURE clause describes the general characteristics and editing requirements of an elementary item.
The maximum number of
characters allowed in the character-string is 50.
This construct is, however, permitted,
in which case zero suppression overrides the BLANK WHEN ZERO clause.
The categories of data that can be described with a PICTURE clause are: alphabetic, numeric, alphanumeric, alphanumeric edited, numeric edited,
and external
floating-point
. General rules within these categories are given below:
The PICTURE character-string can
contain only the symbol "A".
The PICTURE character-string
can contain up to 31 digit positions.
The PICTURE character-string can contain
up to 38 digit positions.
Numeric data can also be held in formats other than standard data format (see the topic The USAGE Clause and the section Selection of Character Representation And Radix in the chapter Concepts of the COBOL Language).
The PICTURE
character-string can contain up to 31 digit positions.
The PICTURE character-string can
contain up to 38 digit positions.
A sign character must immediately precede both the significand and the exponent.
A "+" sign indicates that a positive sign will be used in the output to represent positive values and that a negative sign will represent negative values.
A "-"sign indicates that a blank will be used in the output to represent positive values and that a negative sign will represent negative values.
Each sign position occupies one byte of storage.
significand
The significand can contain the symbols:
9 . V
An actual decimal point can be represented with a period while an assumed decimal point is represented by a V. Either an actual or an assumed decimal point must be present in the significand; the decimal point can be leading, embedded or trailing. The significand can contain from 1 to 16 numeric characters.
E
Indicates the exponent.
exponent
The exponent must be a PIC "99".
BLANK WHEN ZERO JUSTIFIED VALUE
The size of an elementary item, where size means the number of character positions occupied by the elementary item in standard data format, is determined by the number of allowable symbols that represent character positions. An integer which is enclosed in parentheses following the symbols "A", ",", "X" , "9", "P", "Z", "*", "B", "/", "0", "+", "-", or the currency symbol indicates the number of replications of the symbol. Note that the following symbols can appear only once in a given PICTURE: "S" , "V", ".",
"E",
"CR", and "DB".
The functions of the symbols used to describe an elementary item are explained as follows:
A | Each "A" in the character-string represents a character position which can contain only a letter of the alphabet or a space. |
B | Each "B" in the character-string represents a character position into which the space character will be inserted. |
E | Marks the start of the exponent in an external floating-point item. The exponent occupies 1 byte of storage at run time. |
P | Each "P" indicates an assumed decimal scaling position and is used to
specify the location of an assumed decimal point when the point is not within
the number that appears in the data item. The scaling position character "P" is
not counted in the size of the data item. Scaling position characters are
counted in determining the maximum number of digit positions (18) in numeric
edited items or numeric items. The scaling position character "P" can appear
only to the left or right as a continuous string of "P"s within a PICTURE
description; since the scaling position character "P" implies an assumed
decimal point (to the left of "P" s if "P"s are leftmost PICTURE characters and
to the right if "P"s are rightmost PICTURE characters), the assumed decimal
point symbol "V" is redundant as either the leftmost or rightmost character
within such a PICTURE description.
The character "P" and the insertion character "." (period) cannot both occur in the same PICTURE character-string. If, in any operation involving conversion of data from one form of internal representation to another, the data item being converted is described with the PICTURE character "P", each digit position described by a "P" is considered to contain the value zero, and the size of the data item is considered to include the digit positions so described.
|
S | The letter "S" is used in a character-string to indicate the presence, but neither the representation nor, necessarily, the position of an operational sign; it must be written as the leftmost character in the PICTURE. The "S" is not counted in determining the size (in terms of standard data format characters) of the elementary item unless the entry is subject to a SIGN clause which specifies the optional SEPARATE CHARACTER phrase. (See the topic The SIGN Clause.) |
V | The letter "V" is used in a character-string to indicate the location of the assumed decimal point and can only appear once in a character-string. The "V" does not represent a character position and therefore is not counted in the size of the elementary item. When the assumed decimal point is to the right of the rightmost symbol in the string the "V" is redundant. |
X | Each "X" in the character-string is used to represent a character position which contains any allowable character from the computer's character set. |
Z | Each "Z" in a character-string can only be used to represent the leftmost numeric character positions which will be replaced by a space character when the contents of that character position is zero. Each "Z" is counted in the size of the item. |
9 | Each "9" in the character-string represents a character position which contains a numeral and is counted in the size of the item. |
0 | Each "0" (zero) in the character-string represents a character position into which the numeral zero will be inserted. The "0" is counted in the size of the item. |
/ | Each "/" (slash) in the character-string represents a character position into which the slash character will be inserted. The "/" is counted in the size of the item. |
, | Each "," (comma) in the character-string represents a character
position into which the character "," will be inserted. This character position
is counted in the size of the item. The insertion character "," must not be the
last character in the PICTURE character-string.
|
. | When the character "." (period) appears in the character-string it is
an editing symbol which represents the decimal point for alignment purposes
and, in addition, represents a character position into which the character "."
will be inserted. The character "." is counted in the size of the item. For a
given source unit the functions of the period and comma are exchanged if the
clause DECIMAL-POINT IS COMMA is stated in the Special-Names paragraph. In this
exchange the rules for the period apply to the comma and the rules for the
comma apply to the period wherever they appear in a PICTURE clause. The
insertion character " ." must not be the last character in the PICTURE
character-string.
|
+, -, CR, DB | These symbols are used as editing sign control symbols. When used, they represent the character position into which the editing sign control symbol will be placed. The symbols are mutually exclusive in any one character-string and each character used in the symbol is counted in determining the size of the data item. |
* | Each "*" (asterisk) in the character-string represents a leading numeric character position into which an asterisk will be placed when the contents of that position is zero. Each "*" is counted in the size of the item. |
cs | A currency symbol represents character positions into which the
currency string will be placed during editing. A currency symbol is represented
in character-string-1 either by the currency sign or by the currency symbol
specified in a CURRENCY SIGN clause in the Special-Names paragraph.
The first occurrence of the currency symbol adds the number of characters in the currency string to the size of the item. Each subsequent occurrence of the currency symbol adds one to the size of the item. The CURRENCY Compiler directive also affects the currency symbol used. |
Two general methods of performing editing in the PICTURE clause are available: insertion or suppression and replacement. Four types of insertion editing are available:
Two types of suppression and replacement editing are available:
The type of editing which can be performed upon an item is dependent upon the category to which the item belongs. Table 1 specifies which type of editing can be performed upon a given category.
Category | Type of Editing |
---|---|
Alphabetic | Simple insertion "B" only 1 |
Numeric | None |
Alphanumeric | None |
Alphanumeric edited | Simple insertion "0", "B" and "/" |
Numeric edited | All 2 |
DBCS | Simple insertion |
External floating-point | Special insertion |
Notes:
The "," (comma), "B" (space), "0" (zero), and " /" (slash) are used as the insertion characters. The insertion characters are counted in the size of the item and represent the position in the item into which the character will be inserted.
This type of editing is valid for
either numeric edited items or external floating-point items.
The "." (period) is used as the insertion character. In addition to being an insertion character it represents the decimal point for alignment purposes. The insertion character used for the actual decimal point is counted in the size of the item. The use of the assumed decimal point, represented by the symbol "V" and the actual decimal point, represented by the insertion character, in the same PICTURE character-string is disallowed. The result of special insertion editing is the appearance of the insertion character in the item in the same position as shown in the character-string.
The currency string and the editing sign control symbols "+" , "-", "CR", "DB" are the insertion characters. Only one currency symbol and only one of the editing sign control symbols can be used in a given PICTURE character-string. When the symbols "CR" or "DB" are used, they represent two character positions in determining the size of the item and they must represent the rightmost character positions that are counted in the size of the item. The symbol "+" or "-", when used, must be either the leftmost or rightmost character position to be counted in the size of the item. The currency symbol must be the leftmost character.
Editing Symbol in Picture Character-string | Result | |
---|---|---|
Data Item Positive or Zero | Data Item Negative | |
+ | + | - |
- | space | - |
CR | 2 spaces | CR |
DB | 2 spaces | DB |
The currency symbol and the editing sign control symbols "+" and "-" are the floating insertion symbols and as such are mutually exclusive in a given PICTURE character-string.
Floating insertion editing is indicated in a PICTURE character-string by using a string of at least two of the floating insertion symbols. This string of floating insertion characters can contain any of the simple insertion characters or have simple insertion characters immediately to the right of this string. These simple insertion characters are part of the floating string.
When the floating insertion character is the currency symbol, this string of floating insertion characters can have one of the editing sign control symbols "+", "-", "CR" or " DB" immediately to the right of this string.
The leftmost character of the floating insertion string represents the leftmost limit of the floating symbol in the data item. The rightmost character of the floating string represents the rightmost limit of the floating symbols in the data item.
The second floating character from the left represents the leftmost limit of the numeric data that can be stored in the data item. Non-zero numeric data can replace all the characters at or to the right of this limit.
Floating insertion editing can be represented in a PICTURE character-string in only two ways. One way is to represent any or all of the leading numeric character positions on the left of the decimal point by the insertion character. The other way is to represent all of the numeric character positions in the PICTURE character-string by the insertion character.
If the insertion characters are only to the left of the decimal point in the PICTURE character-string, the result is that a single floating insertion character will be placed into the character position immediately preceding either the decimal point or the first non-zero digit in the data represented by the insertion symbol string, whichever is farther to the left in the PICTURE character-string. The character positions preceding the insertion character are replaced with spaces.
If all numeric character positions in the PICTURE character-string are represented by the insertion character, the result depends upon the value of the data. If the value is zero, the entire data item will contain spaces. If the value is not zero, the result is the same as when the insertion character is only to the left of the decimal point.
If all numeric positions in the PICTURE
character string are represented by the insertion character, at least one
numeric position must be to the left of the assumed or actual decimal point.
To avoid truncation, the minimum size of the PICTURE character-string for the receiving data item must be the number of characters in the sending data item, plus the number of non-floating insertion characters being edited into the receiving data item, plus one for the floating insertion character.
The suppression of leading zeros in numeric character positions is indicated by the use of the alphabetic character "Z" or the character "*" (asterisk) as suppression symbols in a PICTURE character-string. These symbols are mutually exclusive in a given PICTURE character-string. Each suppression symbol is counted in determining the size of the item. If "Z" is used, the replacement character will be the space and if the asterisk is used, the replacement character will be "*".
Zero suppression and replacement is indicated in a PICTURE character-string by using a string of one or more of the allowable symbols to represent leading numeric character positions which are to be replaced when the associated character position in the data contains a zero. Any of the simple insertion characters embedded in the string of symbols or to the immediate right of this string are part of the string.
Zero suppression can be represented in a PICTURE character-string in only two ways. One way is to represent any or all of the leading numeric character positions to the left of the decimal point by suppression symbols. The other way is to represent all of the numeric character positions in the PICTURE character-string by suppression symbols.
If the suppression symbols appear only to the left of the decimal point, any leading zero in the data which corresponds to a symbol in the string is replaced by the replacement character. Suppression terminates at the first non-zero digit in the data represented by the suppression symbol string or at the decimal point, whichever is encountered first.
If all numeric character positions in the PICTURE character-string are represented by suppression symbols and the value of the data is not zero, the result is the same as if the suppression characters were only to the left of the decimal point. If the value is zero and the suppression symbol is "Z", the entire data item will be spaces. If the value is zero and the suppression symbol is "*", the data item will be all "*" except for the actual decimal point.
The symbols "+", "-", "*", " Z" and the currency symbol, when used as floating replacement characters, are mutually exclusive within a given character-string.
Table 3 shows the order of precedence when using characters as symbols in a character-string. An "X" at an intersection indicates that the symbol(s) at the top of the column can precede, in a given character-string, the symbol(s) at the left of the row. Arguments appearing in braces indicate that the symbols are mutually exclusive. The currency symbol is indicated by the symbol "cs". At least one of the symbols "A " , "X", "Z", " 9" or "*", or at least two of the symbols "+" , "-" or "cs" must be present in a PICTURE string.
In Table 3, non-floating insertion symbols "+" and "-" , floating insertion symbols "Z", "*", " +", "-", and "cs", and other symbol "P" appear twice in the PICTURE character precedence chart. The leftmost column and uppermost row for each symbol represents its use to the left of the decimal point position. The second appearance of symbol in the row and column represents its use to the right of the decimal point position.
First Symbol | Non-Floating Insertion Symbols | Floating Insertion Symbols | Other Symbols | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Second Symbol | B | 0 | / | , | . | + - | + - | CR DB | CS | E | Z * | Z * | + - | + - | CS | CS | 9 | A X | S | V | P | P | G | |
Non-Floating Insertion Symbols | B | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | |||||
0 | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | |||||||
/ | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | |||||||
, | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | ||||||||
. | x | x | x | x | x | x | x | x | x | x | ||||||||||||||
+ - | ||||||||||||||||||||||||
+ - | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | |||||||||
CR DB | x | x | x | x | x | x | x | x | x | x | x | x | x | x | ||||||||||
CS | x | |||||||||||||||||||||||
E | x | x | x | x | ||||||||||||||||||||
Floating Insertion Symbols | Z * | x | x | x | x | x | x | x | ||||||||||||||||
Z * | x | x | x | x | x | x | x | x | x | x | x | |||||||||||||
+ - | x | x | x | x | x | x | ||||||||||||||||||
+ - | x | x | x | x | x | x | x | x | x | |||||||||||||||
CS | x | x | x | x | x | x | ||||||||||||||||||
CS | x | x | x | x | x | x | x | x | x | |||||||||||||||
Other Symbols | 9 | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | |||||||
A X | x | x | x | x | x | |||||||||||||||||||
S | ||||||||||||||||||||||||
V | x | x | x | x | x | x | x | x | x | x | x | x | ||||||||||||
P | x | x | x | x | x | x | x | x | x | x | x | x | ||||||||||||
P | x | x | x | x | x | |||||||||||||||||||
G | x | x |