COBOLのMOVE文を完全ガイド!初心者でもわかるデータ移送の基本
生徒
「COBOLで、データを別の場所に移すことってできますか?」
先生
「はい、できますよ。COBOLではMOVE文を使って、データを他の項目にコピーすることができます。」
生徒
「コピーって、どういう場面で使うんですか?」
先生
「例えば、入力された名前を別の変数に記録したり、数値をまとめて管理するために他の場所へ移すときなどに使います。今からわかりやすく説明しますね。」
1. MOVE文とは?COBOLでのデータ移送の基本
COBOLのMOVE文とは、あるデータ項目(変数)から別のデータ項目へ、値をコピー(移送)する命令です。これは、まるで書類の内容を別の用紙に書き写すようなものです。
たとえば、あなたの名前「たなか ゆい」をメモ帳Aに書いて、それをメモ帳Bにも書き写すような操作がMOVE文のイメージです。
MOVE文は、プログラムの中でとてもよく使われる重要な命令のひとつで、データの受け渡しや加工に欠かせません。
2. MOVE文の基本構文
MOVE文の基本的な書き方は以下のようになります。
MOVE 移す値 TO 移される項目
「TO(トゥー)」は英語で「〜へ」という意味なので、「この値をあの場所へ移してね」と命令していると考えると分かりやすいです。
3. MOVE文の具体的なサンプルコード
それでは、実際のCOBOLコードを見てみましょう。ここでは、名前を変数に代入する例を紹介します。
IDENTIFICATION DIVISION.
PROGRAM-ID. MOVE-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAME-ORIGINAL PIC X(20) VALUE "たなか ゆい".
01 NAME-COPY PIC X(20).
PROCEDURE DIVISION.
MOVE NAME-ORIGINAL TO NAME-COPY
DISPLAY "コピーされた名前: " NAME-COPY
STOP RUN.
実行結果:
コピーされた名前: たなか ゆい
このように、NAME-ORIGINALに入っていたデータが、NAME-COPYに移され、同じ名前が表示されました。
4. MOVE文はデータの「型」に注意!
COBOLでは、データの「型(かた)」に気をつける必要があります。型とは、データが文字なのか数字なのか、あるいはその長さや形式のことです。
例えば、下のような変数があるとします。
01 AGE-SOURCE PIC 9(3) VALUE 25.
01 AGE-TARGET PIC 9(3).
この場合は、MOVE AGE-SOURCE TO AGE-TARGETと書けば、うまく数値がコピーされます。
ただし、型が違うと想定外の動作をすることがあるので注意が必要です。
5. MOVE文は「右から左へ」の動き
初心者の方がよく混乱するポイントに、「どちらからどちらへ移すの?」という疑問があります。
MOVE文では、「右から左に移す」のではなく、英語通りに「左から右へ」と覚えましょう。
つまり、
MOVE "こんにちは" TO GREETING
であれば、「こんにちは」という文字がGREETINGという変数に入るという意味です。
6. MOVE文を使って数値を操作する
次は数値をMOVE文で移す例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. MOVE-NUMBER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 POINTS-IN PIC 9(3) VALUE 120.
01 POINTS-OUT PIC 9(3).
PROCEDURE DIVISION.
MOVE POINTS-IN TO POINTS-OUT
DISPLAY "得点(コピー後): " POINTS-OUT
STOP RUN.
実行結果:
得点(コピー後): 120
このように、数字も文字と同じようにMOVE文でコピーすることができます。
7. MOVE文で使える便利なパターン
MOVE文では、定数(固定の値)もそのまま使うことができます。
たとえば、以下のように直接値を移すことも可能です。
MOVE "OK" TO STATUS
MOVE 100 TO SCORE
このように書くことで、STATUSやSCOREという変数に、すぐに値を設定できます。
8. MOVE文で注意する「桁あふれ」
COBOLでは、変数のサイズ(桁数)に注意しないと「桁あふれ」が起こります。
たとえば、以下のように、受け取る側の変数が小さいと、値が切れてしまいます。
01 MESSAGE-ORIGINAL PIC X(10) VALUE "HELLO WORLD".
01 MESSAGE-COPY PIC X(5).
このとき、
MOVE MESSAGE-ORIGINAL TO MESSAGE-COPY
を実行すると、「HELLO」までしかコピーされません。
このように、変数の大きさは常に意識することが大切です。
9. MOVE文はCOBOLの「コピー役」
MOVE文は、COBOLの中でも特に基本的で、非常によく使われる命令です。文字や数値などのデータを、別の変数にコピー(正確には「移送」)するための文であり、まさにプログラム内の「コピー役」として活躍します。
たとえば、「受付で入力された名前」を「印刷用の変数」に移したり、「計算結果」を「出力用の項目」にコピーしたりと、さまざまな場面で利用されます。データ処理を行うCOBOLの中では、MOVE文が正しく使えることがとても重要です。
初心者の方にとっては、「左側にあるデータを、右側の変数に写すだけ」と聞くと簡単そうですが、実際に書いてみると「どちらが送る側?」「どういう形式で書くの?」と迷うこともあるかもしれません。ですが、構文はとてもシンプルです。
MOVE "こんにちは" TO GREETING
この例では、「こんにちは」という文字列をGREETINGという変数に移す、という意味になります。英語の語順そのままで、「〜を〜に」という命令の流れが理解しやすいですね。
また、もう少し丁寧なサンプルも見てみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. COPY-HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MESSAGE-SOURCE PIC X(10) VALUE "HELLO".
01 MESSAGE-TARGET PIC X(10).
PROCEDURE DIVISION.
MOVE MESSAGE-SOURCE TO MESSAGE-TARGET
DISPLAY "移送後のメッセージ: " MESSAGE-TARGET
STOP RUN.
このコードを実行すると、「HELLO」という文字列が別の変数に移されて表示されます。このように、MOVE文は「入力された値」や「既にあるデータ」を「別の場所で使う」ための橋渡しとして活躍します。
まずは、小さな文字列や数字を別の変数にコピーしてみるところから始めてみると、MOVE文の使い方が自然と身についてきます。
理解度のクイズ問題
空欄の★に当てはまる内容を答えてください。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SRC-TEXT PIC X(10) VALUE "HELLO".
01 DST-TEXT PIC X(10).
01 SRC-NUM PIC 9(3) VALUE 120.
01 DST-NUM PIC 9(3).
PROCEDURE DIVISION.
MOVE SRC-TEXT TO DST-TEXT
MOVE SRC-NUM TO DST-NUM
STOP RUN.