【COBOL】UNTIL句の活用法8選

COBOLのUNTIL句の活用法を解説するイメージCOBOL
この記事は約16分で読めます。

 

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

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

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

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

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

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

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

はじめに

この記事を読めば、プログラミングにおいて古典的でありながら依然として重要な役割を果たすCOBOL言語について、基本から応用まで理解することができます。

特に、COBOLにおける「UNTIL句」の使い方に焦点を当て、初心者でも分かりやすい形で解説します。

COBOLを学ぶことは、古いシステムと新しい技術の橋渡しをするために不可欠です。

この言語の基礎を学ぶことで、あなたのプログラミングのスキルセットはより豊かになるでしょう。

●COBOLとは

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

その設計の主な目的は、商業的なデータ処理が簡単に行えるようにすることにありました。

COBOLはその後、数十年にわたり金融機関、保険会社、政府機関などで広く使用されてきました。

特に、大規模なバッチ処理や複雑なデータ処理に適しており、今日においても多くの既存システムで使用されています。

○COBOLの歴史と特徴

COBOLは、人間が読みやすい言語を目指して設計されており、英語に似た構文を有しています。

これは、非技術者でもプログラムの基本的な理解が可能という利点を持っています。

しかし、この言語は古いため、近代的なプログラミング言語に比べると柔軟性に欠ける部分もあります。

それでも、大量のデータを扱う金融系のアプリケーションなどでは、その信頼性の高さから現在も活躍しています。

○プログラミング初心者が知っておくべきCOBOLの基本

プログラミング初心者がCOBOLを学ぶ上で知っておくべき最も重要なことは、COBOLがビジネス用途に特化している点です。

これは、主に金融や会計などの分野で使われることを意味しています。

COBOLはその構造上、処理の流れが明確で、読みやすいコードを書くことが可能です。

また、COBOLは固定長のデータフィールドを扱う能力に長けており、大量のデータレコードを効率的に処理するのに適しています。

これらの特性を理解することで、COBOLの学習がより効果的になるでしょう。

●UNTIL句の基本

COBOLプログラミングにおけるUNTIL句は、繰り返し処理を行う際に重要な役割を果たします。

ここでは、UNTIL句の基本的な概念とその使い方について解説します。

UNTIL句を理解し、適切に使用することで、COBOLプログラムの効率と可読性を高めることができます。

○UNTIL句とは何か

UNTIL句は、指定された条件が真(true)になるまで、一連の操作を繰り返し実行するために使用されます。

この句は主にループ処理において用いられ、ループの終了条件を設定する際に重要です。

UNTIL句は「PERFORM … UNTIL …」の形で使用され、条件が満たされるまでPERFORMによって指定された処理が繰り返されます。

○UNTIL句の構文と基本的な使い方

UNTIL句の基本的な構文は次の通りです。

PERFORM [処理] UNTIL [条件]

ここで、[処理]は繰り返し実行されるコードブロックを、[条件]はループの終了を制御する条件を指します。

例えば、ある変数の値が特定の値に達するまでループを続ける、といった使い方が可能です。

ここでは、単純なUNTIL句の使用例を紹介します。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SampleProgram.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  COUNTER  PIC 9(3) VALUE 0.

       PROCEDURE DIVISION.
       MAIN-LOGIC.
           PERFORM UNTIL COUNTER = 100
               ADD 1 TO COUNTER
           END-PERFORM
           DISPLAY 'COUNTER REACHED 100'
           STOP RUN.

この例では、COUNTER変数が100に達するまで、COUNTERに1を加算する操作を繰り返しています。

UNTIL句が「COUNTER = 100」という条件を評価し、この条件が真になるとループから抜け出します。

このように、UNTIL句はCOBOLにおいて非常に基本的でありながら強力なツールです。

●UNTIL句の活用方法

COBOL言語におけるUNTIL句の応用方法を理解することは、効率的かつ強力なプログラミングを実現するために不可欠です。

UNTIL句を使用することで、繰り返し処理をより柔軟に制御することが可能となります。

ここでは、UNTIL句を用いた様々な応用方法をサンプルコードを交えて紹介します。

○サンプルコード1:繰り返し処理の基本

UNTIL句を使用した基本的な繰り返し処理の一例を紹介します。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. BasicLoop.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  NUM  PIC 9(3) VALUE 0.

       PROCEDURE DIVISION.
       MAIN-LOGIC.
           PERFORM UNTIL NUM = 10
               ADD 1 TO NUM
           END-PERFORM
           DISPLAY 'NUM REACHED 10'
           STOP RUN.

このコードでは、変数NUMが10に達するまで、NUMに1を加算する操作を繰り返しています。

UNTIL句は条件が真となるまで、つまりNUMが10になるまでPERFORMブロック内の処理を実行し続けます。

○サンプルコード2:条件付きループ

より複雑な条件を用いたループ処理の例を紹介します。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ConditionalLoop.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  COUNT  PIC 9(3) VALUE 0.

       PROCEDURE DIVISION.
       MAIN-LOGIC.
           PERFORM UNTIL COUNT > 20 OR COUNT = 5
               ADD 1 TO COUNT
           END-PERFORM
           DISPLAY 'LOOP FINISHED WITH COUNT: ' COUNT
           STOP RUN.

この例では、変数COUNTが20より大きくなるか、またはCOUNTが5と等しい場合にループを終了します。

このように、UNTIL句では複数の条件を組み合わせてループの終了条件を設定することができます。

これにより、プログラムの制御構造をより柔軟に設計することが可能となります。

○サンプルコード3:複数条件の利用

COBOLのUNTIL句では複数の条件を組み合わせて使用することも可能です。

これにより、より複雑なロジックや制御フローを実現できます。

下記のサンプルコードは、複数条件を使用したUNTIL句の一例を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MultiConditionLoop.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  NUM-A  PIC 9(3) VALUE 0.
       01  NUM-B  PIC 9(3) VALUE 0.

       PROCEDURE DIVISION.
       MAIN-LOGIC.
           PERFORM UNTIL NUM-A > 10 OR NUM-B < 5
               ADD 1 TO NUM-A
               SUBTRACT 1 FROM NUM-B
           END-PERFORM
           DISPLAY 'LOOP FINISHED'
           STOP RUN.

このコードでは、NUM-Aが10より大きくなるか、またはNUM-Bが5未満になるまでループを実行します。

複数の条件を用いることで、ループの終了タイミングをより細かく制御することができます。

○サンプルコード4:ネストされたループ

ネストされたループは、一つのループ内に別のループを含めることを意味します。

UNTIL句を使用したネストされたループの例を紹介します。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. NestedLoop.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  OUTER-COUNTER  PIC 9(3) VALUE 0.
       01  INNER-COUNTER  PIC 9(3) VALUE 0.

       PROCEDURE DIVISION.
       MAIN-LOGIC.
           PERFORM UNTIL OUTER-COUNTER = 5
               PERFORM UNTIL INNER-COUNTER = 5
                   ADD 1 TO INNER-COUNTER
               END-PERFORM
               ADD 1 TO OUTER-COUNTER
               MOVE 0 TO INNER-COUNTER
           END-PERFORM
           DISPLAY 'NESTED LOOP FINISHED'
           STOP RUN.

この例では、外側のループが5回実行される間、内側のループもそれぞれ5回ずつ実行されます。

ネストされたループは、多次元配列の処理や複数のデータセットに対する操作など、さまざまなシナリオで有効です。

●UNTIL句の応用例

COBOLのUNTIL句は、ファイル処理やデータベース操作など、さまざまな応用分野で有用です。

実際の業務シナリオにおいて、UNTIL句を効果的に使用することで、複雑なデータ処理タスクを効率的に処理することが可能です。

○サンプルコード5:ファイル処理

ファイルからのデータ読み込みや書き込みにおいても、UNTIL句は大きな役割を果たします。

下記のサンプルコードは、ファイルからデータを読み込む際にUNTIL句を使用した例です。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. FileReadExample.
       DATA DIVISION.
       FILE SECTION.
       FD  INPUT-FILE.
       01  INPUT-RECORD  PIC X(80).

       WORKING-STORAGE SECTION.
       01  EOF-FLAG  PIC X VALUE 'N'.

       PROCEDURE DIVISION.
       OPEN INPUT INPUT-FILE.
       READ-LOOP.
           PERFORM UNTIL EOF-FLAG = 'Y'
               READ INPUT-FILE INTO INPUT-RECORD
               AT END MOVE 'Y' TO EOF-FLAG
               NOT AT END DISPLAY INPUT-RECORD
           END-PERFORM
       CLOSE INPUT-FILE.
       STOP RUN.

このコードは、ファイルからレコードを読み込み、EOF(End-Of-File)が到達するまで読み込みを続けます。

EOFが検出されると、UNTIL句の条件が満たされ、ループから抜け出します。

○サンプルコード6:データベース操作

データベースとのやり取りにおいても、UNTIL句はデータ処理のループ制御に役立ちます。

下記のサンプルコードでは、データベースからデータを読み込み、特定の条件が満たされるまで処理を続ける方法を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. DatabaseLoop.
       DATA DIVISION.
       SQL SECTION.
       EXEC SQL INCLUDE SQLCA END-EXEC.

       WORKING-STORAGE SECTION.
       01  CUSTOMER-ID  PIC 9(4).
       01  CUSTOMER-NAME  PIC X(40).
       01  PROCESS-COMPLETED  PIC X VALUE 'N'.

       PROCEDURE DIVISION.
       EXEC SQL OPEN CUSTOMER-CURSOR END-EXEC.
       PERFORM UNTIL PROCESS-COMPLETED = 'Y'
           EXEC SQL FETCH CUSTOMER-CURSOR INTO :CUSTOMER-ID, :CUSTOMER-NAME END-EXEC
           IF SQLCODE = 100
               MOVE 'Y' TO PROCESS-COMPLETED
           ELSE
               DISPLAY CUSTOMER-ID, CUSTOMER-NAME
           END-IF
       END-PERFORM
       EXEC SQL CLOSE CUSTOMER-CURSOR END-EXEC.
       STOP RUN.

この例では、顧客データをデータベースから順次読み込み、全てのデータが処理されるまでループを続けます。

各レコードが読み込まれるたびに、その内容が表示されます。

○サンプルコード7:エラーハンドリング

COBOLプログラミングにおいて、エラーハンドリングは重要な側面です。

UNTIL句を利用したエラーハンドリングの方法をサンプルコードを交えて紹介します。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ErrorHandler.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  ERROR-CODE  PIC 9 VALUE 0.

       PROCEDURE DIVISION.
       BEGIN.
           PERFORM UNTIL ERROR-CODE NOT = 0
               CALL 'SOME-SUBROUTINE' RETURNING ERROR-CODE
           END-PERFORM
           IF ERROR-CODE = 1
               DISPLAY 'ERROR: INVALID INPUT'
           ELSE IF ERROR-CODE = 2
               DISPLAY 'ERROR: DATABASE CONNECTION FAILED'
           END-IF
           STOP RUN.

このコードでは、サブルーチンを呼び出し、エラーコードをチェックしています。

エラーコードが0以外になった場合、エラーの種類に応じたメッセージを表示します。

○サンプルコード8:効率的なデータ処理

UNTIL句を使って、データ処理の効率を向上させる方法を紹介します。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. EfficientDataProcessing.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  DATA-ITEM  PIC X(100).
       01  PROCESS-COUNT  PIC 9(4) VALUE 0.

       PROCEDURE DIVISION.
       BEGIN.
           PERFORM UNTIL DATA-ITEM = 'END'
               CALL 'READ-DATA' RETURNING DATA-ITEM
               IF DATA-ITEM NOT = 'END'
                   PROCESS DATA-ITEM
                   ADD 1 TO PROCESS-COUNT
               END-IF
           END-PERFORM
           DISPLAY 'PROCESSED ' PROCESS-COUNT ' ITEMS'
           STOP RUN.

このコードでは、’END’が読み込まれるまでデータを読み込み、処理します。

この方法は、データの量が不定である場合に特に有効です。

●注意点と対処法

COBOLのUNTIL句を使用する際には、いくつかの注意点があります。

適切な使い方を理解し、一般的なエラーを避けるための対策を講じることが重要です。

○UNTIL句の注意点

UNTIL句を使用する際には、特に無限ループに陥らないように注意が必要です。

無限ループはシステムリソースを過度に消費し、プログラムの応答性を低下させる原因となります。

このため、UNTIL句の条件は慎重に設定し、期待される動作を実現するための適切なロジックを確立することが重要です。

また、UNTIL句内で使用する変数の値が適切に更新されることを保証し、意図した条件でループから抜け出せるようにする必要があります。

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

UNTIL句の使用においてよく発生するエラーの一つは、条件式の誤りです。

誤った条件式では、ループが予定通りに終了しないか、または全く実行されない可能性があります。

このような問題を防ぐためには、条件式を丁寧に検討し、必要に応じてテストを行うことが有効です。

また、ループ内で変更される変数の値を適切に管理し、意図しない動作が発生しないように注意することも重要です。

特に、外部からの介入や予期せぬ値の変更によってループの挙動が変わる可能性があるため、これらの要因を慎重に考慮する必要があります。

まとめ

この記事では、COBOLプログラミングにおけるUNTIL句の基本的な使い方から応用例まで、幅広く解説しました。

UNTIL句は、COBOLにおいて繰り返し処理を制御するための重要な構文です。

そのため、プログラミング初心者から上級者まで、正確な使用方法を理解し、適切に活用することが求められます。

UNTIL句はCOBOLプログラミングにおいて不可欠な構文であり、その正しい理解と適用がプログラムの成功に直結することを強調します。

本記事を通じて、読者の皆様がUNTIL句の効果的な使い方を学び、COBOLプログラミングのスキルを高める一助となれば幸いです。