COBOL言語の「MOVE文」とは?転記のルールをご紹介します | 用語辞典

COBOL(コボル)言語の予約語MOVEを使った命令文の書き方とは

辞典・辞書-MOVE-イメージ

COBOL(コボル)言語のMOVE文とは?

COBOL(コボル)におけるMOVE文は、データ項目にデータを保存したり、データを別のデータ項目に複写したりする処理のことを指します。

COBOLではこのような処理を「転記」と言います。基本的には他のプログラミング言語で行うような変数に値を代入したり、他の変数に値をコピーするといった処理と同様のことを行います。

本記事では、MOVE文の基本的な使い方やルール、注意点などをご紹介します。

書き方1:(データに文字列を転記する)

MOVE [転記元の値] TO [転記先の項目1] [転記先の項目2] [転記先の項目n...].

MOVE文によるデータの転記は、他の言語で行う「str = “abc”」のような値の代入を、「MOVE “abc” TO str」の形式で行います。

使用例1:

辞典・辞書-MOVE-使用例1

実行結果:

辞典・辞書-MOVE-実行結果

サンプルでは文字列用のデータ項目TEST-MOVE1を定義し、文字列の項目をMOVE文を使用して文字列”ABC”を転記しています。

DISPLAYで項目TEST-MOVE1の結果を確認すると、文字列”ABC”が設定されているのがわかります。

書き方2:(データに変数の値を転記する)

MOVE [転記元の項目] TO [転記先の項目1] [転記先の項目2] [転記先の項目n...].

MOVE分は前述したように、他のプログラミングで行うような、データ項目の値を他のデータ項目に代入する処理が可能です。

使用例2:

辞典・辞書-MOVE-使用例2

実行結果:

辞典・辞書-MOVE-実行結果

サンプルでは文字列のデータ項目TEST-MOVE1とTEST-MOVE2を定義し、TEST-MOVE1にMOVE文を使用して文字列”ABC”を転記しています。

本記事では、MOVE文の基本的な使い方やルール、注意点などをご紹介します。

DISPLAY変数で項目TEST-MOVE1、TEST-MOVE2の値を確認すると、それぞれ文字列”ABC”の値が設定されているのがわかります。

MOVE文のCOBOL(コボル)言語における基本事項やルールについて

  1. 転記元の値は数値型定数、文字定数、データ項目などを記述します。
  2. 転記先はデータ項目を記述します。転記先は、複数の項目を指定することができます。
  3. 数値型の式(9タイプ)では、右詰めで転記を行います。
  4. 小数点を含む数値では、少数の位置を基準として左詰めで転記を行います。
  5. 数値型のデータ項目には、数値定数と数値型式しか転記ができません。

COBOL(コボル)言語のMOVE文を扱う上での注意点

MOVE文はデータを転記するのに必須となる機能ですが、使い方を誤ると思わぬ不具合が発生してしまいます。

基本事項やルールで説明したように、COBOLはデータ項目を定義するときに、数値型は(9タイプ)を指定しますが、文字列の項目を数値型の項目へ転記してしまうと、意図した値を転記することができません。

例えば、以下のように数値型のデータ項目に文字列の値を転記してみます。

辞典・辞書-MOVE-使用例

実行結果:

辞典・辞書-MOVE-実行結果:

サンプルでは、文字列のデータ項目TEST-MOVE1と数値型のデータ項目TEST-MOVE_NUMを設定しています。

TEST-MOVE1にMOVE文で文字列”ABC”を設定し、数値型のTEST-MOVE_NUMにMOVE文を使用して、TEST-MOVE1の値を転記しています。

実行結果からわかるように、文字列のデータ項目を数値型のデータ項目に転記すると、意図した値を設定することができません。

CやJavaなどのプログラミング言語では、コンパイル時にコピーや代入する変数の型が異なるとコンパイルエラーとなり、事前にミスを防ぐことができます。

しかし、COBOLの場合は転記で異なる指定をしても、コンパイルエラーとなりませんので、MOVE文を使用するときは、転記先と転記元の型の整合性がとれているか、注意が必要です。

MOVE文を使ったCOBOL(コボル)プログラムの活用法

文字列や数値を転記するのに便利なMOVE文ですが、書き方1で紹介したように、複数のデータ項目に同じ値を転記したい場合もあります。

以下に1対複数の転記を行いたい場合の簡易的なプログラムを紹介します。

   
  1. *> MOVE_SAMPLE04
  2. IDENTIFICATION DIVISION.
  3. PROGRAM-ID. MOVE_SAMPLE04.
  4.  
  5.  
  6. *>文字列を扱う定数を定義する
  7. DATA DIVISION.
  8. WORKING-STORAGE SECTION.
  9. 01 TEST-MOVE1 PIC x(3).
  10. 01 TEST-MOVE2 PIC x(3).
  11. 01 TEST-MOVE3 PIC x(3).
  12. 01 TEST-MOVE4 PIC x(3).
  13. 01 TEST-MOVE5 PIC x(3).
  14.  
  15. 01 TEST-MOVE_NUM1 PIC 9(2).
  16. 01 TEST-MOVE_NUM2 PIC 9(2).
  17. 01 TEST-MOVE_NUM3 PIC 9(2).
  18. 01 TEST-MOVE_NUM4 PIC 9(2).
  19. 01 TEST-MOVE_NUM5 PIC 9(2).
  20.  
  21. PROCEDURE DIVISION.
  22. MAIN SECTION.
  23.  
  24. *>項目TEST-MOVE1に文字列を設定
  25. MOVE "ABC" TO TEST-MOVE1.
  26.  
  27. *>それぞれの項目にTEST-MOVE1の値を転記する
  28. MOVE TEST-MOVE1 TO TEST-MOVE2 TEST-MOVE3
  29. TEST-MOVE4 TEST-MOVE5.
  30.  
  31. *>項目TEST-MOVE_NUM1に数値を設定
  32. MOVE 3 TO TEST-MOVE_NUM1.
  33.  
  34. *>それぞれの項目にTEST_MOVE_NUM1の値を転記する
  35. MOVE TEST-MOVE_NUM1 TO TEST-MOVE_NUM2 TEST-MOVE_NUM3
  36. TEST-MOVE_NUM4 TEST-MOVE_NUM5.
  37.  
  38. *>結果を出力
  39. DISPLAY "["TEST-MOVE2 TEST-MOVE3 TEST-MOVE4 TEST-MOVE5"]"
  40. UPON CONSOLE.
  41. DISPLAY "["TEST-MOVE_NUM2 TEST-MOVE_NUM3 TEST-MOVE_NUM4 TEST-MOVE_NUM5"]"
  42. UPON CONSOLE.
  43.  
  44.  
  45. STOP RUN.

事項結果:

辞典・辞書-MOVE-実行結果:

紹介したサンプルでは、文字列のデータ項目TEST-MOVE1~TEST-MOVE5と、数値型のデータ項目TEST-MOVE_NUM1~TEST-MOVE_NUM2を定義しています。

文字列用の項目TEST-MOVE1と、数値型の項目TEST-MOVE_NUM1に、それぞれ値を設定します。

設定したデータ項目を転記するために、MOVE文の転記先の項目に、データ項目を連続して指定して複写しています。

実行結果からわかるように、それぞれのデータ項目に、同じ値が転記されていることがわかります。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門