COBOL 言語のファイルの整列について理解しよう!|基礎ガイド

COBOL(コボル)言語のSORT 文を使ったファイルの整列とは

基礎-ファイル整列-イメージ

ファイルの整列(ソート)とは

ファイルの整列とは、ファイルに格納されているデータをある規則に従って、並べ替えることを意味します。

例えば、商品売り上げファイルがあり、「販売日時」、「商品コード」、「商品名」、「販売価格」、「販売店コード」が格納されていると します。商品売り上げファイルは、販売員が商品が売れた順番にデータを入力していく運用になっているとしましょう。この場合、商品 売り上げファイルは、「販売日時」順に並んでいます。このファイルを「商品コード」順に並べると、商品ごとの売り上げを集計するのが 容易になります。

このようにファイル内のデータを並べ替えることを、整列(ソート)といいます。

COBOL言語のSORT文を使ったファイルの整列

COBOL言語では、SORT文を使用することにより、簡単にファイル内のデータを整列(ソート)することができます。

SORT文によるソートでは、整列併合用ファイルというSORT文が一時的に使用するファイルの定義をしなくてはなりません。ソートの処理イメージは、入力ファイルを読み込み、整列併合用ファイルを使用しソートを行い、出力ファイルにソート結果を出力するイメージです。

整列併合用ファイルは、通常のファイルと同様に、ENVIRONMENT DIVISIONのFILE-CONTROLにファイルの属性を定義し、DATA DIVISIONのFILE SECTIONにレコードのレイアウトを定義します。ソートの実行は、PROCEDURE DIVISIONにSORT文を記述し実行します。

整列併合用ファイルの属性の定義

整列併合用ファイルの属性は、ENVIRONMENT DIVISIONのFILE-CONTROLに定義します。このとき、ORGANIZATION句によるファイル編成の指定は行いません。

■書式

SELECT ファイル名 ASSIGN TO データ名

<ファイル名>

 プログラムで整列併合用ファイルを使用し、ソート処理を行うときに使用するファイル名を記述します。

<データ名>

 整列併合用ファイルを指定します。

整列併合用ファイルのレイアウトの定義

整列併合用ファイルのレイアウトは、DATA DIVISIONのFILE SECTIONに定義します。

■書式

SD ファイル名

  レコード記述項

<ファイル名>

 ENVIRONMENT DIVISIONのFILE-CONTROLに定義した整列併合用ファイル名を記述します。

<レコード記述項>

 整列併合用ファイルのレコードレイアウトを記述します。記述ルールはCOBOL言語のデータ定義のルールに従ってください。

SORT文によるソート処理の実行

ソートの実行は、PROCEDURE DIVISIONにSORT文を記述することにより実行します。

■書式

SORT 整列併合用ファイル名

  ソートキー

  USING 入力ファイル名

  GIVING 出力ファイル名

<整列併合用ファイル名>
 ENVIRONMENT DIVISIONのFILE-CONTROLに定義した整列併合用ファイル名を記述します。

<ソートキー>

 ソートに使用するキーを記述します。ソートキーは整列併合用ファイルの項目を指定し、複数の項目を指定することができます。昇順にソートする場合は、「ON ASCENDING KEY 項目名」を、降順にソートする場合は、「ON DESCENDING KEY 項目名」を記述します。

<入力ファイル名>

 入力ファイル(ソートを行う前のファイル)を記述します。

<出力ファイル名>

 出力ファイル(ソート結果を格納するファイル)を記述します。

ファイルの整列処理のプログラム例

ご紹介するサンプルプログラムは、ランダムに並んだ商品ファイルを商品コード順にソートするプログラムです。商品ファイルには、「商品コード」、「商品名」、「販売価格」が格納されています。

  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID. SORT_SAMPLE1.
  9. ENVIRONMENT DIVISION.
  10. INPUT-OUTPUT SECTION.
  11. FILE-CONTROL.
  12. * 商品ファイル (入力ファイル)
  13. SELECT IN-FILE ASSIGN TO "SHOHIN.txt"
  14. ORGANIZATION IS LINE SEQUENTIAL.
  15. * 整列併合用ファイル (中間ファイル)
  16. SELECT ST-FILE ASSIGN TO "ST01".
  17. * ソート後商品ファイル (出力ファイル)
  18. SELECT OUT-FILE ASSIGN TO "SHOHIN-SORT.txt"
  19. ORGANIZATION IS LINE SEQUENTIAL.
  20. DATA DIVISION.
  21. FILE SECTION.
  22. * 商品ファイル (入力ファイル)
  23. FD IN-FILE.
  24. 01 IN-REC.
  25. 03 IN-SHOHIN-CODE PIC 9(003).
  26. 03 IN-SHOHIN-MEI PIC X(010).
  27. 03 IN-SHOHIN-KAKAKU PIC 9(004).
  28. * 整列併合用ファイル (中間ファイル)
  29. SD ST-FILE.
  30. 01 ST-REC.
  31. 03 ST-SHOHIN-CODE PIC 9(003).
  32. 03 ST-SHOHIN-MEI PIC X(010).
  33. 03 ST-SHOHIN-KAKAKU PIC 9(004).
  34. * ソート後商品ファイル (出力ファイル)
  35. FD OUT-FILE.
  36. 01 OUT-REC.
  37. 03 OUT-SHOHIN-CODE PIC 9(003).
  38. 03 OUT-SHOHIN-MEI PIC X(010).
  39. 03 OUT-SHOHIN-KAKAKU PIC 9(004).
  40. *-------------------------------------------
  41. * 主手続
  42. *-------------------------------------------
  43. PROCEDURE DIVISION.
  44. MAIN-PROCEDURE.
  45. DISPLAY "ソート処理を開始します".
  46. SORT ST-FILE
  47. ON ASCENDING KEY ST-SHOHIN-CODE
  48. USING IN-FILE
  49. GIVING OUT-FILE.
  50. DISPLAY "ソート処理が終了しました".
  51. STOP RUN.
  52. END PROGRAM SORT_SAMPLE1.

■入力ファイル(SHOHIN.txt)
基礎-ファイル整列-入力ファイル

■実行結果(画面)
基礎-ファイル整列-実行結果

■実行結果:ソート後のファイル(SHOHIN-SORT.txt)
基礎-ファイル整列-ソート後

COBOL言語のファイルの整列の確認問題

問)
COBOL言語のプログラムにおいて、整列処理(ソート処理)を行う場合に定義する中間ファイルは何と呼ばれているか。

答え)
整列併合用ファイル

ファイルの整列(ソート)機能は、ソフトウェアの作成において、しばしば必要になる機能ですが、アルゴリズムを自分で考え、コーディングするのは大変な作業です。COBOL言語では、標準機能としてソート機能が用意されていますので、十分に活用してください。

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

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

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

COBOL入門のカテゴリー

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