読み込み中...

COBOLのSUBSTRING関数活用法を初心者向けに8つのステップ解説

COBOLのSUBSTRING関数を使用したサンプルコード COBOL
この記事は約15分で読めます。

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

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

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

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

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

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

はじめに

この記事を読めば、COBOLプログラミングの基本から始めて、特にSUBSTRING関数の使用方法を学ぶことができます。

初心者でも理解しやすいように、具体的な例と共に進めていきましょう。

●COBOLとは

COBOL(Common Business-Oriented Language)は、ビジネス分野におけるデータ処理のために設計されたプログラミング言語です。

1959年に開発され、現在も金融機関や行政機関などで広く使用されています。

COBOLの特徴は、英語に近い構文を持ち、非技術者でも理解しやすい点にあります。

長年の使用によって安定性が高く、大規模なデータ処理において信頼性が高いと評価されています。

○COBOLの基本

COBOL言語は、次の4つの主要な部分で構成されています。

  1. IDENTIFICATION DIVISION:プログラムの識別情報を記述します。
  2. ENVIRONMENT DIVISION:プログラムが動作する環境を定義します。
  3. DATA DIVISION:使用するデータの構造を定義します。
  4. PROCEDURE DIVISION:プログラムの具体的な処理手順を記述します。

COBOLは、これらの部分を通じて、明確な構造でプログラムを記述することが可能です。

特に、DATA DIVISIONでは変数の定義が行われ、プログラムの処理に必要なデータを扱います。

○COBOLプログラミングの特徴

COBOLプログラミングは、その読みやすさと書きやすさで知られています。

例えば、「MOVE A TO B」というコードは、「Aの内容をBに移動する」という直感的な意味を持ちます。

このように、COBOLは英語に似た文法を用いるため、プログラムの意図が理解しやすくなっています。

また、COBOLは大規模なビジネスアプリケーションに適しており、特にファイル処理やデータベース操作に強みを持つ言語です。

この特性により、銀行や保険会社などの大規模なデータを取り扱う業界で長年にわたって愛用されてきました。

●SUBSTRING関数の基本

COBOL言語におけるSUBSTRING関数は、文字列から特定の部分を抽出するために使用されます。

この関数は非常に便利で、特に長い文字列を扱う際にその有効性が発揮されます。

SUBSTRING関数の基本形は、SUBSTRING(文字列 FROM 開始位置 FOR 文字数)という形式を取ります。

ここで、文字列は操作対象の文字列、開始位置は抽出を開始する文字の位置、FOR 文字数は抽出する文字数を指定します。

例えば、SUBSTRING('HELLO WORLD' FROM 1 FOR 5)というコードは、’HELLO WORLD’という文字列から最初の5文字、つまり’HELLO’を抽出します。

このように、SUBSTRING関数を使うことで、任意の文字列から必要な部分だけを簡単に切り出すことができるのです。

○SUBSTRING関数の定義

COBOLにおけるSUBSTRING関数の使用例を紹介します。

IDENTIFICATION DIVISION.
PROGRAM-ID. SubstringExample.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 OriginalString PIC A(20) VALUE 'Hello, COBOL World!'.
   01 Substring PIC A(20).

PROCEDURE DIVISION.
   MOVE FUNCTION SUBSTRING(OriginalString FROM 8 FOR 5) TO Substring.
   DISPLAY Substring.
   STOP RUN.

このサンプルコードでは、’Hello, COBOL World!’という文字列から8文字目から始まる5文字、つまり’COBOL’を抽出しています。

FUNCTION SUBSTRING(OriginalString FROM 8 FOR 5)の部分がSUBSTRING関数の呼び出しであり、この結果をSubstring変数に格納しています。

その後、DISPLAY Substringにより抽出された文字列が表示されます。

○文字列操作の基本

COBOLにおける文字列操作は、ビジネスプログラミングにおいて中心的な役割を果たします。

文字列操作の基本には、文字列の結合、置換、検索、抽出などが含まれます。

SUBSTRING関数は、これらの基本的な操作の中でも特に重要で、データ処理やレポート作成の際に頻繁に用いられます。

例えば、顧客データベースから特定の顧客の姓や名を抽出する際にSUBSTRING関数が役立ちます。

また、長いログファイルから特定の日付やエラーコードを探すときにもこの関数は非常に便利です。

このように、SUBSTRING関数はCOBOLプログラミングにおける文字列操作の基本の一つとして、多様なシナリオで活用されます。

●SUBSTRING関数の使い方

COBOLにおけるSUBSTRING関数の使い方は多岐にわたります。

この関数を用いることで、プログラム内で特定の文字列操作を行うことができます。

例えば、ユーザーからの入力を受け取り、特定のフォーマットに合わせて加工する場合などに非常に便利です。

ここでは、基本的な使用方法として、文字列から部分文字列を抽出する例を挙げて説明します。

○サンプルコード1:基本的な使用方法

例として、下記のようなサンプルコードを考えてみましょう。

IDENTIFICATION DIVISION.
PROGRAM-ID. BasicSubstring.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 OriginalString PIC A(20) VALUE 'Hello, COBOL World!'.
   01 ExtractedString PIC A(10).

PROCEDURE DIVISION.
   MOVE FUNCTION SUBSTRING(OriginalString FROM 1 FOR 5) TO ExtractedString.
   DISPLAY ExtractedString.
   STOP RUN.

このプログラムでは、OriginalStringという変数に格納された文字列’Hello, COBOL World!’から、最初の5文字’Hello’を抽出しています。

FUNCTION SUBSTRING(OriginalString FROM 1 FOR 5)の部分でSUBSTRING関数を呼び出し、結果をExtractedStringに代入しています。

その後、DISPLAY ExtractedStringにより抽出した文字列を画面に表示します。

○サンプルコード2:変数の部分文字列の取得

次に、変数から部分文字列を取得する例を見てみましょう。

IDENTIFICATION DIVISION.
PROGRAM-ID. VariableSubstring.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 OriginalString PIC A(20) VALUE 'Programming in COBOL'.
   01 ExtractedString PIC A(10).

PROCEDURE DIVISION.
   MOVE FUNCTION SUBSTRING(OriginalString FROM 14 FOR 5) TO ExtractedString.
   DISPLAY ExtractedString.
   STOP RUN.

この例では、OriginalStringに格納された文字列’Programming in COBOL’から14文字目から始まる5文字、つまり’COBOL’を抽出しています。

このようにSUBSTRING関数を使うことで、変数内の任意の位置から特定の長さの文字列を取り出すことが可能です。

●SUBSTRING関数の応用例

COBOLのSUBSTRING関数は、基本的な文字列抽出の他にも、より複雑な文字列処理にも使用できます。

特に、複数の条件を組み合わせたり、異なる文字列操作を一緒に行ったりする際に、その柔軟性が活かされます。

ここでは、そのような応用例をいくつか紹介します。

○サンプルコード3:複数の文字列操作の組み合わせ

まず、複数の文字列操作を組み合わせた例を見てみましょう。

下記のサンプルコードでは、文字列から特定の部分を抽出し、さらにその結果を別の操作で使用しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. CombinedStringOperations.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 OriginalString PIC A(30) VALUE 'Learn COBOL Programming'.
   01 ExtractedString PIC A(10).
   01 FinalString PIC A(15).

PROCEDURE DIVISION.
   MOVE FUNCTION SUBSTRING(OriginalString FROM 7 FOR 5) TO ExtractedString.
   MOVE FUNCTION REVERSE(ExtractedString) TO FinalString.
   DISPLAY FinalString.
   STOP RUN.

このコードでは、まずOriginalStringから’COBOL’という部分文字列を抽出しています。

その後、抽出した文字列を逆順にする(この例では仮想のREVERSE関数を使用しています)処理を行い、最終的な文字列をFinalStringに格納しています。

○サンプルコード4:条件付きの文字列操作

次に、条件に基づいて文字列操作を行う例を見てみましょう。

この例では、ある条件を満たす場合にのみ部分文字列を抽出する方法を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. ConditionalSubstring.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 OriginalString PIC A(30) VALUE 'Programming in COBOL'.
   01 ExtractedString PIC A(10).
   01 StringLength PIC 9(2).

PROCEDURE DIVISION.
   COMPUTE StringLength = LENGTH OF OriginalString.
   IF StringLength > 20
      MOVE FUNCTION SUBSTRING(OriginalString FROM 10 FOR 5) TO ExtractedString
      DISPLAY ExtractedString
   ELSE
      DISPLAY 'String is too short'.
   STOP RUN.

このコードでは、まず文字列の長さを計算しています。その長さが20より大きい場合にのみ、10文字目から始まる5文字を抽出しています。

そうでない場合には、’String is too short’というメッセージを表示します。

●注意点と対処法

COBOLでSUBSTRING関数を使用する際には、いくつかの重要な注意点があります。

これらを理解し、適切に対処することで、エラーや予期しない動作を防ぎ、効率的なコードを書くことができます。

まず、SUBSTRING関数を使用する際には、指定する開始位置と文字数が実際の文字列の範囲内に収まっていることを確認する必要があります。

開始位置が文字列の長さを超えている場合や、抽出する文字数が文字列の残りの長さを超えている場合には、実行時エラーが発生する可能性があります。

このようなエラーを避けるためには、文字列の長さを事前にチェックし、適切な範囲を指定することが重要です。

また、SUBSTRING関数は、文字列の特定の部分だけを扱うため、元の文字列を変更しないことに注意が必要です。

関数を使用して得られた結果を別の変数に格納し、元の文字列を保持する必要があります。

○エラーの回避方法

エラーを回避するための具体的な方法として、次のサンプルコードを考えます。

IDENTIFICATION DIVISION.
PROGRAM-ID. SubstringErrorHandling.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 OriginalString PIC A(20) VALUE 'COBOL Programming'.
   01 Substring PIC A(20).
   01 StringLength PIC 9(2).

PROCEDURE DIVISION.
   COMPUTE StringLength = LENGTH OF OriginalString.
   IF StringLength >= 10
      MOVE FUNCTION SUBSTRING(OriginalString FROM 1 FOR 10) TO Substring
      DISPLAY Substring
   ELSE
      DISPLAY 'String length is too short for substring'.
   STOP RUN.

このコードでは、まずOriginalStringの長さをStringLength変数に格納し、その長さが10以上であるかどうかを確認しています。

条件を満たす場合にのみSUBSTRING関数を使用し、そうでない場合にはエラーメッセージを表示します。

○効率的なコードの書き方

効率的なコードを書くためには、プログラムの各部分が正確に機能するように注意深く設計することが重要です。

特に、SUBSTRING関数のような文字列操作を行う際には、プログラムが予期しない文字列に対しても適切に動作するように、エラーハンドリングや条件チェックを十分に行う必要があります。

また、必要な処理だけを行い、余計な操作を避けることで、プログラムの効率性を高めることができます。

●カスタマイズ方法

COBOLのSUBSTRING関数は、その柔軟性により様々な方法でカスタマイズすることが可能です。

これにより、特定のニーズに合わせた文字列操作を実現することができます。

例えば、ユーザー定義関数を作成することで、独自の文字列処理ロジックを組み込むことが可能になります。

○サンプルコード5:ユーザー定義関数の作成

独自の文字列処理機能を実装するために、ユーザー定義関数を作成する例を考えます。

下記のサンプルコードは、特定の条件下で文字列を加工するユーザー定義関数の一例を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. CustomSubstringFunction.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 OriginalString PIC A(30) VALUE 'Advanced COBOL Programming'.
   01 CustomString PIC A(30).

PROCEDURE DIVISION.
   PERFORM CustomSubstring USING OriginalString RETURNING CustomString.
   DISPLAY CustomString.
   STOP RUN.

CUSTOMSUBSTRING SECTION.
CUSTOMSUBSTRING.
   PROCEDURE DIVISION USING BY VALUE SourceString RETURNING ResultString.
       IF LENGTH OF SourceString > 15
           MOVE FUNCTION SUBSTRING(SourceString FROM 10 FOR 7) TO ResultString
       ELSE
           MOVE 'String too short' TO ResultString
       END-IF.
   EXIT PROGRAM.

このプログラムでは、CustomSubstringというユーザー定義関数を使用しています。

この関数は、渡された文字列が一定の長さを超える場合に、特定の部分文字列を抽出し、そうでない場合にはエラーメッセージを返します。

○サンプルコード6:複雑な文字列操作

さらに複雑な文字列操作を行う例を考えます。

下記のサンプルコードでは、複数の条件を組み合わせて特定の文字列操作を行う方法を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. ComplexSubstringOperation.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 OriginalString PIC A(50) VALUE 'Learn COBOL for Business Applications'.
   01 ModifiedString PIC A(50).
   01 StringLength PIC 9(2).

PROCEDURE DIVISION.
   COMPUTE StringLength = LENGTH OF OriginalString.
   IF StringLength > 20
       MOVE FUNCTION SUBSTRING(OriginalString FROM 6 FOR 20) TO ModifiedString
       INSPECT ModifiedString REPLACING ALL ' ' BY '-'
   ELSE
       MOVE 'String too short for operation' TO ModifiedString
   END-IF.
   DISPLAY ModifiedString.
   STOP RUN.

この例では、まず文字列の長さをチェックし、特定の条件を満たす場合にのみ、SUBSTRING関数とINSPECT文を使用して文字列操作を行っています。

このように、複数のCOBOLの機能を組み合わせることで、より複雑な文字列操作を実現することが可能です。

まとめ

この記事を通して、COBOL言語におけるSUBSTRING関数の使用方法、応用例、注意点、そしてカスタマイズ方法について詳細に解説しました。

SUBSTRING関数は、文字列の特定の部分を抽出する基本的な機能から、より複雑な文字列操作の実現まで、多くのシナリオで役立つ強力なツールです。

初心者にとっても、この関数の基本を理解し、実際のプログラムで適切に使用することは、COBOLプログラミングスキルの向上に不可欠です。

COBOLは現代の多くのビジネスシステムにおいて依然として重要な役割を果たしており、SUBSTRING関数のような基本的な機能をマスターすることは、これらのシステムを理解し操作するために非常に重要です。

この記事が、COBOLの基本から応用までの理解を深める一助となれば幸いです。