【COBOL学習|初心者向け】COBOLの職人技!INSPECT文で文字列をスマートに解析する方法

1. 導入: なぜINSPECT文が重要なのか

COBOLでの開発現場において、入力データのチェックは避けて通れません。「名前に不正な記号が含まれていないか」「数値データにスペースが混入していないか」といった確認作業は、システムの堅牢性を高めるために不可欠です。

初心者の方が文字列内の文字を数えようとすると、ついループ文(PERFORM文)を書いて一文字ずつ判定しがちですが、それはコードが長くなるだけでなく、バグの温床にもなります。ここで登場するのがINSPECT文です。これを使えば、複雑なロジックを書かずに、一行で効率的に文字列解析が可能になります。

2. 基礎知識: INSPECT文とは?

INSPECT文は、文字列をスキャンして特定の文字の出現回数を数えたり、文字の置換を行ったりするための命令です。

特に今回解説するTALLYING(タリーイング)句は、指定した文字が対象データの中にいくつ存在するかをカウントし、集計用変数に格納してくれます。文字列解析の現場では、「特定の文字数を数える」という処理は頻出するため、この命令を使いこなせるようになると、コーディングのスピードが格段に上がります。

3. 実装/解決策: 基本的な使い方

INSPECT文を使用する際は、以下の2つの準備が必要です。
・解析対象となる文字列データ
・結果を格納するための「数字項目」の変数(カウンター)

構文は「INSPECT [対象データ] TALLYING [カウンター] FOR ALL [探したい文字]」となります。これだけで、COBOLが内部的にデータを一文字ずつ調べ、出現回数を自動的に計算してくれます。

4. サンプルプログラム

以下のコードをコピーして、ご自身の環境で試してみてください。入力データの中に「A」という文字がいくつ含まれているかをカウントします。

IDENTIFICATION DIVISION.
PROGRAM-ID. INSPECT-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATA PIC X(20) VALUE “BANANA-APPLE-A”.
01 WS-CNT PIC 9(02) VALUE 0.

PROCEDURE DIVISION.
> WS-DATAの中から “A” という文字をすべて検索し、その回数をWS-CNTに加算する
INSPECT WS-DATA TALLYING WS-CNT FOR ALL “A”.

> 結果を表示
DISPLAY “対象文字列: ” WS-DATA.
DISPLAY “Aの出現回数: ” WS-CNT.

STOP RUN.

5. 応用・注意点: 現場で役立つヒント

現場で使う際に注意すべき点がいくつかあります。

大文字・小文字の区別: COBOLのINSPECT文は、基本的に大文字と小文字を厳密に区別します。「A」と「a」は別物として扱われるため、入力データが混在している場合は、事前にUPPER-CASE関数で統一してから解析することをお勧めします。
カウンターの初期化: INSPECT文は実行するたびにカウントを加算します。連続して処理を行う場合は、必ずその都度カウンターを0に初期化(MOVE 0 TO WS-CNT)するのを忘れないでください。
パフォーマンス: 文字列が非常に長い場合でも、自作のループ処理を書くより、コンパイラが最適化された処理を行うINSPECT文を使う方が、実行効率が良いケースがほとんどです。

まずはこの基本形をマスターして、データ解析の第一歩を踏み出してください!

コメント

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