COBOLを勉強していると、必ず出てくる「PIC X」。意味が分からないまま、なんとなく使っていませんか?
この記事では、COBOLで文字データを扱うための「PIC X」の正体と使い方を、初心者にもわかりやすく解説します。文字の定義方法や使い方のルールまで、つまずきやすいポイントを一緒に確認しましょう。
「PICって、Xって、なんだか暗号みたい…」と感じているなら、この記事でスッキリ解決できますよ。
COBOLの文字データ型とは?基本の「PIC X」を理解しよう
プログラミングの世界では、数字や文字などのデータをどんな種類として扱うかがとても大事です。
この「どんな種類か」を決めるのがデータ型です。
たとえば、郵便番号は数字だけ、名前は文字、金額は小数点ありの数字…といった感じですね。
COBOLでは、データ型を「PICTURE句(PIC句)」というルールで書きます。
その中で、文字や文字列を扱うときに使うのがPIC Xです。
「X」は英語で「Alphanumeric(英数字)」を意味する頭文字。英字、数字、記号、スペースなど、ほとんどの半角文字が入れられます。
まずはPIC句のキホンから見ていきましょう。
PICTURE句(PIC句)って何?COBOLデータ定義のキホン
COBOLでは、変数を使う前にどういうデータを入れるのかをあらかじめ決めます。
この時に使うのが、PICTURE句(PIC句)です。
PIC句では、数字か文字か、小数点を使うのか、何文字なのか…など、変数の性格を細かく指定します。
例えば、
01 MY-VALUE PIC X(10).
このように書くことで、「MY-VALUEは半角10文字までの文字を入れる変数ですよ」とCOBOLに伝えられます。
文字だけでなく、数字に特化した「PIC 9」などもありますが、ここでは文字型のPIC Xに注目します。
「まずはPIC句ってそういうものなんだな」とラフに理解しておけばOKです。
文字データ型「PIC X」の意味と特徴
PIC Xは、半角の文字データを扱うための文字型の定番です。
Xが意味するのは「Alphanumeric」、つまり英字・数字・記号・スペースなど、コンピューターが読めるだいたいの文字です。
例えば、
01 USER-ID PIC X(8).
と書けば、8文字分の半角英数字などを入れられる変数になります。
ここで押さえておきたいのが、COBOLは「固定長」スタイルだということです。
「PIC X(8)」と書いたら、実際に中に入っている文字が3文字でも、8文字分のスペースをキープします。
たとえば、
MOVE "ABC" TO USER-ID.
とすると、USER-ID の中身は「ABC 」のように、空白で埋まります。
箱の大きさが決まっているイメージで覚えておくと分かりやすいです。
了解しました!以下に、「COBOL文字データ型の基本的な定義方法(書き方)」とその下位見出しを、指定された構成と制約に沿ってHTML形式で作成しました。 ---COBOL文字データ型の基本的な定義方法(書き方)
文字を扱うには、まず変数を定義する必要があります。
COBOLでは、文字型の変数はPIC X(n)という形で定義します。
たとえば、名前を入れる変数を作りたいときは、次のように書きます。
01 MY-NAME PIC X(10).
この1行には、3つのパーツが含まれています。
- 01:レベル番号(階層構造の番号)
- MY-NAME:変数名(データ項目名)
- PIC X(10):文字型で、10文字まで入るという意味
それぞれの意味をもう少し詳しく見ていきましょう。
レベル番号とデータ項目名:変数の階層と名前
最初の「01」はレベル番号と呼ばれます。
これは、変数同士の関係を表す「グループ分けの番号」です。
初心者の場合は、まず01を使っておけば大丈夫です。
続く「MY-NAME」は、変数の名前です。
COBOLでは、変数名をつけるときにいくつかルールがあります。
- アルファベットと数字が使える
- ハイフン(-)も使えるが、先頭と末尾には使えない
- 英字で始める必要がある
- 予約語(MOVEやIFなど)は使えない
読みやすくて意味の通る名前にするのがコツです。
文字数(n)の指定方法と「固定長」の意味
PIC X のあとのカッコに入れる数字「n」は、何文字まで入るかを指定します。
たとえば、
PIC X(10)
と書けば、半角10文字分の箱を用意するという意味になります。
COBOLの文字型は固定長です。
つまり、10文字用の変数に5文字しか入れないと、残りの5文字は空白(スペース)で自動的に埋まります。
たとえば、こんなコードを書いたとします。
01 VAR-X10 PIC X(10). MOVE "ABC" TO VAR-X10.
この場合、VAR-X10 の中には「ABC 」というデータが入ります。
スペース埋め(Space Padding)が勝手に行われるわけですね。
逆に、10文字より多い文字を入れると、後ろが切り捨てられます。
なので、長さに注意して使いましょう。
了解しました!以下に、「COBOL文字データ型の使い方:具体的な処理例」とその下位見出しの内容を、すべて指定通りHTML形式で作成しました。 ---COBOL文字データ型の使い方:具体的な処理例
変数を定義したら、次は値を入れて表示する処理をやってみましょう。
COBOLでは、MOVE命令で値を入れて、DISPLAY命令で中身を画面に出します。
まずは最低限の構造だけを使った、シンプルなサンプルを紹介します。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE. DATA DIVISION. WORKING-STORAGE SECTION. 01 MY-MESSAGE PIC X(10). PROCEDURE DIVISION. MOVE "HELLO" TO MY-MESSAGE. DISPLAY MY-MESSAGE. STOP RUN.
動作の流れはこんな感じです。
- IDENTIFICATION DIVISION: プログラムの名前を書く場所
- DATA DIVISION: 変数の定義をまとめるところ
- WORKING-STORAGE SECTION: 一時的に使う変数を置く場所
- PROCEDURE DIVISION: 実際の処理を書く部分
MY-MESSAGE に "HELLO" を入れて、それを表示しています。
まずは気軽に、コピペして動かしてみるのが一番です。
値の格納(MOVE命令):変数に文字を入れる
MOVE命令は、右の値を左の変数にコピーする命令です。
MOVE "HELLO" TO MY-MESSAGE.
このコードは、「HELLO」という文字を MY-MESSAGE に入れています。
MOVE A TO B は、AをBにコピー(移動)すると覚えると理解しやすいです。
MY-MESSAGE は PIC X(10) なので、半角10文字まで入る箱です。
HELLO は5文字なので、残りの5文字ぶんはスペースで自動的に埋められます。
つまり、実際の中身は「HELLO 」という状態になります。
スペースもデータの一部として扱われることを意識しておきましょう。
値の表示(DISPLAY命令):変数の中身を確認する
DISPLAY命令は、変数の中に入っている内容を画面に表示する命令です。
DISPLAY MY-MESSAGE.
たったこれだけで、MY-MESSAGE に入っている値が画面に出力されます。
HELLOを入れた場合は「HELLO 」という形で出てきます。
スペース部分もちゃんと表示されるので、見た目の違いに気づけます。
プログラムが正しく動いているかチェックしたい時に、DISPLAYはかなり役立ちます。
了解しました!以下に、指定された構成と制約に基づき、HTML形式で「COBOL文字データ型(PIC X)を扱う上での重要ポイント」と「まとめ:COBOLの文字データ型『PIC X』を使いこなそう!」のセクションを作成しました。 ---COBOL文字データ型(PIC X)を扱う上での重要ポイント
ここまで学んだ中で、初心者が最初に押さえておきたいポイントをサクッとまとめておきます。
まずは、次の点をしっかり意識しておけばOKです。
- PIC X は「英数字・記号・スペース」を入れられる文字型
- 定義の基本構文は「PIC X(n).」で、n は文字数
- 文字数は固定長なので、短いデータはスペースで埋まる
- 長すぎるデータは自動的に切り捨てられる
- 比較処理では、スペース部分も含めて比較される
たとえば「HELLO 」と「HELLO」は、見た目は同じようでも、内容が違うと判断される場合があります。
ちょっとした違いがバグの原因になることもあるので、スペースの扱いはしっかり頭に入れておきましょう。
【まとめ】COBOLの文字データ型「PIC X」を使いこなそう!
おつかれさまでした!ここまで読んだなら、PIC X がどんなものか、もうバッチリです。
文字を扱う変数の定義方法、MOVE命令での値の代入、DISPLAY命令による表示。
そして、COBOL特有の固定長スタイルについても理解できたと思います。
これでCOBOLの文字データを自由に扱えるようになりましたね!
もし次のステップに進むなら、「可変長文字列」「集団項目」「日本語(全角)の扱い」などもチェックしてみると、もっと幅が広がります。
焦らず、ひとつずつマスターしていけばOKです。
まずはPIC Xを自在に使いこなして、どんどんコードを書いていきましょう!
【関連記事】
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。