COBOL言語の「START文」の使い方について理解しよう! | 用語辞典

COBOL(コボル)言語の予約語「START」を使用したファイルの読み出し位置の指定とは

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

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

START(英語)は、日本語に訳すると「出発する」、「歩き出す」、「動き始める」、「始まる」、「起こる」などという意味です。

COBOL(コボル)言語のSTART文には、相対編成ファイルや索引順編成ファイルをシーケンシャルに読み出す前に、読み出し開始位置を指定する機能があります。

START文の形式:START~END-START.

START文は、手続き部に記述します。

■書式

 START ファイル名 KEY 比較演算子 データ名

    INVALID KEY 無条件文1

    NOT INVALID KEY 無条件文2

 END-START.

■構文規則

<ファイル名>

読み出し開始位置を決めるファイル名を記述します。

<比較演算子>

「IS」で始まる比較演算子を記述します。

比較演算子の詳細は、「START文のCOBOL(コボル)言語における基本事項やルールについて」を参照してください。

<データ名>

比較演算子で比較対象とするデータ名を記述します。

<無条件文1>

「KEY 比較演算子 データ名」で、条件に該当するキーがなかった場合に実行する命令群を記述します。

<無条件文2>

「KEY 比較演算子 データ名」で、条件に該当するキーがあった場合に実行する命令群を記述します。

■使用例

START文で読み出し開始位置を設定し、ファイルをシーケンシャルに読み出すプログラム例をご紹介します。

以下のプログラム例では、コンソールからレコードキーの値を入力し、索引順編成ファイル「SEIHIN」を入力されたキー値以降のレコードを読み出し表示しています。

辞典・辞書-START-使用例

■索引順編成ファイル「SEIHIN」のレコード様式とレコード内容

索引順編成ファイル「SEIHIN」は、3桁の製品コード(キー)の昇順に並び、「001」~「005」までが登録されています。

製品コード
3桁
製品名
10桁
製品価格
4桁

  レコード1:001りんご 0300

  レコード2:002めろん 1000

  レコード3:003みかん 0200

  レコード4:004ばなな 0180

  レコード5:005いちご 0800

■実行結果

はじめに製品コードの入力を促すメッセージが表示されます。

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

数字の0を入力してみます。

辞典・辞書-START-入力例

エラーメッセージが表示され、プログラムが終了しました。

もう一度、プログラムを実行し、今度は数字の1を入力してみます。

辞典・辞書-START-入力例

製品コード「001」以下のレコードが全て表示され、プログラムが終了しました。

もう1度、プログラムを実行し、今度は数字の3を入力してみます。

辞典・辞書-START-入力例

製品コード「003」以下のレコードが全て表示され、プログラムが終了しました。

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

COBOL言語において、START文は、ファイルの読み出し位置を定めるために、または明示的にトランザクションを開始するために使用します。トランザクション処理については、別の機会に説明しますので、ここでは「ファイルの読み出し位置を定める」に限って解説します。

START文に指定する比較演算子は、基本的にIF(判断)文、EVALUATE(評価)文などと同じです。表1にSTART文に指定できる比較演算子と、比較演算子の意味をご紹介します。

   表1 START文に指定できる比較演算子と比較演算子の意味

   

比較演算子

意味

IS EQUAL TO

等しい

IS =

IS GREATER THAN

より大きい

IS >

IS NOT LESS THAN

大きい、または等しい

IS NOT <

IS GREATER THAN OR EQUAL TO

IS >=

IS LESS THAN

より小さい

IS <

IS NOT GREATER THAN

小さい、または等しい

IS NOT >

IS <=

IS LESS THAN OR EQUAL TO

COBOL(コボル)言語のSTART文を使うときの注意点

START文で読み出し位置を指定できるのは、索引順編成ファイルと相対ファイルです。ランダム編成ファイルや順編成ファイルには指定できません。

START文で読み出し開始位置を指定する前に、ファイルをオープンする必要があります。読み出し位置を指定し、ファイルを読み込む場合は、OPEN、START、READ、CLOSEの順に命令を記述してください。

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

実務で稼働するCOBOLプログラムでは、一度、読み出し位置を指定して処理を行ったあとに、何かの条件で、また違う位置から読み出す必要があることもあります。

START文を使用すると、ファイルのOPENからCLOSEの間に、何度でも読み出し位置を変更(指定)することができます。

では、「COBOL(コボル)言語のSTART文とは?」でご紹介したプログラム例をベースに、ファイルの内容を表示するだけではなく、内容を変更し、最後にファイルの先頭から変更後の内容を表示するプログラムを作成してみましょう。

「COBOL(コボル)言語のSTART文とは?」でご紹介したプログラム例からの変更箇所は、赤のマーカー部分です。

   
  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID. START_SAMPLE2.
  9.  
  10. ENVIRONMENT DIVISION.
  11. INPUT-OUTPUT SECTION.
  12. FILE-CONTROL.
  13. SELECT IN-FILE ASSIGN TO "SEIHIN1"
  14. ACCESS MODE IS SEQUENTIAL
  15. ORGANIZATION IS INDEXED
  16. RECORD KEY IS IN-CODE.
  17.  
  18. DATA DIVISION.
  19. FILE SECTION.
  20. FD IN-FILE.
  21. 01 IN-REC.
  22. 03 IN-CODE PIC 9(03).
  23. 03 IN-HINMEI PIC X(10).
  24. 03 IN-KAKAKU PIC 9(04).
  25.  
  26. WORKING-STORAGE SECTION.
  27. 01 WORKING-AREA.
  28. 03 END-FLG PIC X(03).
  29. 03 CNSL-INPUT PIC 9(01).
  30. 03 CNSL-KAKAKU PIC 9(04).
  31.  
  32. *-------------------------------------------
  33. * 主手続
  34. *-------------------------------------------
  35. PROCEDURE DIVISION.
  36.  
  37. MAIN-PROCEDURE.
  38. * メッセージ表示&入力
  39. MOVE ZERO TO CNSL-INPUT.
  40. DISPLAY "製品コード(0-9)を入力してください".
  41. ACCEPT CNSL-INPUT FROM CONSOLE.
  42.  
  43. * ファイルオープン
  44. OPEN I-O IN-FILE.
  45.  
  46. * 読み出し位置の指定
  47. MOVE CNSL-INPUT TO IN-CODE.
  48. START IN-FILE KEY IS EQUAL TO IN-CODE
  49. INVALID KEY
  50. DISPLAY "入力された番号のレコードが存在しません"
  51. GO TO END-PROC
  52. NOT INVALID KEY
  53. CONTINUE
  54. END-START.
  55.  
  56. * レコード読み出し
  57. MOVE SPACE TO END-FLG.
  58. PERFORM UNTIL END-FLG = "END"
  59. READ IN-FILE
  60. AT END
  61. MOVE "END" TO END-FLG
  62. NOT AT END
  63. DISPLAY IN-REC
  64. DISPLAY "価格を入力してください"
  65. ACCEPT CNSL-KAKAKU FROM CONSOLE
  66. MOVE CNSL-KAKAKU TO IN-KAKAKU
  67. REWRITE IN-REC
  68. END-READ
  69. END-PERFORM.
  70.  
  71. * ファイル内容の表示(読み出し位置を始めに戻す)
  72. MOVE 1 TO IN-CODE.
  73. START IN-FILE KEY IS EQUAL TO IN-CODE
  74. INVALID KEY
  75. DISPLAY "指定した番号のレコードが存在しません"
  76. GO TO END-PROC
  77. NOT INVALID KEY
  78. CONTINUE
  79. END-START.
  80.  
  81. * ファイル内容の表示(レコード読み出しと表示)
  82. MOVE SPACE TO END-FLG.
  83. PERFORM UNTIL END-FLG = "END"
  84. READ IN-FILE
  85. AT END
  86. MOVE "END" TO END-FLG
  87. NOT AT END
  88. DISPLAY IN-REC
  89. END-READ
  90. END-PERFORM.
  91.  
  92. *終了処理
  93. END-PROC.
  94. CLOSE IN-FILE.
  95. STOP RUN.
  96. END PROGRAM START_SAMPLE2.

■実行結果

はじめに製品コードの入力を促すメッセージが表示されます。

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

数字の4を入力してみます。

辞典・辞書-START-入力例

製品コード「004」のレコードが表示され、価格の入力が促されました。

250を入力します。

辞典・辞書-START-入力例

製品コード「005」のレコードが表示され、価格の入力が促されました。

800を入力します。

辞典・辞書-START-入力例

変更後のファイルの内容が表示され、プログラムが終了しました。

START文による、ファイルの読み出し位置指定は、実務でもよく使用されるCOBOLプログラムの基本的なテクニックです。ぜひ、使い方を覚えておきましょう。

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

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

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

COBOL入門のカテゴリー

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