カテゴリ: COBOL 更新日: 2025/12/16

COBOLのSORT文完全ガイド|初心者でもわかるソート処理の基本

SORT文を使ったソート処理の基本
SORT文を使ったソート処理の基本

先生と生徒の会話形式で理解しよう

生徒

「COBOLで大量のデータを並べ替えたいんですが、簡単にできますか?」

先生

「できますよ。COBOLにはという機能があって、数字や文字を順番に整理するのに便利です。」

生徒

「SORT文って難しそうです……簡単な例で教えてください!」

先生

「はい、それではソート処理の基本とSORT文の使い方を、初心者にも分かるように説明しますね。」

1. SORT文とは?

1. SORT文とは?
1. SORT文とは?

COBOLのSORT文は、一覧になっているデータを、指定した順序で整理(ソート)する命令です。たとえば、名簿を「名前順」や「社員番号順」に並べたいときに使います。プログラミング初心者にとって「並べる」という概念はすごくわかりやすいですし、ソート処理は実務でもよく使われます。

キーワード:COBOLソート、SORT文、ソート処理、並べ替え、未経験初心者。

2. ソートが必要な理由とは?

2. ソートが必要な理由とは?
2. ソートが必要な理由とは?

大量のデータがあって、順番がバラバラだと、「特定の人」を探すのが大変です。例えば電話帳で名前がランダムに並んでいたら、目的の相手を探すのが非効率ですよね。SORT文を使えば、一瞬で「五十音順」「数値順」に並べ替えて、探す手間を減らせます。

初心者向け例え:山に登る時、整った階段とバラバラな石段どちらが登りやすい? ソートされたデータは「整った階段」のように扱いやすいんです。

3. SORT文の基本構成

3. SORT文の基本構成
3. SORT文の基本構成

SORT文を使うには、まず「入力ファイル」と「出力ファイル」を用意します。そして、どの項目をキーに並べ替えるか指定します。


SORT 人物ソートファイル
    ON ASCENDING KEY 氏名
    INPUT PROCEDURE IS 入力処理
    OUTPUT PROCEDURE IS 出力処理.

重要ポイント:

  • ON ASCENDING KEY 氏名:氏名を「昇順(あ→ん)」でソート
  • INPUT PROCEDURE:入力(読み込み)する処理
  • OUTPUT PROCEDURE:出力(書き込み)する処理

4. 実際のソート処理コード例

4. 実際のソート処理コード例
4. 実際のソート処理コード例

以下は「社員名簿」を名前順に並べて別ファイルに出力する例です。


SELECT InFile ASSIGN TO "IN.DAT"
    ORGANIZATION IS LINE SEQUENTIAL.
SELECT OutFile ASSIGN TO "OUT.DAT"
    ORGANIZATION IS LINE SEQUENTIAL.

SORT ソート作業
    ON ASCENDING KEY 社員名
    INPUT PROCEDURE IS InputProc
    OUTPUT PROCEDURE IS OutputProc.

INPUT PROCEDURE.
    READ InFile
        AT END MOVE "YES" TO EOF-FLAG.
    PERFORM UNTIL EOF-FLAG = "YES"
        RELEASE InRec
        READ InFile
            AT END MOVE "YES" TO EOF-FLAG
        END-READ
    END-PERFORM.

OUTPUT PROCEDURE.
    SORT 後に
    USING InRec
    GIVING OutRec.
    WRITE OutRec.
END-SORT.

解説:READで読み込み、RELEASEでソート対象に渡し、GIVINGで出力データを取得、そしてWRITEで書き込みます。

5. 実行結果イメージ

5. 実行結果イメージ
5. 実行結果イメージ

ソート前:
田中/山田/佐藤/鈴木

ソート後:
佐藤/鈴木/田中/山田

このように並び順が「あ→さ→た→や」と整理されます。

6. ソート時の注意点

6. ソート時の注意点
6. ソート時の注意点

主な注意点は以下の通りです:

  • キー項目のデータ長:キーに使う項目は全レコードで同じ長さにすること
  • ファイルサイズ:大量データをソートすると時間がかかる場合がある
  • 升順/降順ASCENDING(昇順)とDESCENDING(降順)が指定可能

7. ソート処理の応用例

7. ソート処理の応用例
7. ソート処理の応用例

応用として、複数項目でソートするケースもあります。例えば「部署順→氏名順」というように、キーを複数指定することで詳細な並べ替えが可能です。


SORT 社員
    ON ASCENDING KEY 部署番号
    ON ASCENDING KEY 氏名
    …
END-SORT

複数キー指定で、データを段階的に整理できます。

まとめ

まとめ
まとめ

COBOLのSORT文は、大量のデータを整理・並べ替えるために非常に便利な命令です。データ処理を行うシステムでは、ソート処理が欠かせません。今回の記事では、SORT文の基本構造から、INPUT PROCEDURE/OUTPUT PROCEDUREを使った実際の使用方法、そして複数キーによる応用的な並び替えまでを丁寧に解説しました。

SORT文の魅力は、「コードの中に並べ替えロジックを自前で書かなくてもよい」という点にあります。特にCOBOLでは、業務アプリケーションで数千〜数万件のデータを扱うことも珍しくないため、こうしたソート専用命令が用意されていることで、可読性・保守性が飛躍的に向上します。

例えば「氏名順に社員名簿を並べたい」「部署ごとに名前順に並び替えたい」といった処理は、SORT文で簡潔に実装できます。また、ON ASCENDING KEYを使えば昇順に、ON DESCENDING KEYを使えば降順に並べ替えることができますので、データを自由に操作する幅が広がります。

初心者の方が注意すべき点としては、RELEASE文とRETURN文の役割GIVING句の書き方ソートキーの正確な定義が挙げられます。構文が正しくても、KEYに使うデータ項目の長さや形式が揃っていないと、期待した並び順にならないこともあるので注意が必要です。

以下は、実際の業務でも使いやすい社員情報のソート処理のサンプルコードです。


       IDENTIFICATION DIVISION.
       PROGRAM-ID. SORT-EXAMPLE.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT IN-FILE ASSIGN TO "EMPLOYEE.DAT"
               ORGANIZATION IS LINE SEQUENTIAL.
           SELECT OUT-FILE ASSIGN TO "SORTED.DAT"
               ORGANIZATION IS LINE SEQUENTIAL.

       DATA DIVISION.
       FILE SECTION.
       FD IN-FILE.
       01 IN-REC.
           05 EMP-ID     PIC X(5).
           05 EMP-NAME   PIC X(20).
           05 DEPT-NO    PIC 9(3).

       FD OUT-FILE.
       01 OUT-REC   PIC X(28).

       SD SORT-FILE.
       01 SORT-REC.
           05 S-EMP-ID   PIC X(5).
           05 S-EMP-NAME PIC X(20).
           05 S-DEPT-NO  PIC 9(3).

       WORKING-STORAGE SECTION.
       01 EOF-FLAG      PIC X VALUE "N".

       PROCEDURE DIVISION.
       MAIN-START.
           SORT SORT-FILE
               ON ASCENDING KEY S-DEPT-NO
               ON ASCENDING KEY S-EMP-NAME
               INPUT PROCEDURE IS INPUT-LOGIC
               OUTPUT PROCEDURE IS OUTPUT-LOGIC
           STOP RUN.

       INPUT-LOGIC.
           OPEN INPUT IN-FILE
           PERFORM UNTIL EOF-FLAG = "Y"
               READ IN-FILE
                   AT END MOVE "Y" TO EOF-FLAG
                   NOT AT END
                       MOVE IN-REC TO SORT-REC
                       RELEASE SORT-REC
               END-READ
           END-PERFORM
           CLOSE IN-FILE.

       OUTPUT-LOGIC.
           OPEN OUTPUT OUT-FILE
           RETURN SORT-FILE
               AT END MOVE "Y" TO EOF-FLAG
           PERFORM UNTIL EOF-FLAG = "Y"
               MOVE SORT-REC TO OUT-REC
               WRITE OUT-REC
               RETURN SORT-FILE
                   AT END MOVE "Y" TO EOF-FLAG
           END-PERFORM
           CLOSE OUT-FILE.

このコードは、社員データを「部署番号順→氏名順」に並べて、新しいファイルへ出力する基本構成です。INPUT PROCEDUREではRELEASEを使ってソートファイルにデータを渡し、OUTPUT PROCEDUREではRETURNで並べ替えられたデータを1件ずつ取り出してWRITEでファイルに書き出します。

このように、COBOLのSORT文を正しく使えるようになると、処理効率も向上し、メンテナンス性の高いコードを書くことができるようになります。業務アプリの中では売上データ、顧客リスト、社員名簿など、あらゆる場面でソート処理が必要とされるため、今回のような構文や考え方をしっかりマスターしておくことは非常に重要です。

先生と生徒の振り返り会話

生徒

「先生、SORT文って一見難しそうに見えましたけど、構造がわかるとスッキリしますね!」

先生

「そうですね。構造さえ押さえれば、SORT文はとても効率的な機能です。RELEASEとRETURNの流れが理解できれば、応用も楽になりますよ。」

生徒

「部署番号で並べて、その中で名前順にするみたいなことも簡単に書けるんですね。」

先生

「はい、複数キーを使えば細かい並び順もコントロールできます。現場のデータ処理では必須の知識ですよ。」

生徒

「これからは、何でも自分でループして並べるより、まずSORT文が使えないか考えてみようと思います!」

先生

「それは素晴らしい心構えですね。COBOLらしいやり方を覚えると、仕事も効率よく進められますよ。」

カテゴリの一覧へ
新着記事
New1
C#
C#のLINQでAny・Allなど条件確認メソッドの使い方を完全ガイド!初心者でもわかるデータ検証
New2
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New3
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New4
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決
No.8
Java&Spring記事人気No8
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう