COBOL言語の「SORT文」を活用してファイル整理をしよう! | 用語辞典

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

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

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

COBOL(コボル)におけるSORT文は、ファイルに保存されたデータを、任意の順序に並べ替える場合に使用する命令文です。

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

書き方1-1:(ファイルの設定)

ソートを実行するためには、ソートを行う対象のファイルと、結果を出力するためのファイル、ソートを行う作業領域用のファイルを、それぞれ指定する必要があります。

INPUT-OUTPUT    SECTION.
FILE-CONTROL.
SELECT [ファイル項目] ASSIGN TO ['ソート対象ファイル名']
SELECT [ファイル項目] ASSIGN TO ['結果出力用ファイル名']
SELECT [ファイル項目] ASSIGN TO ['ソート作業領域用ファイル名']

結果出力用ファイル名とソート作業領域ファイル名は、存在しないファイル名を指定します。

書き方1-2:(データ部の設定)

データ部の記述はファイルのデータ項目を定義するFD句(ファイル記述項)と、ソート実行用のSD句(整列併合用ファイル記述項)を設定します。

DATA        DIVISION.
  FILE      SECTION.
   FD [ソート対象ファイル項目].
   01 [レコード名].
    05 [項目名1].
    05 [項目名2].
    …
    FD [結果出力ファイル項目].
   01 [レコード名].
    SD [ソート作業領域項目].
   01 [レコード名].
    05 [ソートキー].
    05 [項目名].

SDのレコードの中には、ソートキーを必ず指定しなければいけません。ソートキーは複数設定することができます。

結果出力ファイル項目のレコードサイズは、ソート対象ファイル項目となる入力ファイルの大きさに合わせる必要があります。

書き方1-3:(SORT文の設定)

SORT文では、ソート方法とファイル項目をそれぞれ指定します。

SORT [ソート作業領域項目]
 [ASCENDING(昇順)又はDESCENDING(降順)] KEY [ソートキー項目]
 USING [ソート対象ファイル項目]
 GIVING [結果出力ファイル項目].

SORT文でソートするためのソート作業領域項目名を指定します。

ASCENDING(昇順)又はDESCENDING(降順)を指定し、SD句で設定したソートキーを指定します。

USINGでソート対象ファイル項目を指定し、GIVINGで結果出力ファイル項目を指定します。

書き方1-1~1-3を踏まえて、実際にファイルをソートする簡単なサンプルを以下に紹介します。

ソート対象ファイルは事前に用意しておきます。 ここでは、行順編成のフラット形式で以下のようにレコードを記述します。

test.txt-------------------
11111AAAaaaaa
22222BBBbbbbb
44444DDDddddd
33333CCCccccc
----------------------------

使用例:

辞典・辞書-SORT-使用例:

実行結果:

プログラムを実行すると、ソート後に作成される結果出力用ファイル「kekka.txt」には、以下のようにソートされた内容が記述されます。

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

紹介したサンプルでは、書き方で紹介したようにソート対象ファイル、結果出力用ファイル、ソート作業領域をそれぞれ設定し、SORT文のSD句で指定したSORT-KEYを元に昇順でソートを実行しています。

ソートキーについては、ソート対象ファイルのFDで設定した項目NO-CORDに型を合わせなければいけません。

SDで指定した項目SORT-DATAは、入力ファイルのサイズ(DATA-1、DATA-2)を合わせたサイズを指定する必要があります。

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

  1. SDとファイル名の間の空白は自由に設定できます。
  2. SDにはソート作業用のファイル名を記述します。
  3. SORTとファイル名の間の空白は自由に設定できます。
  4. SORTの後に記述したファイル名は、SD句で指定したファイル名を指定します。
  5. ソートキーにはSD句で指定したソートキー項目を指定します。
  6. 降順(大きい順)でソートする場合は、DESCENDING KEYを指定します。
  7. 昇順(小さい順)でソートする場合は、ASCENDING KEYを指定します。
  8. USINGにはソート対象ファイル項目を指定します。
  9. GIVINGには結果出力ファイル項目を指定します。
  10. SORT文には入力ファイルからソート対象のレコードを選択する(RELEASE文)ことが可能です。
  11. SORT文には出力ファイルへソート後にレコードを選択する(RETURN文)ことが可能です。

RELEASE文、RETURN文については、他の記事で紹介します。

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

COBOLにおけるSORT文は、ファイルの内容を並べ替える際に便利な命令文ですが、以下に注意しておきたい点があります

  1. 結果出力用ファイルは、存在しないファイルを指定する必要がありますが、すでに指定したファイルが存在した場合は、内容が上書きされてしまいます。
  2. FD句で指定するレコード項目は、ソート対象ファイルのレコードサイズ以上を指定するか、サイズを合わせる必要があります。
  3. SD句で指定するデータ項目は、FD句で指定したソート対象ファイルのソートキー以外の項目のサイズ以上を指定するか、サイズを合わせる必要があります。
  4. レコードを改行してソートしたい場合は、環境部のファイル設定時に「RGANIZATION IS LINE SEQUENTIAL」を指定しなければ、以下のように1行でまとめてソートされてしまうので注意が必要です。

辞典・辞書-SORT-エラー例

1行でソートされてしまう(1つのレコードになってしまう)と、ソートされたファイルの読み込み時に、正常に読み込むことができません。

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

SORT文の活用方法として、昇順と降順でそれぞれソートを実行して、ソートが正常に実行されたかをソートしたファイルを読み込んで、内容を確認するサンプルを以下に紹介します。

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. SORT_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. FILE-CONTROL.
  6. SELECT TEST-FILE ASSIGN TO 'test.txt' *>ソート対象ファイル
  7. ORGANIZATION IS LINE SEQUENTIAL
  8. STATUS IS IN-FIlE-STATUS.
  9. SELECT KOJUN-FILE ASSIGN TO 'kojun.txt' *>降順用結果出力ファイル
  10. ORGANIZATION IS LINE SEQUENTIAL
  11. STATUS IS IN-KOJUN-STATUS.
  12. SELECT SHOJUN-FILE ASSIGN TO 'shojun.txt' *>昇順用結果出力ファイル
  13. ORGANIZATION IS LINE SEQUENTIAL
  14. STATUS IS IN-SHOJUN-STATUS.
  15. SELECT SORT-FILE ASSIGN TO 'sort.wak'. *>作業領域
  16. DATA DIVISION.
  17. FILE SECTION.
  18. *>*******ソート対象ファイルの設定*******
  19.  FD TEST-FILE.
  20.  01 TEST-RECORD.
  21.  05 NO-CORD PIC 9(5).
  22.  05 DATA-1 PIC X(3).
  23.  05 DATA-2 PIC X(5).
  24. *>*******降順結果出力用ファイルの設定*******
  25.  FD KOJUN-FILE.
  26.  01 KOJUN-RECORD PIC X(13).
  27. *>*******昇順結果出力用ファイルの設定*******
  28.  FD SHOJUN-FILE.
  29.  01 SHOJUN-RECORD PIC X(13).
  30. *>*******ソート作業用ファイルの設定*******
  31.  SD SORT-FILE.
  32.  01 SORT-RECORD.
  33.  05 SORT-KEY PIC 9(5).
  34.  05 SORT-DATA PIC X(8).
  35.   WORKING-STORAGE SECTION.
  36.  01 IN-FILE-STATUS PIC XX.
  37.  01 IN-KOJUN-STATUS PIC XX.
  38.  01 IN-SHOJUN-STATUS PIC XX.
  39. PROCEDURE DIVISION.
  40.  OPEN INPUT TEST-FILE.
  41.  
  42. IF IN-FILE-STATUS = "00"
  43. THEN
  44. CONTINUE
  45. ELSE
  46. STOP RUN
  47. END-IF.
  48.  
  49. *>*******昇順でソート*******
  50. SORT SORT-FILE
  51. ASCENDING KEY SORT-KEY
  52. USING TEST-FILE
  53. GIVING SHOJUN-FILE.
  54.  
  55. *>*******降順でソート*******
  56. SORT SORT-FILE
  57. DESCENDING KEY SORT-KEY
  58. USING TEST-FILE
  59. GIVING KOJUN-FILE.
  60.  
  61. CLOSE TEST-FILE.
  62.  
  63. *>*******降順結果ファイルの読み込み*******
  64. OPEN INPUT KOJUN-FILE.
  65.  
  66. DISPLAY "READ : kojun.txt".
  67. PERFORM UNTIL IN-KOJUN-STATUS NOT = "00"
  68. READ KOJUN-FILE
  69. AT END
  70. CONTINUE
  71. NOT AT END
  72. DISPLAY KOJUN-RECORD
  73. END-READ
  74. END-PERFORM.
  75.  
  76. CLOSE KOJUN-FILE.
  77.  
  78. *>*******昇順結果ファイルの読み込み*******
  79. OPEN INPUT SHOJUN-FILE.
  80.  
  81. DISPLAY "READ : shojun.txt".
  82. PERFORM UNTIL IN-SHOJUN-STATUS NOT = "00"
  83. READ SHOJUN-FILE
  84. AT END
  85. CONTINUE
  86. NOT AT END
  87. DISPLAY SHOJUN-RECORD
  88. END-READ
  89. END-PERFORM.
  90.  
  91. CLOSE SHOJUN-FILE.
  92.  
  93. DISPLAY "プログラム終了"
  94.  
  95. STOP RUN.

実行結果:

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

サンプルではソート対象ファイル、降順用結果出力ファイル、昇順用結果出力ファイル、ソート作業用ファイルを設定して降順と昇順でソートして、それぞれ指定した結果出力ファイルに内容を書き込んでいます。

サンプルで紹介しているREAD文については、別の記事で紹介しています。

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

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

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

COBOL入門のカテゴリー

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