COBOL言語の「DELETE文」とは? 削除の使い方を理解しよう | 用語辞典

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

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

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

COBOL(コボル)には、様々な予約語が用意されていますが、その中のDELETE文は指定したファイルのレコードを論理的に取り除く機能を持ちます。

本記事では、COBOLにおけるDELETE文について基本的な使い方やルール、注意点などをご紹介します。

書き方:

DELETE ファイル名 RECORD

  [INVALID KEY 無条件文1]

  [NOT INVALID KEY 無条件文2]

END-DELETE.

DELETE文を使用してファイルのレコードを取り除くためには、ファイルのオープンモードを「入出力両用モード(I-O)」で指定する必要があります。

以下にDELETE文を使用して、指定した相対ファイルの相対キーのレコードを取り除く簡単なプログラムを紹介します。

使用例:(1/2)

辞典・辞書-DELETE-使用例:(1/2)

使用例:(2/2)

辞典・辞書-DELETE-使用例:(2/2)

実行結果:

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

サンプルでは、ACCEPT文で書き込むデータを入力してWRITE文で相対ファイルを作成し、指定した相対キー(2)に対してDELETE文で削除処理を実施しています。

その後にREAD文でファイルを読み込むと、相対キー(2)に紐づくレコードが削除されていることがわかります。

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

  1. DELETE、ファイル名、RECORD間の空白や改行有無は自由に設定できます。
  2. DELETE文で指定したファイルは、ファイルのオープンモードを必ず入出力両用モード(I-O)で指定する必要があります。
  3. 順呼出し法ファイルでは、DELETE文を実行する前に、必ずREAD文が成功している必要があります。
  4. 乱呼出し法または動的呼出し法の相対ファイルは、相対キー項目により指定されたレコードをファイルから論理的に取り除きます。
  5. 乱呼出し法または動的呼出し法の牽引ファイルは、主レコードキー項目により指定されたレコードをファイルから論理的に取り除きます。
  6. DELETE文が成功すると、指定されたレコードは論理的に取り除かれて、以後呼び出すことはできません。
  7. DELETE文を実行しても、ファイル位置指示子には影響を与えません。

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

  1. DELETE文で指定するファイルは、順ファイルであってはなりません。
  2. 順呼出し法ファイルに対しては、INVALID KEY(無効キー)及びNOT INVALID KEY指定を記述してはいけません。
  3. 相対ファイル、牽引ファイルはファイル管理段落(FILE-CONTROL)で指定するファイル名やファイルに対する定義などを正しく指定しないと、DELETE文が失敗する場合もあります。

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

ファイルから指定したレコードを論理的に取り除くときに便利なDELETE文ですが、ACCEPT文を活用することでファイルの作成、レコードの削除、レコードの読み込みなどを指定して、独立した処理を行うことができます。

以下に紹介するサンプルでは、ACCEPT文で入力した値によって処理が分岐して、相対ファイルの作成、レコードの削除、レコードの読み込みの処理をそれぞれ行います。

また、DELETE文によるレコードの削除処理も、ACCEPT文による相対キーの指定が可能となっています。

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. DELETE_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. FILE-CONTROL.
  6. SELECT TEST-FILE ASSIGN TO "test.txt"
  7. ORGANIZATION IS RELATIVE
  8. ACCESS MODE IS DYNAMIC
  9. RELATIVE KEY IS KEY-NUM
  10. FILE STATUS IS FILE-STATUS.
  11. DATA DIVISION.
  12. FILE SECTION.
  13. FD TEST-FILE.
  14. 01 TEST-RECORD.
  15. 05 TEST-NUM PIC 9(3).
  16. 05 DATA-1 PIC X(5).
  17. WORKING-STORAGE SECTION.
  18. *>ファイルステータス
  19. 01 FILE-STATUS PIC XX.
  20. *>相対キー
  21. 01 KEY-NUM PIC 99.
  22. *>レコードを5件までに設定
  23. 01 TEST-RECORD-NUM PIC 99 VALUE 5.
  24. *>読み込み判定処理
  25. 01 HANTEI PIC X.
  26. 88 READ-CONTINUE VALUE "1".
  27. 88 READ-END VALUE "2".
  28. *>実行処理指定(1:ファイル作成 2:ファイルの読み込み 3:レコードの削除)
  29. 77 INPUT-NUM PIC 9 VALUE ZERO.
  30. PROCEDURE DIVISION.
  31.  
  32. DISPLAY "実行する処理を入力してください(1:ファイル作成 2:ファイルの読み込み 3:レコードの削除)".
  33. ACCEPT INPUT-NUM.
  34. EVALUATE INPUT-NUM
  35. WHEN 1
  36. OPEN OUTPUT TEST-FILE
  37. WHEN 2
  38. OPEN INPUT TEST-FILE
  39. WHEN 3
  40. OPEN I-O TEST-FILE
  41. WHEN OTHER
  42. DISPLAY "プログラムの終了"
  43. STOP RUN
  44. END-EVALUATE.
  45.  
  46. DISPLAY "FILE-STATUS : "FILE-STATUS.
  47. IF FILE-STATUS = "00"
  48. THEN
  49. EVALUATE INPUT-NUM
  50. WHEN 1
  51. PERFORM WRITE_RECORD
  52. WHEN 2
  53. PERFORM READ_RECORD
  54. WHEN 3
  55. PERFORM DELETE_RECORD
  56. WHEN OTHER
  57. CONTINUE
  58. END-EVALUATE
  59. ELSE
  60. STOP RUN
  61. END-IF.
  62.  
  63. DISPLAY "プログラム終了".
  64. CLOSE TEST-FILE.
  65.  
  66. STOP RUN.
  67.  
  68. *>*****レコード書き込み処理*******
  69. WRITE_RECORD SECTION.
  70.  
  71. DISPLAY "WRITE_RECORD START".
  72. MOVE 1 TO KEY-NUM
  73. PERFORM TEST-RECORD-NUM TIMES
  74. DISPLAY "INPUT TEST-NUM 9(3):"
  75. ACCEPT TEST-NUM
  76. DISPLAY "INPUT DATA-1 X(5):"
  77. ACCEPT DATA-1
  78.  
  79. WRITE TEST-RECORD
  80. INVALID KEY
  81. DISPLAY "無効な値です"
  82. NOT INVALID KEY
  83. DISPLAY "書き込み成功:"TEST-NUM","DATA-1
  84. END-WRITE
  85. ADD 1 TO KEY-NUM
  86.  
  87. END-PERFORM
  88. EXIT.
  89.  
  90. *>*****レコード読み込み処理*******
  91. READ_RECORD SECTION.
  92.  
  93. DISPLAY "READ_RECORD START".
  94. SET READ-CONTINUE TO TRUE.
  95. PERFORM UNTIL READ-END
  96. READ TEST-FILE NEXT
  97. AT END
  98. SET READ-END TO TRUE
  99. NOT AT END
  100. DISPLAY TEST-NUM","DATA-1
  101. END-READ
  102. END-PERFORM.
  103. EXIT.
  104.  
  105. *>*****レコード削除処理*******
  106. DELETE_RECORD SECTION.
  107. DISPLAY "DELETE_RECORD START".
  108.  
  109. DISPLAY "INPUT NO :" WITH NO ADVANCING.
  110. ACCEPT KEY-NUM.
  111. DISPLAY "KEY-NUM : "KEY-NUM.
  112.  
  113. DELETE TEST-FILE RECORD
  114. INVALID KEY
  115. DISPLAY "削除失敗:"KEY-NUM
  116. NOT INVALID KEY
  117. DISPLAY "削除成功:"KEY-NUM
  118. END-DELETE.
  119. EXIT.

実行結果1:ファイル作成

辞典・辞書-DELETE-実行結果1

実行結果2:レコードの削除

辞典・辞書-DELETE-実行結果2

実行結果3:レコードの読込み

辞典・辞書-DELETE-実行結果3

サンプルでは、初めに相対ファイルを作成し、次にレコード削除処理を実行してACCEPT文による相対キーを指定してレコードを論理的に取り除いています。

再度プログラムを実行してファイルを読込むと、指定した相対キーのレコードが削除されていることがわかります。

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

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

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

COBOL入門のカテゴリー

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