1. 導入:なぜINSPECTの使い分けが重要なのか
業務システムでは、帳票出力やデータ変換の際に「先行ゼロ(Leading Zero)の削除」や「特定の文字の出現回数チェック」が頻繁に発生します。この時、INSPECT文のALLとLEADINGを混同して使用すると、意図しないカウント結果となり、データ不整合を引き起こすリスクがあります。本記事では、この両者の挙動を整理し、実務で安全に使い分けるためのポイントを解説します。
2. 基礎知識:INSPECT文の役割
INSPECT文は、データ項目内の文字列を検査し、指定した条件に一致する文字の数を数えたり(TALLYING)、置き換えたり(REPLACING)する命令です。
・ALL:対象データ内に存在する指定文字列を、出現するたびにすべてカウントします。
・LEADING:対象データの「先頭から連続して」出現する指定文字列のみをカウントします。途中で別の文字が現れた時点でカウントを終了します。
3. 実装と解決策:文脈による使い分け
例えば、「000120」というデータから「先頭のゼロだけを数えたい」というケースを考えます。ここでALLを使用すると、数値の途中にある「0」まで数えてしまい、誤った結果となります。LEADINGを使用すれば、先頭の「000」のみを正確に特定可能です。
4. サンプルプログラム
以下のサンプルコードを参考に、実際の挙動を確認してみてください。
IDENTIFICATION DIVISION.
PROGRAM-ID. INSPECT-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TEST-DATA PIC X(6) VALUE “000120”.
01 CNT-ALL PIC 9(02) VALUE 0.
01 CNT-LEADING PIC 9(02) VALUE 0.
PROCEDURE DIVISION.
> ALLを使用:データ中の全ての”0″を数える(結果: 4)
INSPECT TEST-DATA TALLYING CNT-ALL FOR ALL “0”.
> LEADINGを使用:先頭から連続する”0″のみを数える(結果: 3)
INSPECT TEST-DATA TALLYING CNT-LEADING FOR LEADING “0”.
DISPLAY “ALLの結果: ” CNT-ALL.
DISPLAY “LEADINGの結果: ” CNT-LEADING.
STOP RUN.
5. 応用・注意点:現場でのトラブル回避
現場でよくある失敗として、「LEADINGで数えた後に、その数値を元に文字列を編集する」際、データがすべて対象文字だった場合(例:「000000」)の処理漏れがあります。
・注意点1:対象文字がすべてだった場合、LEADINGはデータ長と同じ値を返します。このとき、後続の編集処理で添字範囲外エラー(インデックスエラー)にならないよう、必ずデータ長チェックを併用してください。
・注意点2:日本語(マルチバイト文字)をINSPECT対象にする際は、コンパイラの仕様により動作が異なる場合があります。基本的には英数字データに対して使用するのが安全です。
これらの使い分けをマスターすることで、より堅牢なデータ加工ロジックを構築できます。ぜひ、日々の保守作業で意識してみてください。

コメント