【PL/I学習|実務向け】メインフレーム開発における可変長文字列(VARYING)の活用と実装テクニック

1. 導入

メインフレームのCOBOL開発において、固定長データ(PIC X(n))は基本ですが、文字列の連結や可変長のデータ処理が頻発するケースでは、その取り扱いに工夫が必要です。特にDB2との連携やAPI呼び出しにおいて、不必要なスペース(空白)を排除し、処理効率を最適化するために「VARYING」属性は欠かせない技術です。本稿では、VARYING属性の仕組みを正しく理解し、現場で安全かつ効率的に利用するための実装術を解説します。

2. 基礎知識

VARYING属性を持つデータ項目は、コンパイラによって「2バイトの長さフィールド(LL)」+「実データ」という構造でメモリ上に配置されます。固定長文字列と異なり、文字列の末尾に空白を詰める必要がないため、メモリ使用量の削減や、文字列連結処理における計算コストの低減が期待できます。DB2のVARCHAR型とメモリレイアウトが一致するため、SQLを用いたデータ操作との親和性が非常に高いのが特徴です。

3. 実装/解決策

実装のポイントは「長さフィールドへのアクセス」を意識することです。VARYING項目へ値を代入すると、自動的に先頭2バイトに現在の文字列長がセットされます。固定長項目へ転記する際は、自動的に空白埋めが行われますが、逆に固定長項目からVARYING項目へ転記する際は、固定長側の末尾空白が含まれてしまう可能性があるため、必要に応じてINSPECT文や関数を用いたトリミング処理を検討してください。

4. サンプルプログラム

以下に、VARYING属性を使用した文字列連結のサンプルを示します。

IDENTIFICATION DIVISION.
PROGRAM-ID. VAR-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.

  • VARYING属性の宣言(最大100バイト)

01 WS-MSG-VAR PIC X(100) VARYING.
01 WS-PART-1 PIC X(10) VALUE ‘MAIN’.
01 WS-PART-2 PIC X(10) VALUE ‘FRAME’.

PROCEDURE DIVISION.

  • 文字列の結合処理
  • VARYING項目に値を代入すると、自動的に長さヘッダが更新されます

MOVE WS-PART-1 TO WS-MSG-VAR.

  • 文字列を連結(実データの後ろに連結される)

STRING WS-MSG-VAR DELIMITED BY SIZE
‘-‘ DELIMITED BY SIZE
WS-PART-2 DELIMITED BY SIZE
INTO WS-MSG-VAR.

  • 結果の表示(デバッグ用)

DISPLAY ‘結合後の文字列: ‘ WS-MSG-VAR.

STOP RUN.

5. 応用・注意点

現場での運用において最も注意すべき点は、「固定長とVARYINGの混在」です。外部サブシステムや既存のCOPY句から受け取った固定長データには、意図しない末尾空白が含まれていることが多々あります。VARYING項目へ格納する前に、FUNCTION TRIM()を利用して空白を除去する習慣をつけましょう。また、VARYING項目をそのままバイナリデータとしてファイル出力する場合、先頭2バイトの長さヘッダがそのまま書き出されます。ファイル定義(FD)や出力先での互換性に影響がないか、必ず事前の検証を行ってください。

コメント

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