COBOLのLENGTH関数をマスターする7つのステップ

COBOLのLENGTH関数を学ぶ人のイメージCOBOL
この記事は約16分で読めます。

 

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

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

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

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

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

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

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

はじめに

この記事では、COBOLというプログラミング言語の中でも特に重要なLENGTH関数の使い方を、初心者でも理解しやすい形で解説します。

COBOLは現在でも多くの金融機関や企業で利用されている言語です。

この記事を通じて、LENGTH関数の基本から応用までを習得し、COBOLプログラミングのスキルを向上させることができるでしょう。

●COBOLとは

COBOL(Common Business-Oriented Language)は、ビジネス分野を中心に設計されたプログラミング言語です。

1959年に開発され、その名の通りビジネスアプリケーションの開発に特化しています。

COBOLは、その可読性の高さと堅牢な構造で知られており、特に大規模なデータ処理やバッチ処理に適しています。

○COBOLの歴史と特徴

COBOLは、1950年代後半に米国防総省の主導で開発されました。

その後、長年にわたり多くの改良が加えられてきましたが、基本的な構造や文法は初期から大きく変わっていません。

COBOLの最大の特徴はその可読性です。英語に近い文法を持ち、非技術者でも理解しやすいことが特徴です。

また、金融や保険、政府機関などで広く利用されており、特に長期にわたる運用が必要なシステムにおいて信頼性が高いと評価されています。

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

COBOLは、構造が簡潔で、ビジネスロジックの記述に適しています。

主に金融、保険、政府機関などの分野で使用され、大量のデータを扱うバッチ処理やトランザクション処理のプログラムに多く用いられます。

COBOLプログラムは、DIVISION、SECTION、PARAGRAPHといった階層構造を持ち、各部分が明確に区切られています。

これにより、プログラムのメンテナンスや更新がしやすく、大規模なシステムにおいても管理が容易です。

また、COBOLには独自のデータ型や構文があり、これらを理解することはCOBOLプログラミングを学ぶ上で重要です。

●LENGTH関数の基本

COBOLにおけるLENGTH関数は、文字列の長さを求めるために使用されます。

この関数は特にデータ処理やデータ検証の際に重要で、正確な文字列の長さを知ることで、エラーの防止やデータの整合性を保つことができます。

LENGTH関数は、COBOLの標準機能の一部として提供されており、簡単に利用することが可能です。

○LENGTH関数の定義と構造

LENGTH関数は、指定された文字列やデータ項目の長さ(文字数)を返す関数です。

この関数を使用することで、文字列の長さを数値として取得することができます。

これは特に、テキストデータを扱う際に非常に有用です。

例えば、ユーザー入力の検証やファイル内の特定のデータの長さを測る際などに使われます。

●LENGTH関数のサンプルコード

COBOLのLENGTH関数を理解する上で、実際のサンプルコードを見ることは非常に効果的です。

ここでは、LENGTH関数を使用したいくつかの具体的な例を紹介します。

○サンプルコード1:文字列の長さを測る

最初の例では、単純な文字列の長さを測定します。

下記のコードは、文字列「Hello, COBOL!」の長さを計算し、結果を表示します。

IDENTIFICATION DIVISION.
PROGRAM-ID. SimpleLength.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AString PIC X(20) VALUE 'Hello, COBOL!'.
01 StringLength PIC 9(2).
PROCEDURE DIVISION.
    COMPUTE StringLength = LENGTH OF AString
    DISPLAY 'Length of the string is: ' StringLength
    STOP RUN.

このプログラムは、文字列「Hello, COBOL!」をAString変数に格納し、その長さをStringLength変数に計算して格納します。

その後、計算された長さを表示します。

○サンプルコード2:条件分岐におけるLENGTH関数の活用

次の例では、LENGTH関数を使用して条件分岐を行います。

特定の文字列が指定した長さを超えているかどうかを確認し、その結果に基づいて異なるアクションを実行します。

IDENTIFICATION DIVISION.
PROGRAM-ID. LengthCondition.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 UserInput PIC X(100).
01 InputLength PIC 9(3).
PROCEDURE DIVISION.
    ACCEPT UserInput
    COMPUTE InputLength = LENGTH OF UserInput
    IF InputLength > 10 THEN
        DISPLAY 'Input is too long.'
    ELSE
        DISPLAY 'Input is acceptable.'
    END-IF
    STOP RUN.

このコードでは、ユーザーからの入力を受け取り、その長さを測定します。

もし入力された文字列が10文字を超えていれば、「Input is too long.」と表示し、そうでなければ「Input is acceptable.」と表示します。

○サンプルコード3:配列内の要素長の確認

最後の例では、配列内の各要素の長さを測定します。

このような処理は、データの整合性をチェックする際に役立ちます。

IDENTIFICATION DIVISION.
PROGRAM-ID. ArrayLength.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Items OCCURS 5 TIMES INDEXED BY ItemIndex.
   05 Item PIC X(20).
01 ItemLength PIC 9(2).
PROCEDURE DIVISION.
    PERFORM VARYING ItemIndex FROM 1 BY 1 UNTIL ItemIndex > 5
        COMPUTE ItemLength = LENGTH OF Items (ItemIndex)
        DISPLAY 'Length of item ' ItemIndex ': ' ItemLength
    END-PERFORM
    STOP RUN.

このプログラムでは、5つの要素を持つ配列Itemsを作成し、それぞれの要素の長さを計算して表示します。

PERFORM VARYING構文を使用して、配列の各要素にアクセスし、その長さを計算しています。

●LENGTH関数の応用例

COBOLのLENGTH関数は、基本的な文字列の長さを測定するだけでなく、様々な応用が可能です。

ここでは、LENGTH関数を使用した実践的な応用例をいくつか紹介します。

○サンプルコード4:LENGTH関数を用いたデータ検証

LENGTH関数はデータの検証にも役立ちます。

例えば、ユーザーが入力したデータが特定のフォーマットや条件を満たしているかどうかを確認する場合に使えます。

下記のサンプルコードでは、入力されたデータが指定した長さを満たしているかどうかを検証しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. DataValidation.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 UserData PIC X(20).
01 DataValid PIC X VALUE 'N'.
PROCEDURE DIVISION.
    ACCEPT UserData
    IF LENGTH OF UserData = 20 THEN
        MOVE 'Y' TO DataValid
    END-IF
    IF DataValid = 'Y' THEN
        DISPLAY 'Data is valid.'
    ELSE
        DISPLAY 'Data is invalid.'
    END-IF
    STOP RUN.

このコードは、ユーザーから20文字のデータを入力してもらい、その長さが正確に20文字であればデータを有効と判定します。

これにより、特定の長さのデータのみを受け付けるような場面で役立ちます。

○サンプルコード5:ファイル操作におけるLENGTH関数の利用

LENGTH関数はファイル操作においても有効です。

ファイルから読み込んだデータの長さを確認し、それに基づいて処理を行うことができます。

下記の例では、ファイルから読み込んだ各行の長さを測定し、それに応じた処理を行っています。

IDENTIFICATION DIVISION.
PROGRAM-ID. FileLengthCheck.
DATA DIVISION.
FILE SECTION.
FD  InputFile.
01  FileRecord PIC X(80).
WORKING-STORAGE SECTION.
01  EndOfFile PIC X VALUE 'N'.
01  LineLength PIC 9(2).
PROCEDURE DIVISION.
    OPEN INPUT InputFile
    PERFORM UNTIL EndOfFile = 'Y'
        READ InputFile INTO FileRecord
        AT END MOVE 'Y' TO EndOfFile
        NOT AT END
            COMPUTE LineLength = LENGTH OF FileRecord
            DISPLAY 'Length of line: ' LineLength
        END-READ
    END-PERFORM
    CLOSE InputFile
    STOP RUN.

このプログラムは、ファイルから1行ずつデータを読み込み、それぞれの行の長さを表示します。

これにより、ファイルの各行が特定のフォーマットに従っているかどうかを確認できます。

○サンプルコード6:LENGTH関数を使ったエラーハンドリング

COBOLでのエラーハンドリングにLENGTH関数を利用することで、より堅牢なプログラムを作成できます。

下記のサンプルでは、ユーザー入力が特定の長さを超えた場合にエラーメッセージを表示します。

IDENTIFICATION DIVISION.
PROGRAM-ID. ErrorHandler.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 UserInput PIC X(100).
01 InputLength PIC 9(3).
PROCEDURE DIVISION.
    ACCEPT UserInput
    COMPUTE InputLength = LENGTH OF UserInput
    IF InputLength > 50 THEN
        DISPLAY 'Error: Input too long.'
    ELSE
        DISPLAY 'Input accepted.'
    END-IF
    STOP RUN.

このプログラムは、ユーザーからの入力を受け取り、その長さが50文字を超えるかどうかを確認します。

50文字を超えた場合はエラーメッセージを表示し、そうでない場合は入力を受け入れます。

このような形で、LENGTH関数は入力データの検証に役立ちます。

○サンプルコード7:LENGTH関数と他の関数の組み合わせ

LENGTH関数を他の関数と組み合わせることで、より高度なデータ処理が可能になります。

下記の例では、LENGTH関数を使用して文字列を特定の長さに整形し、それをファイルに出力します。

IDENTIFICATION DIVISION.
PROGRAM-ID. CombineFunctions.
DATA DIVISION.
FILE SECTION.
FD  OutputFile.
01  OutputRecord PIC X(80).
WORKING-STORAGE SECTION.
01  OriginalString PIC X(100) VALUE 'This is a sample string for COBOL program.'.
01  ModifiedString PIC X(80).
PROCEDURE DIVISION.
    OPEN OUTPUT OutputFile
    IF LENGTH OF OriginalString > 80 THEN
        MOVE OriginalString(1:80) TO ModifiedString
    ELSE
        MOVE OriginalString TO ModifiedString
    END-IF
    WRITE OutputRecord FROM ModifiedString
    CLOSE OutputFile
    STOP RUN.

このコードでは、元の文字列が80文字を超えているかどうかを確認し、超えている場合は最初の80文字のみを新しい文字列にコピーします。

その後、この文字列をファイルに出力します。

この方法で、LENGTH関数は文字列操作とファイル処理の組み合わせにおいても有効に機能します。

●注意点と対処法

COBOLのLENGTH関数を効果的に使用するためには、いくつかの注意点を理解し、適切な対処法を知っておくことが重要です。

LENGTH関数の使用時には、特に文字列が空の場合や文字列の最大長に注意する必要があります。

また、LENGTH関数の結果を格納する変数は、適切なデータ型とサイズを選択することが重要です。

これらの点を理解し、適切に対処することで、エラーを避けることができます。

○LENGTH関数の使用時の注意点

LENGTH関数を使用する際の注意点としては、特に文字列が空の場合の処理が重要です。

LENGTH関数は空の文字列に対しても適用され、その場合の長さは0となります。

この挙動を理解しておくことは、エラーを避ける上で重要です。

また、COBOLでは文字列の最大長が定義されており、これを超える長さの文字列にLENGTH関数を適用しようとするとエラーが発生する可能性があります。

そのため、文字列の長さが最大長を超えないように注意が必要です。

さらに、LENGTH関数の結果を格納する変数は、適切なデータ型とサイズを選択する必要があり、非常に長い文字列の長さを格納する場合は、それに対応するサイズの数値型を使用することが重要です。

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

LENGTH関数の使用時によくあるエラーとして、範囲外の値によるエラーや空の文字列に対するエラー、データ型不一致によるエラーが挙げられます。

これらのエラーを防ぐためには、事前に文字列の長さをチェックし、適切な範囲内に収めるように処理を行うことが効果的です。

空の文字列に対してLENGTH関数を適用すると、結果が0になるため、これを適切に処理するためには、文字列が空でないことを確認する処理を追加することが必要です。

また、LENGTH関数の結果を格納する変数のデータ型が適切でない場合は、エラーが発生する可能性があるため、結果を格納する変数が十分なサイズを持つ数値型であることを確認することが重要です。

これらの対処法を理解し、適切に適用することで、LENGTH関数をより効果的に使用することができます。

●COBOLプログラミングのカスタマイズ方法

COBOLプログラミングでは、LENGTH関数を活用してさまざまなカスタムコードを作成することが可能です。

これにより、特定のビジネスルールやデータ処理のニーズに合わせた柔軟なプログラムを実現することができます。

例えば、データの検証、フォーマットの整形、特定の条件に基づく処理など、LENGTH関数を用いることで様々なカスタマイズが可能になります。

○LENGTH関数を活用したカスタムコードの作成

LENGTH関数を利用したカスタムコードの一例として、テキストデータのフォーマット整形を行うプログラムを考えます。

例えば、あるテキストファイルから読み込んだデータを特定の長さに整形し、新しいファイルに書き出すという処理が可能です。

このようにLENGTH関数を使うことで、入力データの検証や整形を行い、出力データの品質を保証することができます。

IDENTIFICATION DIVISION.
PROGRAM-ID. CustomFormatter.
DATA DIVISION.
FILE SECTION.
FD  InputFile.
01  InputRecord PIC X(100).
FD  OutputFile.
01  OutputRecord PIC X(80).
WORKING-STORAGE SECTION.
01  EOF-Flag PIC X VALUE 'N'.
PROCEDURE DIVISION.
    OPEN INPUT InputFile
    OPEN OUTPUT OutputFile
    PERFORM UNTIL EOF-Flag = 'Y'
        READ InputFile INTO InputRecord
        AT END
            MOVE 'Y' TO EOF-Flag
        NOT AT END
            IF LENGTH OF InputRecord > 80 THEN
                MOVE InputRecord(1:80) TO OutputRecord
            ELSE
                MOVE InputRecord TO OutputRecord
            END-IF
            WRITE OutputRecord
        END-READ
    END-PERFORM
    CLOSE InputFile
    CLOSE OutputFile
    STOP RUN.

このプログラムは、入力ファイルからデータを読み込み、80文字を超える場合は先頭から80文字を、それ以外は全文字を出力ファイルに書き出します。

これにより、出力データが一定のフォーマットに整形されることを保証します。

○独自のニーズに応えるLENGTH関数の応用

LENGTH関数の応用は多岐にわたります。

例えば、特定のビジネスロジックに基づいてデータを処理する際に、LENGTH関数を利用して文字列の特定の部分だけを抽出し、その長さに基づいてさらなる処理を行うことができます。

また、特定の条件を満たすデータのみを抽出するためにLENGTH関数を使用することも可能です。

これにより、ビジネスの特定の要件に対応する柔軟なデータ処理が可能となります。

まとめ

この記事では、COBOLのLENGTH関数を効果的に使いこなすための基本から応用までの様々な側面を解説しました。

特に注目すべきは、LENGTH関数を使用した際の注意点や、よくあるエラーの対処法です。

これらの知識を身につけることで、COBOLプログラマーはより効率的でエラーの少ないコードを書くことができるようになります。

また、LENGTH関数を応用してカスタムコードを作成する方法を学ぶことで、個々のプロジェクトや特定のビジネスニーズに合わせた柔軟なプログラミングが可能になります。

COBOLは古い言語であるとよく言われますが、その機能と柔軟性は現代のプログラミングニーズにも十分応えるものです。

LENGTH関数のような基本的な機能を深く理解し、適切に使用することで、COBOLプログラミングの可能性を最大限に引き出すことができます。

プログラミング初心者から上級者まで、この記事がCOBOLのLENGTH関数の理解と活用に役立つことを願っています。