【COBOL】VARYING句の使い方8選

COBOLプログラミング初心者向けにVARYING句の使い方を解説する記事のイメージ COBOL
この記事は約15分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、COBOLの「VARYING句」を使いこなすことができるようになります。

COBOLは、主にビジネス、金融、行政分野で広く使用されているプログラミング言語です。

この記事では、特に「VARYING句」の使い方を初心者にもわかりやすく解説します。

COBOLの基本的な概念から始め、VARYING句の詳細な使い方、具体的なサンプルコードを通して、この古典的ながらも強力な言語の一角を掘り下げていきましょう。

●COBOLとは

COBOL(Common Business Oriented Language)は、1959年に開発されたビジネス向けの高水準プログラミング言語です。

その名の通り、ビジネスデータの処理に特化しており、銀行、保険会社、政府機関などで広く利用されています。

COBOLの特徴は、英語に近い構文を持ち、読みやすいことです。

長期にわたる運用が可能で、大量のデータを効率的に処理できるため、現在でも多くの既存システムで使用されています。

○COBOLの基本概要

COBOLは、データ構造とビジネスロジックに重点を置いた言語です。

データは「レコード」と呼ばれる構造で表現され、それぞれが複数の「フィールド」を持ちます。

これらのフィールドには様々なデータタイプを定義でき、ビジネスロジックではこれらのデータに対する操作が行われます。

COBOLプログラムは、通常「IDENTIFICATION DIVISION」、「ENVIRONMENT DIVISION」、「DATA DIVISION」、「PROCEDURE DIVISION」という4つのセクションで構成されています。

これらのセクションはプログラムの異なる側面を表し、それぞれが特定の役割を担っています。

○プログラミング言語としてのCOBOLの特徴

COBOLの最大の特徴はその読みやすさです。

構文は英語に似ており、プログラムは自然言語のように書くことができます。

これにより、非技術者でもプログラムの意図を理解しやすくなっています。

また、COBOLは堅牢なデータ処理機能を持ち、特に大規模なバッチ処理やトランザクション処理に適しています。

歴史が長い言語でありながら、現代のビジネスニーズに合わせて進化を続けている点も見逃せません。

例えば、オブジェクト指向機能の導入や、XMLやJSONといった現代のデータ形式との連携機能も備えています。

●VARYING句の基本

COBOLにおけるVARYING句は、可変長データの処理に不可欠な要素です。

この句を使用することで、プログラムはデータの長さが事前に不確定な場合でも、柔軟に対応することが可能になります。

具体的には、文字列や配列などのデータ型に対して、実行時に長さを変更できるようになるのです。

これは、COBOLが伝統的に強いデータ処理の分野で、特に有効な機能と言えます。

○VARYING句とは何か

VARYING句は、COBOLにおいて変数の長さを動的に変更するために使用される句です。

通常、変数の長さは宣言時に固定されますが、VARYING句を使用することで、その長さをプログラムの実行中に変更することが可能になります。

これにより、データのサイズに応じてメモリの使用を最適化したり、入力データの長さに応じた処理を行うことができるようになるのです。

○VARYING句の利用シーン

VARYING句の典型的な利用シーンは、ユーザーからの入力やファイルからのデータ読み込み時です。

特に、入力データの長さが事前に予測できない場合や、異なる長さのデータを扱う必要がある場合に役立ちます。

例えば、異なる長さの文字列を処理する際や、可変長のレコードを扱うデータベースアプリケーションの開発時などに、VARYING句は効果を発揮します。

この機能によって、COBOLプログラマーはより効率的で柔軟なコードを書くことが可能になります。

●VARYING句の使い方

COBOLにおけるVARYING句の使い方は、プログラムの柔軟性と効率性を大幅に向上させます。

この句を用いることで、データの長さを動的に変更し、プログラムがさまざまなサイズのデータに対応できるようになります。これは、特に可変長のデータを扱う際に非常に役立ちます。

VARYING句の基本的な構文は、変数宣言の一部として使用され、データ型の後に ‘VARYING’ キーワードを指定します。

ここでは、実際にVARYING句を使ったCOBOLのサンプルコードを通じて、その使い方を具体的に見ていきましょう。

○サンプルコード1:文字列の長さを動的に変更する

このサンプルコードでは、ユーザーの入力に基づいて文字列の長さを動的に変更する方法を紹介します。

例えば、ユーザーが入力した名前を格納するための文字列変数にVARYING句を使用します。

01  USER-NAME.
    05  USER-NAME-LENGTH  PIC 9(2).
    05  USER-NAME-VALUE   PIC X(50) VARYING DEPENDING ON USER-NAME-LENGTH.

この例では、USER-NAME-LENGTHが実際の文字列の長さを保持し、USER-NAME-VALUEが最大50文字までの可変長文字列を格納できるようになっています。

ユーザーからの入力に基づいて、実際の文字列の長さがUSER-NAME-LENGTHに設定され、その長さに応じてUSER-NAME-VALUEの長さが動的に変わります。

○サンプルコード2:配列要素の長さを動的に管理する

配列要素の長さを動的に管理することも、VARYING句の重要な用途の一つです。

このサンプルでは、可変長の文字列を格納する配列の宣言方法を表します。

01  USER-COMMENTS.
    05  NUM-COMMENTS      PIC 9(2).
    05  COMMENTS          OCCURS 10 TIMES
        DEPENDING ON NUM-COMMENTS.
        10  COMMENT-LENGTH PIC 9(2).
        10  COMMENT-VALUE  PIC X(100) VARYING DEPENDING ON COMMENT-LENGTH.

このコードでは、COMMENTS配列が最大10個のコメントを格納できるように定義されており、各コメントは最大100文字の可変長文字列として格納されます。

COMMENT-LENGTHは各コメントの実際の長さを保持し、その長さに応じてCOMMENT-VALUEの長さが変化します。

これにより、各コメントの実際のデータサイズに合わせてメモリを効率的に使用することが可能になります。

○サンプルコード3:レコードのサイズを動的に調整する

COBOLでのレコードサイズの動的調整は、特にデータベースやファイル処理において重要です。

ここでは、レコード内の特定フィールドのサイズをVARYING句を使用して動的に調整する方法を紹介します。

たとえば、顧客のコメントを格納するフィールドがあり、その長さが顧客によって異なる場合、VARYING句を使用して最適なサイズに調整できます。

01  CUSTOMER-RECORD.
    05  CUSTOMER-NAME     PIC X(30).
    05  COMMENT-LENGTH    PIC 9(3).
    05  CUSTOMER-COMMENT  PIC X(200) VARYING DEPENDING ON COMMENT-LENGTH.

このコードでは、CUSTOMER-COMMENTのサイズがCOMMENT-LENGTHによって動的に変更されます。

顧客のコメントが短い場合、不必要なメモリを割り当てずに済み、データ処理の効率化が図れます。

○サンプルコード4:入力データの長さに応じた処理

入力データの長さに応じた処理は、ユーザーインターフェースやデータ処理アプリケーションで一般的です。

このサンプルでは、ユーザーからの入力データ長に基づいて処理を行う方法を紹介します。

例えば、ユーザーからのメッセージを受け取り、その長さに応じて異なる処理を行う場合です。

01  USER-INPUT-DATA.
    05  DATA-LENGTH       PIC 9(3).
    05  USER-DATA         PIC X(100) VARYING DEPENDING ON DATA-LENGTH.

PROCEDURE DIVISION.
    ACCEPT USER-DATA.
    IF DATA-LENGTH > 50
        PERFORM LONG-DATA-PROCESSING
    ELSE
        PERFORM SHORT-DATA-PROCESSING.

この例では、ユーザーが入力したデータ(USER-DATA)の長さ(DATA-LENGTH)に基づいて、異なる処理(LONG-DATA-PROCESSINGまたはSHORT-DATA-PROCESSING)を行います。

このようにVARYING句を使用することで、データの長さに柔軟に対応し、より効率的なプログラムを実現できます。

●VARYING句の応用例

COBOLのVARYING句は、その柔軟性から多様な応用例を持ちます。

ファイル処理やデータベース操作、ユーザーインターフェースの設計など、さまざまな場面でこの句を活用することができます。

ここでは、ファイル処理とユーザー入力に関連する具体的な応用例を紹介します。

○サンプルコード5:ファイルの可変長データ処理

ファイルからのデータ読み込みは、COBOLプログラミングにおいて一般的な作業です。

VARYING句を使えば、可変長のデータレコードを効率的に処理できます。

下記のサンプルコードは、可変長のレコードを含むファイルからデータを読み込み、処理する方法を表しています。

01  FILE-RECORD.
    05  RECORD-LENGTH     PIC 9(3).
    05  RECORD-DATA       PIC X(1000) VARYING DEPENDING ON RECORD-LENGTH.

PROCEDURE DIVISION.
    OPEN INPUT FILE-NAME.
    READ FILE-NAME INTO FILE-RECORD.
    PERFORM VARYING PROCESSING DEPENDING ON RECORD-LENGTH.
    CLOSE FILE-NAME.

このコードでは、FILE-RECORDを使用してファイルからレコードを読み込み、RECORD-LENGTHに応じてRECORD-DATAのサイズが動的に決定されます。

これにより、ファイルのサイズに関係なく、効率的なデータ処理を実現できます。

○サンプルコード6:ユーザー入力に応じたデータ処理

ユーザーインターフェースにおいても、VARYING句は有用です。ユーザーからの入力データの長さに応じて動的に処理を変更することができます。

下記のサンプルコードは、ユーザーからの入力に基づいて異なる処理を行う方法を表しています。

01  USER-INPUT.
    05  INPUT-LENGTH      PIC 9(3).
    05  INPUT-DATA        PIC X(200) VARYING DEPENDING ON INPUT-LENGTH.

PROCEDURE DIVISION.
    ACCEPT USER-INPUT.
    IF INPUT-LENGTH > 100
        PERFORM COMPLEX-PROCESSING
    ELSE
        PERFORM SIMPLE-PROCESSING.

このコードでは、ユーザーの入力(INPUT-DATA)の長さ(INPUT-LENGTH)に基づいて、単純な処理(SIMPLE-PROCESSING)または複雑な処理(COMPLEX-PROCESSING)を行います。

VARYING句を使用することで、ユーザーの入力に応じて柔軟に対応するプログラムを作成できます。

○サンプルコード7:複数のデータ型でのVARYING句の使用

COBOLにおけるVARYING句の応用は、複数のデータ型にわたることもあります。

このサンプルコードでは、異なるデータ型の可変長データを扱う方法を紹介します。

ここでは、文字列と数値データの両方に対してVARYING句を適用し、それぞれのデータ型に応じてメモリ使用を最適化します。

01  MIXED-DATA-RECORD.
    05  STRING-LENGTH     PIC 9(3).
    05  STRING-DATA       PIC X(100) VARYING DEPENDING ON STRING-LENGTH.
    05  NUMBER-LENGTH     PIC 9(3).
    05  NUMBER-DATA       PIC 9(10) VARYING DEPENDING ON NUMBER-LENGTH.

このコードでは、STRING-DATANUMBER-DATAの両方にVARYING句を使用し、それぞれの長さをSTRING-LENGTHNUMBER-LENGTHで制御します。

このようにすることで、異なるタイプのデータを効率的に処理でき、プログラムの柔軟性が向上します。

○サンプルコード8:効率的なメモリ使用のためのVARYING句

プログラムのメモリ効率を高めるためにも、VARYING句は有効です。

下記のサンプルコードでは、大量のデータを扱う際にメモリ使用量を最適化する方法を紹介します。

この例では、大規模なデータセットの中で可変長のデータを効率的に管理します。

01  LARGE-DATA-SET.
    05  ITEM-COUNT       PIC 9(5).
    05  DATA-ITEMS       OCCURS 1000 TIMES
        DEPENDING ON ITEM-COUNT.
        10  ITEM-LENGTH   PIC 9(3).
        10  ITEM-DATA     PIC X(500) VARYING DEPENDING ON ITEM-LENGTH.

このコードでは、最大1000個のデータアイテムを格納できるDATA-ITEMS配列を宣言し、各アイテムの実際のサイズをITEM-LENGTHに基づいて動的に調整します。

これにより、使用されないメモリ領域の割り当てを避け、大量のデータを効率的に扱うことができます。

●注意点と対処法

COBOLのVARYING句を使用する際には、特定の注意点が存在します。

これらのポイントを理解し、適切に対処することで、エラーの発生を防ぎ、プログラムの効率と安定性を高めることが可能です。

○VARYING句使用時の一般的な注意点

COBOLでVARYING句を使用する際には、いくつかの一般的な注意点があります。

これらの注意点には、データ長を正確に定義すること、プログラムの性能に与える影響を考慮すること、データ構造の複雑さを適切に管理することが含まれます。

これらのポイントを適切に扱うことで、プログラムの品質を向上させることができます。

○よくあるエラーとその対処法

VARYING句の使用には、いくつかの典型的なエラーが存在します。

これらのエラーには、データ長の指定ミス、メモリオーバーフロー、性能の低下が含まれます。

これらの問題を避けるためには、データ長の検証、メモリの使用量を厳格に管理し、データのサイズと使用頻度に基づいて最適化することが重要です。

これらの対処法を適切に実施することで、エラーを減少させ、プログラムの効率を高めることができます。

●カスタマイズ方法

COBOLのVARYING句は、様々な状況に合わせてカスタマイズすることが可能です。

ここでは、VARYING句のカスタマイズ方法について詳細に解説します。

カスタマイズを行うことで、特定のアプリケーションやデータ処理の要件に合わせた最適なプログラムを作成することができます。

たとえば、異なる種類のデータや変動するデータサイズに対応するために、VARYING句のパラメータを調整することが考えられます。

○VARYING句のカスタマイズ例

VARYING句をカスタマイズする一例として、特定のビジネスロジックに応じてデータフィールドのサイズを動的に変更することが挙げられます。

例えば、顧客データベースにおいて、顧客によって異なる数の連絡先情報を持つ場合、各顧客のデータレコードにおいて連絡先フィールドのサイズを動的に変更することが可能です。

01  CUSTOMER-RECORD.
    05  CONTACT-COUNT      PIC 9(3).
    05  CONTACTS           OCCURS 1 TO 100 TIMES
                            DEPENDING ON CONTACT-COUNT
                            INDEXED BY CONTACT-IDX.
        10  CONTACT-INFO    PIC X(50).

このコードでは、CONTACTS配列の各要素にCONTACT-INFOフィールドがあり、そのサイズはCONTACT-COUNTの値によって動的に変化します。

これにより、各顧客の連絡先情報の数に応じてメモリの使用を最適化できます。

○異なる状況でのVARYING句の応用

VARYING句は、異なる処理シナリオやビジネス要件に応じて応用することが可能です。

例えば、大量のトランザクションデータを処理する金融アプリケーションにおいて、トランザクションの種類によって異なるデータ構造を持たせることができます。

01  TRANSACTION-RECORD.
    05  TRANSACTION-TYPE   PIC X(3).
    05  TRANSACTION-DATA.
        88  DEPOSIT        VALUE 'DEP'.
        88  WITHDRAWAL     VALUE 'WTH'.
        10  DEPOSIT-DATA   PIC X(100) VARYING DEPENDING ON DEPOSIT.
        10  WITHDRAWAL-DATA PIC X(100) VARYING DEPENDING ON WITHDRAWAL.

このコードでは、TRANSACTION-TYPEに基づいて、DEPOSIT-DATAまたはWITHDRAWAL-DATAのどちらか一方のフィールドを使用します。

これにより、トランザクションの種類に応じて必要なデータフィールドのみを活用し、無駄なメモリ使用を防ぐことができます。

まとめ

この記事を通じて、COBOLのVARYING句の基本から応用まで、様々な使い方を詳細に解説しました。

この記事が、COBOL初心者から上級者まで、この記事がVARYING句の理解と活用に役立つことを願っています。

プログラミングは常に進化していますが、基本からしっかりと学び、応用を探求することが成功の鍵です。