COBOLのデータ型とは?基本のPIC句の書き方を初心者向けにやさしく解説
生徒
「先生、COBOLでデータを使うときって、どうやって種類を決めるんですか?」
先生
「COBOLでは、データの種類を“データ型”で指定します。特にPIC句というのを使って定義します。」
生徒
「PIC句ってなんですか? 難しそう…」
先生
「大丈夫ですよ。PIC句は、データの形(フォーマット)を指定するものです。数字か文字か、小数かなどを決めるんです。では、順番に見ていきましょう!」
1. COBOLのデータ型とは?
プログラミングでは、数字や文字などの「データ」を扱います。そのとき「このデータは数字ですよ」とか「これは文字列ですよ」といった情報が必要になります。これがデータ型(data type)です。
たとえば、名前や年齢といった身近な情報でも、コンピュータ側は「これは数字として計算する? それとも文字としてそのまま表示する?」という判断ができません。人間にとっては当たり前でも、機械にとってはただの0と1の並びなので、あらかじめ「ここは数字」「ここは文字」と決めてあげる必要があります。
COBOLでは、他のプログラミング言語のように「int」や「string」などの型名を書くのではなく、「PIC句(ピックく)」を使ってデータの種類や桁数、形式をまとめて指定します。たとえば、「数字3桁」「文字20桁」といった業務データのルールをそのまま表現できる点が特徴です。
PICとは「PICTURE(ピクチャー)」の略で、「このデータはこんな形ですよ」という“見た目のルール”を定義します。帳票で「ここは金額欄」「ここは名前欄」と枠を決めるのと同じように、COBOLではPIC句を使ってデータの枠や形を細かく指定していきます。
まずは、簡単なサンプルで「データ型をPIC句で決める」というイメージをつかんでみましょう。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SAMPLE-NAME PIC X(10). *> 文字を10桁まで
01 SAMPLE-AGE PIC 99. *> 2桁の数字
PROCEDURE DIVISION.
MOVE "TARO" TO SAMPLE-NAME
MOVE 25 TO SAMPLE-AGE
DISPLAY "名前:" SAMPLE-NAME
DISPLAY "年齢:" SAMPLE-AGE
STOP RUN.
この例では、PIC X(10)が「文字型」、PIC 99が「数字型」という役割を果たします。PIC句さえ理解すれば、COBOLで扱うデータの形がぐっと分かりやすくなります。
2. PIC句の基本構文
基本の構文はこのようになります:
01 変数名 PIC データの形式.
例えば、3桁の数字を扱いたいときは、こう書きます:
01 AGE PIC 999.
ここで使われている「9」は、「数字(0〜9)を1桁分受け取る」という意味です。つまり、「999」と書くと、「3桁の数字」を意味します。
3. PIC句で使われる文字の意味
PIC句でよく使われる文字と意味は以下の通りです:
- 9:数字(0〜9)を1桁
- X:文字(英数字・記号など)を1文字
- A:アルファベット1文字
- V:小数点の位置(実際のデータには表示されない)
- S:符号付き(+や−の意味)
例えば、「S999V99」という定義なら、「符号付きで整数3桁、小数2桁の数値」を扱えます。
4. 数値を扱うPIC句の例
以下に、COBOLで使える数値の例を紹介します。
01 PRICE PIC 999V99.
01 QUANTITY PIC 9(3).
01 TOTAL PIC S9(5)V99.
PRICEは、整数3桁、小数2桁の金額(例:123.45)QUANTITYは、「9(3)」で「999」と同じ意味(3桁の数字)TOTALは、「符号付き」で最大5桁の整数と2桁の小数(例:-12345.67)
5. 文字を扱うPIC句の例
文字や名前などを扱いたいときは、「X」を使います。
01 NAME PIC X(20).
01 GENDER PIC X.
この例では、NAMEは最大20文字の名前、GENDERは1文字(例:「M」や「F」)を想定しています。
6. 実行例を見てみよう
次に、簡単なプログラムを作って、PIC句で定義した変数に値を入れて表示してみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. PIC-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAME PIC X(10).
01 AGE PIC 99.
01 HEIGHT PIC 999V9.
PROCEDURE DIVISION.
MOVE "YUI" TO NAME
MOVE 25 TO AGE
MOVE 160.5 TO HEIGHT
DISPLAY "名前:" NAME
DISPLAY "年齢:" AGE
DISPLAY "身長:" HEIGHT
STOP RUN.
実行結果:
名前:YUI
年齢:25
身長:1605
ここで、HEIGHTは「999V9」として小数点付きのつもりでしたが、「V」は表示されないため「160.5」は「1605」と表示されます。Vは“見えない小数点”という点がポイントです。
7. よくある間違いと注意点
- 「V」は実際の表示には出ません。「160.5」は「1605」として扱われます。
- 桁数オーバーすると、エラーになったり正しく表示されません。例えば「PIC 99」に「123」を入れると、入りきらないため注意が必要です。
- 文字型に数字を入れると、そのまま文字列として扱われます(例:「"123"」は数字ではなく文字)
8. 実務での使いどころ
COBOLでは、銀行の取引データや顧客情報、年齢や金額など、いろいろな形式のデータを扱います。これらを正しいフォーマットで扱うためにPIC句を使います。
例えば、給与明細を作るとき、
- 社員名 →
PIC X(30) - 基本給 →
PIC 9(6)V99 - 控除額 →
PIC S9(5)V99
このように、現実の業務データとピッタリ対応させて、コンピュータに分かる形にするために、データ型の指定とPIC句の理解が大切です。
まとめ
COBOLにおけるデータ型の基礎として、「PIC句(ピクチャ句)」の使い方を学びました。COBOLでは、JavaやPythonのような型名を使わずに、PICを用いてデータの形式を定義します。9は数字、Xは文字、Sは符号付き、Vは小数点の位置といった記号で構成され、業務データの正確な取り扱いを実現しています。
たとえば「PIC 999V99」で金額、「PIC X(20)」で氏名など、実際の帳票やデータベースに合わせた精緻な設計が可能です。このルールを理解していれば、COBOLでのデータ入力・出力・計算処理の基礎が身につきます。
とくに業務アプリケーションでは、誤った桁数の入力や符号なしによるバグを防ぐため、PIC句での定義がとても重要です。単なる型指定ではなく、実際の表示や内部処理の前提になるため、慎重な設計が求められます。桁数や小数点位置のミスが命取りになる銀行・保険などの現場では、COBOLのPIC句はまさに「業務の生命線」とも言えるでしょう。
また、Vが実際の小数点ではないという点も実務上の落とし穴になります。表示結果を確認せずに使うと「160.5」が「1605」として扱われ、誤解を招くこともあります。このような細かい仕様をしっかりと理解しておくことで、COBOLのプログラムが読みやすくなり、保守性も高まります。
実務で役立つPIC句サンプル
以下に、現場でよく使われるようなPIC句を使った定義と表示例を紹介します。
IDENTIFICATION DIVISION.
PROGRAM-ID. PAYROLL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMP-NAME PIC X(20).
01 BASE-SALARY PIC 9(6)V99 VALUE 30000000.
01 DEDUCTION PIC S9(5)V99 VALUE -152000.
01 NET-SALARY PIC S9(6)V99.
PROCEDURE DIVISION.
MOVE "TANAKA TARO" TO EMP-NAME
COMPUTE NET-SALARY = BASE-SALARY + DEDUCTION
DISPLAY "氏名:" EMP-NAME
DISPLAY "基本給:" BASE-SALARY
DISPLAY "控除額:" DEDUCTION
DISPLAY "手取り額:" NET-SALARY
STOP RUN.
このコードでは、EMP-NAMEは氏名用に20文字を確保し、BASE-SALARYとDEDUCTIONは金額として定義されています。S付きのDEDUCTIONを計算に含めることで、手取り額が正しく算出されます。
生徒
「先生、PIC句って最初は難しそうに見えたけど、ルールを覚えたら意外とわかりやすかったです!」
先生
「その調子ですね。COBOLではデータ型をしっかり設計するのが重要ですから、PIC句に慣れることが第一歩です。」
生徒
「でもVが表示されないってのはびっくりしました!最初は小数点が消えたのかと思いましたよ〜」
先生
「そこはCOBOLの特徴ですね。実際の小数点は出なくても、計算上は正しく動いていますから安心してください。」
生徒
「Xは文字、9は数字、Sでマイナス、しっかり区別できるようになってきました!」
先生
「これから実際の業務データを扱うときに、必ず役立ちますよ。引き続き色んなデータ型に触れて慣れていきましょう。」