COBOL言語の「SORT文」を活用してファイル整理をしよう! | 用語辞典
COBOL(コボル)言語の予約語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
----------------------------
使用例:
実行結果:
プログラムを実行すると、ソート後に作成される結果出力用ファイル「kekka.txt」には、以下のようにソートされた内容が記述されます。
紹介したサンプルでは、書き方で紹介したようにソート対象ファイル、結果出力用ファイル、ソート作業領域をそれぞれ設定し、SORT文のSD句で指定したSORT-KEYを元に昇順でソートを実行しています。
ソートキーについては、ソート対象ファイルのFDで設定した項目NO-CORDに型を合わせなければいけません。
SDで指定した項目SORT-DATAは、入力ファイルのサイズ(DATA-1、DATA-2)を合わせたサイズを指定する必要があります。
SORT文のCOBOL(コボル)言語における基本事項やルールについて
- SDとファイル名の間の空白は自由に設定できます。
- SDにはソート作業用のファイル名を記述します。
- SORTとファイル名の間の空白は自由に設定できます。
- SORTの後に記述したファイル名は、SD句で指定したファイル名を指定します。
- ソートキーにはSD句で指定したソートキー項目を指定します。
- 降順(大きい順)でソートする場合は、DESCENDING KEYを指定します。
- 昇順(小さい順)でソートする場合は、ASCENDING KEYを指定します。
- USINGにはソート対象ファイル項目を指定します。
- GIVINGには結果出力ファイル項目を指定します。
- SORT文には入力ファイルからソート対象のレコードを選択する(RELEASE文)ことが可能です。
- SORT文には出力ファイルへソート後にレコードを選択する(RETURN文)ことが可能です。
※RELEASE文、RETURN文については、他の記事で紹介します。
COBOL(コボル)言語のSORT文を扱う上での注意点
COBOLにおけるSORT文は、ファイルの内容を並べ替える際に便利な命令文ですが、以下に注意しておきたい点があります
- 結果出力用ファイルは、存在しないファイルを指定する必要がありますが、すでに指定したファイルが存在した場合は、内容が上書きされてしまいます。
- FD句で指定するレコード項目は、ソート対象ファイルのレコードサイズ以上を指定するか、サイズを合わせる必要があります。
- SD句で指定するデータ項目は、FD句で指定したソート対象ファイルのソートキー以外の項目のサイズ以上を指定するか、サイズを合わせる必要があります。
- レコードを改行してソートしたい場合は、環境部のファイル設定時に「RGANIZATION IS LINE SEQUENTIAL」を指定しなければ、以下のように1行でまとめてソートされてしまうので注意が必要です。
1行でソートされてしまう(1つのレコードになってしまう)と、ソートされたファイルの読み込み時に、正常に読み込むことができません。
SORT文を使ったCOBOL(コボル)プログラムの活用法
SORT文の活用方法として、昇順と降順でそれぞれソートを実行して、ソートが正常に実行されたかをソートしたファイルを読み込んで、内容を確認するサンプルを以下に紹介します。
- IDENTIFICATION DIVISION.
- PROGRAM-ID. SORT_SAMPLE02.
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- FILE-CONTROL.
- SELECT TEST-FILE ASSIGN TO 'test.txt' *>ソート対象ファイル
- ORGANIZATION IS LINE SEQUENTIAL
- STATUS IS IN-FIlE-STATUS.
- SELECT KOJUN-FILE ASSIGN TO 'kojun.txt' *>降順用結果出力ファイル
- ORGANIZATION IS LINE SEQUENTIAL
- STATUS IS IN-KOJUN-STATUS.
- SELECT SHOJUN-FILE ASSIGN TO 'shojun.txt' *>昇順用結果出力ファイル
- ORGANIZATION IS LINE SEQUENTIAL
- STATUS IS IN-SHOJUN-STATUS.
- SELECT SORT-FILE ASSIGN TO 'sort.wak'. *>作業領域
- DATA DIVISION.
- FILE SECTION.
- *>*******ソート対象ファイルの設定*******
- FD TEST-FILE.
- 01 TEST-RECORD.
- 05 NO-CORD PIC 9(5).
- 05 DATA-1 PIC X(3).
- 05 DATA-2 PIC X(5).
- *>*******降順結果出力用ファイルの設定*******
- FD KOJUN-FILE.
- 01 KOJUN-RECORD PIC X(13).
- *>*******昇順結果出力用ファイルの設定*******
- FD SHOJUN-FILE.
- 01 SHOJUN-RECORD PIC X(13).
- *>*******ソート作業用ファイルの設定*******
- SD SORT-FILE.
- 01 SORT-RECORD.
- 05 SORT-KEY PIC 9(5).
- 05 SORT-DATA PIC X(8).
- WORKING-STORAGE SECTION.
- 01 IN-FILE-STATUS PIC XX.
- 01 IN-KOJUN-STATUS PIC XX.
- 01 IN-SHOJUN-STATUS PIC XX.
- PROCEDURE DIVISION.
- OPEN INPUT TEST-FILE.
- IF IN-FILE-STATUS = "00"
- THEN
- CONTINUE
- ELSE
- STOP RUN
- END-IF.
- *>*******昇順でソート*******
- SORT SORT-FILE
- ASCENDING KEY SORT-KEY
- USING TEST-FILE
- GIVING SHOJUN-FILE.
- *>*******降順でソート*******
- SORT SORT-FILE
- DESCENDING KEY SORT-KEY
- USING TEST-FILE
- GIVING KOJUN-FILE.
- CLOSE TEST-FILE.
- *>*******降順結果ファイルの読み込み*******
- OPEN INPUT KOJUN-FILE.
- DISPLAY "READ : kojun.txt".
- PERFORM UNTIL IN-KOJUN-STATUS NOT = "00"
- READ KOJUN-FILE
- AT END
- CONTINUE
- NOT AT END
- DISPLAY KOJUN-RECORD
- END-READ
- END-PERFORM.
- CLOSE KOJUN-FILE.
- *>*******昇順結果ファイルの読み込み*******
- OPEN INPUT SHOJUN-FILE.
- DISPLAY "READ : shojun.txt".
- PERFORM UNTIL IN-SHOJUN-STATUS NOT = "00"
- READ SHOJUN-FILE
- AT END
- CONTINUE
- NOT AT END
- DISPLAY SHOJUN-RECORD
- END-READ
- END-PERFORM.
- CLOSE SHOJUN-FILE.
- DISPLAY "プログラム終了"
- STOP RUN.
実行結果:
サンプルではソート対象ファイル、降順用結果出力ファイル、昇順用結果出力ファイル、ソート作業用ファイルを設定して降順と昇順でソートして、それぞれ指定した結果出力ファイルに内容を書き込んでいます。
※サンプルで紹介しているREAD文については、別の記事で紹介しています。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの 求人情報 が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
応募条件
※2020年5月31日を以って、締切りました。
18歳~28歳の方。
正社員採用において、北川社長の著書『祈り方が9割』を読んで感想文を事前に提出すると、無条件で最終面接まで進むことができます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典