【COBOL学習|初心者向け】[COBOLのSEARCH文を使いこなす!複数WHEN句で効率的な検索を実現しよう]

1. はじめに:なぜ「複数のWHEN句」が重要なのか

COBOLでテーブル(配列)を扱う際、SEARCH文は欠かせない機能です。しかし、初心者の方は「条件を一つずつしか指定できない」と思っていませんか?もし、検索条件が複数ある場合にループを何度も回していたら、それはプログラムが冗長になっている証拠です。今回紹介する「SEARCH文の多重WHEN句」を使えば、1回のスキャンで複数の条件を同時に判定でき、コードの可読性と処理効率が劇的に向上します。

2. 基礎知識:SEARCH文とWHEN句の仕組み

SEARCH文は、テーブルの要素を先頭から順に走査し、指定した条件(WHEN句)に合致した時点で終了する命令です。
通常は「WHEN 条件1」のみを使いますが、実は「WHEN 条件1 … WHEN 条件2 …」のように、複数の条件を記述することが可能です。この場合、最初に見つかった条件が優先され、その後の命令ブロックが実行されます。これにより、データの「正常終了」「エラー」「警告」といった複数の状態を、一度のループで判定できるようになります。

3. 実装:効率的なデータ制御の考え方

実装のポイントは「優先順位」です。複数WHEN句は、記述された順番に評価されるわけではなく、条件が合致した瞬間、そのWHEN句に対応する処理へジャンプします。
例えば、マスターデータから特定のコードを探す際、「データが見つかった場合(正常)」と「データが範囲外だった場合(例外)」を一つのループで網羅することで、フラグ管理を減らし、ロジックをシンプルに保つことができます。

4. サンプルプログラム

以下のサンプルは、売上テーブルから「指定した商品コード」を探しつつ、同時に「データ終了マーク」を検知する例です。

[CODE]
IDENTIFICATION DIVISION.
PROGRAM-ID. SEARCH-SAMPLE.
WORKING-STORAGE SECTION.
01 WS-TBL-IDX PIC S9(04) COMP.
01 WS-TBL.
05 WS-ITEM OCCURS 10 TIMES INDEXED BY IDX.
10 WS-CODE PIC X(04).
10 WS-VAL PIC 9(05).

PROCEDURE DIVISION.
SET IDX TO 1.

  • SEARCH文による複数条件の判定

SEARCH WS-ITEM

  • 条件1: 該当データを発見した場合

WHEN WS-CODE(IDX) = ‘A001’
DISPLAY ‘商品が見つかりました:’ WS-VAL(IDX)

  • 条件2: データの終了コード(9999)を検知した場合

WHEN WS-CODE(IDX) = ‘9999’
DISPLAY ‘検索対象外のデータに到達しました’

  • 条件3: どれにも当てはまらない場合(デフォルトの挙動)

WHEN IDX = 10
DISPLAY ‘最後まで見つかりませんでした’
END-SEARCH.

STOP RUN.
[/CODE]

5. 応用と注意点:現場でハマらないために

多重WHEN句を使う際の注意点は、「どの条件で止まったか」を後続処理で判断する必要がある場合です。SEARCH文自体はどのWHEN句で終了したかを直接教えてくれません。
もし、「どの条件で止まったか」によってその後の処理を変えたい場合は、SEARCH文の直前にフラグを初期化しておき、各WHEN句の中でフラグを立てる工夫をしてください。

また、複雑な条件を詰め込みすぎると、逆にバグの温床になります。「最大でも2〜3個の条件」に留めるのが、ベテランの保守しやすいコードの秘訣です。ぜひ、日々のコーディングで活用してみてください!

コメント

タイトルとURLをコピーしました