COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
生徒
「COBOLで数字を扱うときはどうやって書くんですか?」
先生
「COBOLでは、数値データを表すのに『PIC 9』という書き方を使いますよ。」
生徒
「PIC 9って何ですか?難しそう…」
先生
「心配いりません。今回は、初心者の方にもわかりやすく『PIC 9』の使い方と注意点を丁寧に解説していきますね!」
1. COBOLの数値データ型「PIC 9」とは?
COBOL(コボル)では、数値データを表すときにPIC(ピクチャ)句という書き方を使います。PIC句は、「この変数にはどんな種類のデータを、何桁まで入れてよいか」を決める“ルール表”のようなものです。
その中でもPIC 9は「数字(0〜9)の1桁」を意味します。たとえば、PIC 999と書けば「最大で3桁の数字が入る変数」という決まりになりますし、PIC 9(3)と書いても同じく「3桁の数字」という意味になります。
イメージとしては、「9」が数字を入れるための小さな『マス』で、そのマスをいくつ横に並べるかで、扱える桁数が決まると考えるとわかりやすいです。1マスだけなら1桁、3マス並べれば3桁の数値まで入れられる、というイメージです。
たとえば、テストの点数を入れる変数を用意したい場合は、次のように「3桁までの数値ですよ」というルールをあらかじめ決めておきます。
01 SCORE PIC 9(3).
この例では、SCOREという変数には0〜999までの数値を入れることができ、「ここには数値だけを、最大3桁まで入れます」とCOBOLに伝えていることになります。まずは、「PIC 9=数字用のマス目を並べて桁数を決める仕組み」と理解しておくと、このあと出てくる具体的な定義やサンプルプログラムも読みやすくなります。
2. PIC 9を使った基本的な変数の定義
実際にCOBOLで数値データ型を定義するには、DATA DIVISIONの中で、次のように書きます。
01 AGE PIC 99.
01 PRICE PIC 9999.
01 QUANTITY PIC 9(5).
それぞれの意味は次のとおりです:
AGE PIC 99→ 2桁までの数字(例:23など)PRICE PIC 9999→ 4桁までの数字(例:1234など)QUANTITY PIC 9(5)→ 5桁までの数字(例:12345など)。9(5)のようにまとめて書けます。
3. 実行例を見てみよう
次に、数値変数を使ってDISPLAY文で画面に出力してみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLENUMBERS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AGE PIC 99 VALUE 25.
01 PRICE PIC 9999 VALUE 1500.
01 QUANTITY PIC 9(5) VALUE 12345.
PROCEDURE DIVISION.
DISPLAY "年齢: " AGE
DISPLAY "価格: " PRICE
DISPLAY "数量: " QUANTITY
STOP RUN.
このプログラムを実行すると、以下のような出力が表示されます。
年齢: 25
価格: 1500
数量: 12345
4. PIC 9の注意点
COBOLでPIC 9を使うときには、いくつかの注意点があります。
① 数字以外は入れられない
PIC 9は数字専用です。もし、文字や記号を入れようとすると、エラーになります。
② 桁数が足りないと切り捨てられる
定義した桁数よりも大きな数字を入れようとすると、切り捨てやエラーになる可能性があります。たとえば、PIC 99に「123」を入れようとすると、うまく入りません。
③ ゼロで埋められることがある
数値の先頭に0がつくこともあります。たとえばPIC 999で「5」を表示すると「005」になることがあります(これは使用する環境や設定によります)。
5. 0(ゼロ)や負の数はどう扱う?
PIC 9は整数(プラスの数)を扱う前提です。もし0を扱いたい場合は、もちろん大丈夫です。ただし、マイナス(負の数)を扱いたいときは、S9という書き方を使います。
たとえば、次のように書きます:
01 BALANCE PIC S999 VALUE -200.
Sは「符号付き(Signed)」という意味で、マイナスの数値も扱えるようになります。
6. 実務での使いどころ
PIC 9は、銀行の口座番号、金額、年齢、数量、社員番号など、整数で表せる情報を管理するのに最適です。
たとえば、社員番号が5桁固定の場合:
01 EMPLOYEE-ID PIC 9(5).
金額が999999円までなら:
01 SALARY PIC 9(6).
このように、PIC 9は多くの業務処理でよく使われる重要な要素です。
まとめ
ここまでで、COBOLの数値データ型であるPIC 9(ピクチャ句)の基本、使い方、注意点、実務での活用場面をひと通り整理できた。PIC 9は「数字だけを桁数分だけ格納する」明快な仕組みで、9を並べる個数や9(桁数)という表記で許容桁数を決めるのが出発点である。DATA DIVISIONのWORKING-STORAGE SECTIONに変数を定義し、PROCEDURE DIVISIONでDISPLAYなどの命令を用いて値を扱えば、年齢、数量、金額、社員番号、口座番号といった典型的な整数データを安全に処理できる。切り捨てや桁あふれの挙動、先頭ゼロの扱い、文字ではなく数値としての性質、負の数を表すS9の記法など、初心者が戸惑いやすい論点もひとつずつ確認した。ここで大切なのは、用途に合わせて「ちょうどよい桁数」と「許容する値の範囲」を先に決め、PIC句に反映させる設計思考である。
要点の総整理
- PIC 9は数値専用のピクチャ句で、9を並べた桁数だけ整数を保持する。例として9(5)は五桁、9999は四桁。
- 桁数を超える値は桁あふれや切り捨ての対象になるため、定義前に最大値を見積もることが欠かせない。
- 負の数が必要ならS9で符号付きの数値を定義する。例としてS999やS9(4)などが代表的。
- DISPLAYでの表示は環境により先頭ゼロの見え方が異なる場合があるため、要件に合わせてゼロ埋めの表現を設計する。
- DATA DIVISIONでの変数定義、WORKING-STORAGEでの初期値設定、PROCEDURE DIVISIONでの処理手順をそろえれば、読みやすく保守しやすい構成になる。
桁数設計の考え方
桁数は実務の要件から逆算するのが基本である。年齢なら二桁のPIC 99、数量なら可動域を見て9(5)や9(6)、金額なら最大金額で9(6)や9(7)といった具合に具体的な上限を先に決める。桁数が不足すると桁あふれによる誤りが起き、逆に過剰な桁はデータの表現を曖昧にする。社員番号や口座番号のように桁数が厳密な識別子は、9(5)や9(8)のように固定桁で定義し、入力の検証で桁数違いを即時に弾くと堅牢になる。表示時の先頭ゼロは要件差が大きいため、ゼロを見せるのか隠すのかを業務単位で統一しておくと混乱がない。
文字と数値の違いに関する注意
PIC 9は数字以外を許容しないため、文字や記号が混ざると不正なデータとして扱われる。文字列の入力欄から取り込む過程で意図せず全角文字や空白が混入することはよくあるため、取り込み前に数字の判定を行い、純粋な数値だけがPIC 9に流れるようにする。表示はDISPLAYが中心だが、画面上の装飾や区切りは表示側の要件で制御する方が自然である。数値と文字の責務分離を徹底しておけば、後からの仕様変更にも強い。
負の数と符号付きのS9
負の数を扱う場面は在庫の増減や残高の計算などで珍しくない。PIC 9では符号が表現できないため、S9を使って符号付きの整数を定義する。例としてS999やS9(5)のような表記が使われ、正と負を自然に切り替えられる。実務では負を許す項目と許さない項目が混在するため、項目ごとにS9を採用するかどうかを要件で明確にする。表示の負符号の出し方についても、業務仕様に沿って統一しておくと誤解が生じない。
入力検証とエラーの扱い
入力検証は「桁数」「数字のみ」「範囲」の三点が核になる。たとえばPIC 99に三桁の値を入れようとすれば桁あふれが問題になるし、数字以外が混ざればそもそも数値として認識できない。上限値と下限値を先に決め、妥当でない入力は早い段階で弾く。DISPLAYでの確認とログの出力を組み合わせれば、運用中の不正データの早期発見につながる。検証手順を明文化し、テストケースをWORKING-STORAGEの初期値とともに共有しておくと、チーム全体で統一された品質が保てる。
画面表示と先頭ゼロの整理
先頭ゼロの取り扱いは帳票や画面で見え方が分かれやすい論点である。数量や金額は余計なゼロを見せない方が読みやすいが、社員番号や口座番号のような識別子では固定桁の表現が必要になる。DISPLAYの出力ポリシーを項目単位で定義し、ゼロ埋めを見せる対象と見せない対象を分けておく。これにより、同じ値でも用途ごとに最適な表示が実現できる。
実務シナリオの具体例
年齢はPIC 99、数量は9(5)、社員番号は9(5)固定、金額は9(6)で上限を明確にするのが典型である。勤務管理の工数や受注の数量は一日の現実的な上限を踏まえた桁で定義し、桁あふれが起こらないようにする。銀行業務や会計分野では、識別子と金額の桁設計が全体の整合性を左右するため、PIC句の設計段階で関係部署と合意しておくことが重要だ。
保守とテストの観点
テストでは最小値、最大値、境界の直前直後、数字以外の混入、桁数過不足といったケースを網羅する。WORKING-STORAGEで代表値を初期化してDISPLAYし、出力が期待どおりかを検証する手順を用意すれば、新人でも確実に品質を担保できる。共通のテストシナリオを用意することで、年齢、数量、金額、社員番号といった複数の項目に対して同じ基準で確認が可能になる。
学んだことを使いこなす手順
- 対象データの性質を確認し、整数で表せるか、負の数が必要か、固定桁か可変かを決める。
- 最大値と最小値を見積もり、9の個数または9(桁数)でPIC句を定義する。負の数ならS9を採用する。
- WORKING-STORAGEで初期値を用意し、PROCEDURE DIVISIONでDISPLAYして見え方を確認する。
- 入力検証の手順を整備し、数字のみ・桁数一致・範囲内を満たすことを保証する。
- 画面や帳票の先頭ゼロの表示方針を用途ごとに決め、運用中の一貫性を保つ。
小さなサンプルプログラム(PIC 9とS9の要点)
以下は年齢、数量、金額、符号付き残高を定義してDISPLAYで確認する最小例である。WORKING-STORAGEでの定義とPROCEDURE DIVISIONでの出力が揃えば、PIC 9のふるまいが直感的につかめる。
IDENTIFICATION DIVISION.
PROGRAM-ID. PIC9-SUMMARY.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AGE PIC 99 VALUE 25.
01 QUANTITY PIC 9(5) VALUE 12345.
01 SALARY PIC 9(6) VALUE 150000.
01 BALANCE PIC S9(4) VALUE -200.
PROCEDURE DIVISION.
DISPLAY "年齢:" AGE
DISPLAY "数量:" QUANTITY
DISPLAY "金額:" SALARY
DISPLAY "残高:" BALANCE
STOP RUN.
生徒
「きょうはPIC 9の基本がかなり見えてきました。9(桁数)で上限を決める考え方と、DISPLAYでの見え方の違いが特に印象に残りました。」
先生
「良い着眼点だ。用途に合わせて桁数を先に設計すれば、年齢や数量や金額といった典型項目は安定して表現できる。数字以外を混ぜないという前提も忘れないように。」
生徒
「負の数が必要な項目にはS9を使う、識別子の固定桁は9(固定桁)で定義して桁数違いを弾く、という整理で迷わなくなりそうです。」
先生
「その調子だ。入力検証を早い段階で行い、桁あふれや数字以外の混入を防げば、運用時のトラブルは大きく減る。DISPLAYの表現も用途に合わせて統一しておこう。」
生徒
「次は実務のデータ辞書に落とし込み、項目ごとにPIC 9やS9の定義をそろえて、テストケースも用意してみます。」
先生
「素晴らしい。DATA DIVISIONの定義、WORKING-STORAGEの初期値、PROCEDURE DIVISIONの手順をそろえれば、読みやすく保守しやすいプログラムになるはずだ。」
この記事を読んだ人からの質問
プログラミング初心者からのよくある疑問/質問を解決します
コボルで数値データを定義するときに使うPIC9とは何を意味しますか PIC句の基本やピクチャ句という言葉の意味 数字の桁数と箱という考え方 コボル初心者が最初に理解すべき数値データ型の概念を知りたいです
PIC9は数字専用のピクチャ句であり 一つの9が一桁の数字を受け持つという約束を表します 9を並べた個数が格納できる桁数になります この設計をDATA DIVISIONの定義に反映し 年齢や数量や金額などの整数を無理なく扱うのが基本です 記事の説明どおり PIC9はコボルの数値データ型の出発点であり 桁数の見積もりと用途の整理が最初の一歩になります
9を複数並べる書き方と9に括弧を付ける書き方の違いはありますか PIC999とPIC9(3)の意味は同じなのか 桁数指定の表現方法と読み方を知りたいです
PIC999とPIC9(3)はどちらも三桁の整数を表し意味は同じです 表記が違っても解釈は同一であり 桁数が多い場合に括弧表記が読みやすくなります 記事では9(5)の例が示されており このように括弧を使うと桁の意図が明確になります いずれの表現でも大切なのは用途に合わせて必要十分な桁を決めることです
理解度のクイズ問題
空欄の★に当てはまる内容を答えてください。
01 AGE PIC 99. 01 PRICE PIC 9999. 01 QUANTITY PIC 9(5).