PICTURE 句

PICTURE 句では、基本項目の一般的性質および編集要件を記述する。

一般形式


*

構文規則

  1. PICTURE 句は、基本項目レベルでのみ指定できる。
  2. 文字列 (character-string) は、COBOL 文字集合に含まれる文字を記号として用い、一定の規則に従って組み合わせたものである。この組み合わせによって、基本項目の項類が決まる。
  3. 文字列で使用できる最大文字数は 30 文字である。

    ISO2002MFOS390 文字列で使用できる最大文字数は 50 文字である。

  4. RENAMES 句の左辺には PICTURE 句を指定できない。
  5. PIC は、PICTURE の省略形である。
  6. ゼロ抑制記号として使用する星印 (*) および BLANK WHEN ZERO 句は、同じ記述項内では併用しないほうがよい。

    OSVS ただし、この構成は許容はされ、ゼロ抑制が BLANK WHEN ZERO 句に優先する。

  7. 文字に続けて整数をかっこで囲んで指定すると、整数が示す回数だけその文字を繰り返すことを意味する。

一般規則

PICTURE 句で記述できるデータの項類は、英字、数字、英数字、英数字編集、数値編集、

OSVSVSC2MF 外部浮動小数点数、

ISO2002MF ブール値

である。

ISO2002MF 

以下に、これらの項類の一般規則を記す。

英字データの規則

  1. PICTURE 文字列に含められるのは、「A」および「B」記号のみである。

    ANS85 PICTURE 文字列に含められるのは、「A」記号のみである。

  2. 標準データ形式で表わす内容は、1 つ以上の英字とする。

数値データの規則

  1. PICTURE 文字列に含められるのは、「9」、「P」、「S」、および「V」記号のみであり、最大桁数は 18 までである。または、

    ISO2002OS390 PICTURE 文字列に含められる桁数は 31 までである。または、

    MF PICTURE 文字列に含められる桁数は 38 までである。

  2. 符号を付けない場合、標準データ形式のデータはアラビア数字の「0」、「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」、および「9」を組み合わせたものとする。符号を付ける場合は、上記の数字の他に、「+」、「-」またはその他の演算記号も含められる。「SIGN 句」のトピックを参照。

英数字データの規則

  1. PICTURE 文字列に含められる記号文字は、記号「A」、「X」、および「9」の特定の組み合わせのみであり、項目は、文字列がすべて「X」で記述された場合と同様に扱われる。PICTURE 文字列に含まれる記号文字がすべて「A」または「9」である場合、英数字項目として定義されない。
  2. 標準データ形式で表わした内容は、コンピューターの文字集合内の任意の文字で構成できる。

英数字編集データの規則

  1. PICTURE 文字列で使用できるのは、以下の規則に基づいた、「A」、「X」、「9」、「B」、「0」、および「/」の特定の組み合わせのみである。
    1. 文字列には、1 つ以上の「B」および 1 つ以上の「X」、または 1 つ以上の「0」(ゼロ) および 1 つ以上の「X」、または 1 つ以上の「/」(斜線) および 1 つ以上の「X」を含める。または、
    2. 文字列には、1 つ以上の「0」(ゼロ) および 1 つ以上の「A」、または 1 つ以上の「/」(斜線) および 1 つ以上の「A」を含める。
  2. 標準データ形式で表わした内容は、コンピューターの文字集合内の任意の文字で構成できる。

数字編集データの規則

  1. PICTURE 文字列で使用できるのは、記号「B」、「/」、「P」、「V」、「Z」、「0」、「9」、「,」、「.」、「*」、「+」、「-」、「CR」、「DB」、および通貨記号の特定の組み合わせのみである。使用できる組み合わせは、以下のとおり、記号の優先順位および編集規則によって決まる。
    1. PICTURE 文字列に含められる桁数は 18 までである。または、

      ISO2002OS390 PICTURE 文字列に含められる桁数は 31 までである。または、

      MF PICTURE 文字列に含められる桁数は 38 までである。

    2. PICTURE 文字列には、1 つ以上の「0」、「B」、「/」、「Z」、「*」、「+」、「,」、「.」、「-」、「CR」、「DB」、または通貨記号を含める。
  2. 桁を表す文字位置の内容は、1 つの数値とする。
  3. PICTURE 文字列のすべての文字位置が挿入文字によって表わされている場合、1 つ以上の挿入文字を小数点の左側に配置する。
OSVSVSC2MF 

外部浮動小数点データ項目

  1. PICTURE 文字列は、以下の形式にする。


    *

    符号文字は、仮数部および指数部の直前に配置する。

    「+」符号は、出力値が正数であれば正号を使用し、負の符号は負数を表すことを示す。

    「-」符号は、出力値が正数であれば符号は使用せず、負の符号は負数を表わすことを示す。

    各符号位置は、1 バイトの記憶域を占める。

    significand

    仮数部 (significand) には、以下の記号を含められる。

    9 .V

    実小数点は「.」で表わし、想定小数点は「V」で表わす。仮数部には実小数点または想定小数点のどちらかを含める。小数点は、左端、中間部、または右端のどこにあってもよい。仮数部の長さは 1 桁以上 16 桁以下とする。

    E

    指数を示す。

    exponent

    指数部 (exponent) は、PIC "99" の形式にする。

  2. 外部浮動小数点数項目には、OCCURS、REDEFINES、および RENAMES 句を関連付けられる。
  3. SIGN 句は注記になり、符号の表現には影響しない。
  4. SYNCHRONIZED 句は注記になる。
  5. 外部浮動小数点数項目では、以下の句は無効となる。

    BLANK WHEN ZERO JUSTIFIED VALUE

ブール データの規則

  1. PICTURE 文字列に含められるのは、「1」記号のみである。
  2. PICTURE 文字列に含められる桁数は 64 までである。
  3. 値は、開始分離符「B"」を使用して定数で指定できる (「B"1110"」など)。値はビットで表される。

説明:

基本項目のサイズとは、標準データ形式の基本項目が占める文字位置の数を意味する。このサイズは、文字位置を表わすために使用できる記号の数によって決まる。記号文字「A」、「,」、「X」、「9」、「P」、「Z」、「*」、「B」、「/」、「0」、「+」、「-」、または通貨記号の後にかっこで囲まれた整数は、その記号を複製する数を示す。以下の記号は、所定の PICTURE では 1 つしか使用できないことに注意。「S」、「,」、「V」、「.」、「CR」、「DB」

OSVSVSC2MF および「E」。

基本項目を記述するために使用する記号の働きを以下で説明する。

A PICTURE 文字列内の各「A」記号は、1 文字の英字または 1 つの空白のみを含められる文字位置を表わす。
B PICTURE 文字列内の各「B」記号は、空白文字を挿入できる文字位置を表わす。
OSVSVSC2MF  E 外部浮動小数点数項目の指数部の開始を示す。指数部は、実行時に 1 バイトの記憶域を占める。
P PICTURE 文字列内の各「P」記号は、データ項目内の数値に小数点が含まれていない場合に、想定小数点の位置を指定するために使用する 10 進数の想定位取りを表わす。位取り文字「P」は、データ項目のサイズには含まれない。数字編集項目または数字項目の最大桁数を判定する際には、位取り文字は数に入れられる。位取り文字「P」は、PICTURE 記述内の左端または右端でのみ、複数の「P」からなる一連の文字列として使用できる。これは、「P」が想定小数点を示すためである。つまり、PICTURE 文字列の左端に「P」がある場合はその左に想定小数点があることになり、PICTURE 文字列の右端に「P」がある場合はその右に想定小数点があることになる。そのような PICTURE 記述の左端または右端に想定小数点記号の「V」を書くことは、定義の重複である。

文字「P」および挿入文字「.」(小数点) は、同一の PICTURE 文字列には含められない。データ項目の内部表現を別の形式に変換する処理を含む操作で、変換対象のデータ項目の PICTURE 文字列に「P」が記述されていると、「P」で記述する各桁位置にはゼロの値が含まれていると見なされ、データ項目のサイズにはそのように記述された桁位置が含まれると見なされる。

ANS85 PICTURE 文字列に記号「P」が含まれるデータ項目を参照する処理では、そのデータ項目の実際の文字表現ではなく、そのデータ項目の代数値が使用される。この代数的値は、記号「P」で指定した桁位置の代わりに、所定の位置の小数点およびゼロを想定する。値のサイズは、PICTURE 文字列が表わす桁位置数となる。これらの処理は、以下の場合に行われる。

  1. 数字の送信側作用対象を必要とする処理
  2. 送信側の作用対象が数字であり、その PICTURE 文字列が記号「P」を含む基本 MOVE 文の使用時
  3. 送信側の作用対象が数字編集であり、その PICTURE 文字列が記号文字「P」を含み、受信側の作用対象が数字または数字編集である場合の MOVE 文の使用時
  4. 両方の作用対象が数字である場合の比較処理

ANS85 上記以外のすべての処理では、記号「P」で指定した桁位置は無視され、作用対象のサイズには含まれない。

S PICTURE 文字列内で使用する文字「S」は、演算符号の存在を示す。ただし、演算符号の表現形式および位置を必ずしも示すものではない。「S」は PICTURE 文字列の左端に書く。「S」は、標準データ形式の文字での基本項目のサイズには含まれない。ただしその記述項が、オプションの SEPARATE CHARACTER を指定する SIGN 句に属する場合は、「S」は項目のサイズに含まれる。「SIGN 句」のトピックを参照。
V PICTURE 文字列内で使用する文字「V」は、想定小数点の位置を示し、1 つの PICTURE 文字列につき 1 つだけ使用できる。「V」は文字位置を表わさないため、基本項目のサイズには含まれない。PICTURE 文字列の右端の文字の右側に想定小数点を配置すると、「V」の記述は冗長となる。
X PICTURE 文字列で使用する各「X」は、1 つの文字位置を示し、コンピューターの文字集合で使用できる任意の文字を含められる。
Z PICTURE 文字列内で使用する各「Z」は、左端の数字の文字位置の内容がゼロの場合に、空白文字で置き換えられるその文字位置を表すためにのみ使用できる。「Z」は項目のサイズに含まれる。
9 PICTURE 文字列内で使用する各「9」は、数字を含む 1 つの文字位置を表し、項目のサイズに含まれる。
0 PICTURE 文字列内で使用する各「0」(ゼロ) は、数字のゼロを挿入する 1 つの文字位置を表す。「0」は項目のサイズに含まれる。
/ PICTURE 文字列内で使用する各「/」(斜線) は、斜線文字を挿入する 1 つの文字位置を表す。「/」は項目のサイズに含まれる。
, PICTURE 文字列内で使用する各「,」(カンマ) は、「,」文字を挿入する 1 つの文字位置を表す。この文字位置は項目のサイズに含まれる。挿入文字「,」は、PICTURE 文字列の最後の文字として使用できない。

ANS85 挿入文字「,」を、PICTURE 文字列の最後の文字として使用できる。

. PICTURE 文字列内で使用する文字「.」(小数点) は、編集記号であり、桁合わせの基準となる小数点を表わす。さらに、文字「.」を挿入する文字の位置も表わす。「.」は項目のサイズに含まれる。特殊名段落で DECIMAL-POINT IS COMMA 句を指定すると、所定のソース単位について、小数点およびカンマの機能が入れ替わる。この入れ替えにより、PICTURE 句内の小数点およびカンマについては、小数点に関する規則がカンマに適用され、カンマに関する規則が小数点に適用される。挿入文字「.」は、PICTURE 文字列の最後の文字として使用できない。

ANS85 挿入文字「.」は、PICTURE 文字列の最後の文字として使用できる。

+、-、 CR、DB これらの記号は、符号編集制御記号として使用する。これらを使用すると、符号編集制御記号を配置する文字位置を表す。これらの記号は、任意の 1 つの文字列内で相互に排他的であり、記号内で使用する各文字はデータ項目のサイズに含まれる。
* PICTURE 文字列内で使用する各「*」(星印) は、その位置の内容がゼロの場合に星印を配置する先頭の数字の文字位置を表す。「*」は項目のサイズに含まれる。
cs 通貨記号は、編集中に通貨文字列を配置する文字位置を表す。通貨記号は、通貨記号によって、または特殊名段落の CURRENCY SIGN 句で指定した通貨記号のいずれかによって、character-string-1 で表される。

通貨記号の最初の出現箇所で、通貨文字列の文字数が項目のサイズに加算される。通貨記号の後続の出現箇所では、それぞれ項目のサイズに 1 を加える。

CURRENCY-SIGN コンパイラ指令は、使用する通貨記号にも影響を与える。

PICTURE 句で編集を実行する一般的な方法として、挿入およびゼロ抑制の 2 つがある。挿入編集には以下の 4 種類がある。

  1. 単純挿入
  2. 特殊挿入
  3. 固定挿入
  4. 浮動挿入

抑制および置換編集には以下の 2 種類がある。

  1. 空白によるゼロ抑制
  2. 星印によるゼロ抑制

項目に対して実行できる編集の種類は、その項目が属する項類に依存する。以下の表に、特定の項類に対してどの種類の編集を実行できるかを示す。

表 1. データの項類に適用できる編集の種類
項類 編集の種類
英字 「B」の単純挿入のみ (下記の注 1 を参照)
数字 なし
英数字 なし
英数字編集 「0」、「B」、および「/」の単純挿入
数値編集 すべて (下記の注 2 を参照)
DBCS 単純挿入
外部浮動小数点数 特殊挿入
注:
  1. ANS85 ANSI'74 規格では、「A」および「B」の両方を含む PICTURE 句は、英字の項類での単純挿入として扱われていた。ANSI'85 規格では、英字の項類で「B」がサポートされなくなったため、両方を含む PICTURE 句は、英数字編集の項類での単純挿入として扱われるようになった。
  2. 1 つの PICTURE 句内で、浮動挿入編集およびゼロ抑制編集を同時に指定することはできない。1 つの PICTURE 句内では、1 種類のゼロ抑制のみを指定できる。

「,」(カンマ)、「B」(空白)、「0」(ゼロ)、および「/」(斜線) は、挿入文字として使用する。挿入文字は項目のサイズに含まれ、項目中で文字を挿入する位置を表わす。

OSVSVSC2MF この種類の編集は、数字編集項目または外部浮動小数点数項目に対して使用できる。

「.」(小数点) は、挿入文字として使用できる。また、桁合わせの基準となる小数点を表わすためにも使用する。実小数点用に使用する挿入文字は、項目のサイズに含まれる。同じ PICTURE 文字列内で、記号「V」で表わされる想定小数点と、この挿入文字で表わされる実小数点を併せて指定することはできない。特殊挿入編集を施すと、PICTURE 文字列内で示す位置と同じ位置にある項目に挿入文字が含まれる。

通貨文字列および符号編集制御記号「+」、「-」、「CR」、および「DB」は挿入文字である。1 つの PICTURE 文字列内で使用できるのは、1 つの通貨記号またはいずれか 1 つの符号編集制御記号のどちらかのみである。記号「CR」または「DB」を使用する場合、文字列の右端に配置する。これらの記号は、項目のサイズに 2 文字分として含まれる。記号「+」または「-」を使用する場合、右端または左端の文字位置に配置する。これらの記号は、項目のサイズに含まれる。通貨編集用記号は、文字列の左端に置く。

表 2. PICTURE 文字列における編集用記号
PICTURE 文字列内の編集用記号 編集の結果挿入される文字
データ項目が正数またはゼロの場合 データ項目が負数の場合
+ + -
- 1 つの空白 -
CR 2 つの空白 CR
DB 2 つの空白 DB

通貨記号および符号編集制御記号「+」および「-」は浮動挿入記号であり、1 つの PICTURE 文字列では同時に指定できない。

浮動挿入編集を行うには、PICTURE 文字列内で複数の浮動挿入記号を含む文字列を指定する。この浮動挿入文字列には、任意の単純挿入文字を含められる。または、この文字列の右隣に単純挿入文字を配置できる。これらの単純挿入文字は、浮動挿入文字列の一部となる。

浮動挿入文字が通貨記号である場合、この浮動挿入文字列の右隣に符号編集制御記号「+」、「-」、「CR」、または「DB」のいずれか 1 つを記述できる。

浮動挿入文字列の左端の文字は、データ項目内の浮動記号の左端の限界を表す。浮動文字列の右端の文字は、データ項目内の浮動記号の右端の限界を表す。

左端から 2 番目の浮動文字は、そのデータ項目内で数値データを格納できる左端の限界を示す。この限界以降右側の文字はすべて、ゼロでない数値データで置き換えられる。

PICTURE 文字列内では、浮動挿入編集を表す方法は 2 通りある。1 つは、小数点の左側の数字位置の先頭の一部または全部を、挿入文字で表す方法である。もう 1 つは、PICTURE 文字列内のすべての数字位置を、挿入文字で表す方法である。

PICTURE 文字列内で小数点の左側にのみ挿入文字がある場合、単一の浮動挿入文字が挿入される。その位置は、小数点のすぐ左、または挿入文字列が表わすデータのゼロでない最初の数字のすぐ左であり、PICTURE 文字列内でどちらか左よりの方となる。実際に挿入される挿入文字よりも左側の文字位置は、空白で置き換えられる。

PICTURE 文字列内のすべての数字位置を挿入文字で表した場合、結果はデータの値によって異なる。値がゼロである場合は、そのデータ項目全体に空白が含まれる。値がゼロでない場合は、小数点の左側にのみ挿入文字がある場合と同じ結果となる。

ANS85 PICTURE 文字列内のすべての数字位置を挿入文字で表した場合、1 つ以上の数字位置を、想定小数点または実小数点の左に配置する。

切り捨てを回避するには、受信側データ項目の PICTURE 文字列の最小サイズを、次の 3 つの数字を加算した値にする。1) 送信側データ項目の文字数。2) 受信側データ項目へと編集する固定挿入文字の数。3) 浮動挿入文字用の 1 文字。

数字位置の先行ゼロを抑制するには、PICTURE 文字列内で英字「Z」または文字「*」(星印) を抑制記号として使用する。これらの記号は、所定の PICTURE 文字列内では、どちらか一方しか指定できない。各抑制記号は、項目のサイズに含まれる。「Z」を使用すると、先行ゼロは空白で置換され、「*」を使用すると、先行ゼロは星印で置換される。

ゼロ抑制を指定するには、PICTURE 文字列内で 1 つ以上の抑制記号を含む文字列を使用する。この抑制記号は、データ内の関連付けた文字位置がゼロを含む場合に、ゼロ置換する先行数字位置を示す。抑制記号の文字列内、またはそのすぐ右に埋め込まれた単純挿入文字は、その抑制文字列の一部となる。

PICTURE 文字列内では、ゼロ抑制を表す方法は 2 通りある。1 つは、小数点の左側の数字位置の先頭の一部または全部を、抑制記号で表す方法である。もう 1 つは、PICTURE 文字列内のすべての数字位置を、抑制記号で表す方法である。

小数点の左側にのみ抑制記号がある場合、PICTURE 文字列内の記号に対応するデータ内の先行ゼロは置換文字で置き換えられる。ゼロ抑制が終了する位置は、小数点、またはデータ内の抑制記号文字列が表すゼロ以外の最初の数字のうち、どちらか先に検出された方となる。

PICTURE 文字列内のすべての数字位置を抑制記号で表し、データの値がゼロでない場合、小数点の左側にのみ抑制文字がある場合と同じ結果になる。データの値がゼロであり、抑制記号が「Z」である場合、そのデータ項目全体が空白になる。データの値がゼロであり、抑制記号が「*」である場合、データ項目はすべて星印になる (実小数点は除く)。

記号「+」、「-」、「*」、「Z」、および通貨記号は、浮動置換文字として使用する際には、1 つの PICTURE 文字列内ではいずれか 1 つだけを使用する。

以下の表で、文字列内で文字を記号として使用する際の優先順位を示す。行と列の交差点に「X」と記載されている場合、その列の最上段に示した記号を、その行の左端に示した記号の前に (所定の文字列内で) 記述できることを示す。中かっこ { } で囲まれた文字群は、その中の 1 つしか使用できないことを示す。通貨記号は、「cs」記号で示す。PICTURE 文字列内では、記号「A」、「X」、「Z」、「9」、または「*」のうち 1 つ以上、または記号「+」、「-」、または「cs」のうち 2 つ以上を使用する。

以下の「PICTURE 文字の順位規則」表では、固定挿入記号「+」および「-」、浮動挿入記号「Z」、「*」、「+」、「-」、および「cs」、そして別の記号「P」をそれぞれ 2 回ずつ示してある。各記号の左端の列および最上段の行は、小数点の左側で使用する場合を表わす。行および列で 2 番目に書かれた記号は、小数点の右側で使用する場合を表わす。

表 3. PICTURE 文字の順位規則
最初の記号 固定挿入記号 浮動挿入記号 その他の記号
2 番目の記号   B 0 / , . + - + - CR DB C S E Z * Z * + - + - C S C S 9 A X S V P P G 1
固定挿入記号 B 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    
CR DB X X X X X       X   X X     X X X     X X X    
CC S           X                                    
E       X X                       X     X        
浮動挿入記号 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        
C S X X X X   X                 X                  
C S X X X X X X                 X X       X        
その他の記号 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      
P X X X X   X     X   X   X       X   X   X      
P           X     X                   X X   X    
G X                                           X  
1                                               X