【COBOL】ORD関数の使い方8ステップ – JPSM

【COBOL】ORD関数の使い方8ステップ

初心者が学ぶCOBOLのORD関数の使い方とサンプルコードのイメージCOBOL

 

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

このサービスは複数のSSPによる協力の下、運営されています。

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

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

また、理解しにくい説明や難しい問題に躓いても、JPSMがプログラミングの解説に特化してオリジナルにチューニングした画面右下のAIアシスタントに質問していだければ、特殊な問題でも指示に従い解決できるように作ってあります。

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

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

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

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

はじめに

この記事では、COBOLプログラミング言語の基本的な機能であるORD関数の使い方を初心者にも分かりやすく解説します。

ORD関数は、特にデータ処理や文字列操作において重要な役割を果たします。

ここでは、COBOLの基礎からORD関数の具体的な使用方法までを段階的に説明し、実際のサンプルコードを通じて解説します。

この記事を読むことで、COBOLにおけるORD関数の理解と活用が可能になるでしょう。

●COBOLとは

COBOL(Common Business-Oriented Language)は、ビジネスデータ処理に特化したプログラミング言語です。

1950年代後半に開発されたこの言語は、その読みやすさと堅牢な構造で、長年にわたり金融機関や政府機関などで広く使用されてきました。

COBOLは、大量のデータを扱うための高い性能を持ち、特にレガシーシステムや大規模な業務処理において依然として重要な役割を果たしています。

○COBOLの基本概念

COBOL言語の基本概念には、データ構造の定義、手続き型の処理、そして分かりやすい英語に近い構文が含まれます。

COBOLでは、データは「ファイル」として扱われ、各ファイルは複数の「レコード」から成り立っています。

また、プログラムは「ディビジョン」と呼ばれるセクションに分かれ、それぞれのセクションで特定のタスクを処理します。

この構造化されたアプローチは、COBOLプログラムが大規模で複雑なデータ処理を効率的に行うための基礎を提供します。

○プログラミング言語としての位置づけ

プログラミング言語としてのCOBOLの位置づけは、ビジネスアプリケーションとデータベース管理システムにおける中核的な技術であることにあります。

COBOLは、その特定の用途においては現代の言語に比べても高い生産性と信頼性を持っています。

また、レガシーシステムとの互換性を保ちながらも新しい技術の導入に柔軟に対応できるため、多くの企業や組織で今でも積極的に使用されています。

この言語の継続的な支持は、その実用性と安定性に裏打ちされています。

●ORD関数の基本

COBOLにおけるORD関数は、文字列内の特定の文字に対応する数値コードを返す関数です。

この関数は、データの変換や比較、文字列処理において非常に役立ちます。

具体的には、ORD関数は指定された文字のASCIIコード(アメリカ標準情報交換コード)またはEBCDICコード(拡張二進化十進間コード)の数値を返します。

この機能は、特にデータがテキストとして表される場合に重要で、文字列を数値データとして処理する際に使われます。

○ORD関数とは何か

例えば、文字列 “Hello” の最初の文字 ‘H’ のASCIIコードは72です。ORD関数を使用すると、この ‘H’ 文字に対応する72という数値を取得できます。

これにより、プログラムは文字データを数値として扱うことが可能になり、さまざまな計算やデータ操作が容易になります。

IDENTIFICATION DIVISION.
PROGRAM-ID. OrdExample.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MyChar PIC X VALUE 'H'.
01 MyCharCode PIC 9(3).
PROCEDURE DIVISION.
   MOVE FUNCTION ORD(MyChar) TO MyCharCode
   DISPLAY "The ASCII code of " MyChar " is " MyCharCode
   STOP RUN.

このサンプルコードでは、文字 ‘H’ のASCIIコードを取得し、その数値(72)を表示しています。

このようにORD関数を使うことで、文字データを数値データとして活用することができます。

○ORD関数の役割と重要性

ORD関数の重要性は、特にデータの比較やソート、検索処理において顕著です。

たとえば、異なる文字列内の特定の文字を比較したり、文字列をアルファベット順にソートする場合、ORD関数は非常に有用です。

また、特定の文字や文字列パターンを検索する際にも、ORD関数を利用して文字の数値コードを比較することで、高速で正確な検索処理を行うことができます。

COBOLのプログラミングにおいて、文字と数値の相互変換は頻繁に行われるため、ORD関数の理解と適切な使用は、効率的で信頼性の高いコードを書く上で重要です。

この関数をマスターすることで、COBOLプログラマーはより複雑な文字列操作やデータ処理を容易に実現することが可能になります。

●ORD関数の使い方

COBOLにおけるORD関数の使用方法は、文字列内の特定の文字の数値コードを取得するために重要です。

この関数は、文字列データを数値として処理する際に特に役立ちます。

例えば、ある文字列の特定の文字を基にして数値的な操作を行う場合や、文字列内の文字を数値として比較する場合などに使用されます。

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

ここでは、ORD関数の基本的な使用方法を表すサンプルコードを紹介します。

このコードでは、文字列 “Hello” の最初の文字 ‘H’ の数値コードを取得し、表示します。

IDENTIFICATION DIVISION.
PROGRAM-ID. BasicOrdUsage.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TestString PIC X(5) VALUE 'Hello'.
01 CharCode PIC 9(3).
PROCEDURE DIVISION.
   MOVE FUNCTION ORD(TestString(1:1)) TO CharCode
   DISPLAY "The ASCII code of first character is " CharCode
   STOP RUN.

このコードでは、’Hello’ の ‘H’ に対応するASCIIコードを取得し、それを表示しています。

こうすることで、文字列の特定の文字に対する数値的な情報を得ることができます。

○サンプルコード2:文字列操作における応用

次に、ORD関数を文字列操作に応用する例を見てみましょう。

このサンプルコードでは、与えられた文字列の各文字のASCIIコードを取得し、それらを表示します。

IDENTIFICATION DIVISION.
PROGRAM-ID. StringOrdUsage.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TestString PIC X(10) VALUE 'HelloWorld'.
01 CharIndex PIC 9 VALUE 1.
01 CharCode PIC 9(3).
PROCEDURE DIVISION.
PERFORM VARYING CharIndex FROM 1 BY 1 UNTIL CharIndex > LENGTH OF TestString
   MOVE FUNCTION ORD(TestString(CharIndex:1)) TO CharCode
   DISPLAY "ASCII code of " TestString(CharIndex:1) " is " CharCode
END-PERFORM
STOP RUN.

このコードは、’HelloWorld’ という文字列の各文字に対してORD関数を適用し、各文字のASCIIコードを表示しています。

このようにORD関数を使うことで、文字列内の各文字に対する詳細な数値情報を得ることが可能です。

○サンプルコード3:数値データの処理

ORD関数は、数値データの処理にも応用できます。

たとえば、ある数値が特定の文字コードに対応しているかどうかを判定する場合などに有効です。

下記のサンプルコードは、与えられた数値が特定の文字コードと一致するかどうかを確認する方法を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. NumericOrdUsage.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TestChar PIC X VALUE 'A'.
01 TestCode PIC 9(3) VALUE 65.
01 Result PIC X(10) VALUE 'Mismatch'.
PROCEDURE DIVISION.
   IF FUNCTION ORD(TestChar) = TestCode
      MOVE 'Match' TO Result
   END-IF
   DISPLAY "Result: " Result
   STOP RUN.

このコードでは、文字 ‘A’ のASCIIコード(65)が指定された数値(TestCode)と一致するかを判定しています。

一致すれば’Result’ に ‘Match’ が代入され、そうでなければ ‘Mismatch’ が保持されます。

このようにORD関数を使うことで、数値データと文字データの対応関係を簡単に確認することができます。

○サンプルコード4:条件分岐での活用

ORD関数は条件分岐においても非常に有用です。

例えば、特定の文字がアルファベットの大文字か小文字かを判断する場合にORD関数を使用できます。

ここでは、文字が大文字か小文字かを判断するサンプルコードを紹介します。

IDENTIFICATION DIVISION.
PROGRAM-ID. OrdIfUsage.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TestChar PIC X VALUE 'G'.
01 CharType PIC X(11) VALUE 'Unknown Type'.
PROCEDURE DIVISION.
   IF FUNCTION ORD(TestChar) >= 65 AND FUNCTION ORD(TestChar) <= 90
      MOVE 'Uppercase Letter' TO CharType
   ELSE IF FUNCTION ORD(TestChar) >= 97 AND FUNCTION ORD(TestChar) <= 122
      MOVE 'Lowercase Letter' TO CharType
   END-IF
   DISPLAY "The character " TestChar " is a " CharType
   STOP RUN.

このコードでは、’G’ という文字が大文字か小文字かをORD関数を使って判断しています。

ASCIIコードで大文字のアルファベットは65(’A’)から90(’Z’)の範囲に、小文字は97(’a’)から122(’z’)の範囲に存在します。

この情報を基に条件分岐を行っています。

○サンプルコード5:ループ処理と組み合わせ

ORD関数はループ処理と組み合わせて、より複雑な文字列処理を実現することができます。

ここでは、与えられた文字列内の特定の文字を探すサンプルコードを紹介します。

IDENTIFICATION DIVISION.
PROGRAM-ID. OrdLoopUsage.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TestString PIC X(10) VALUE 'HelloWorld'.
01 CharToFind PIC X VALUE 'o'.
01 CharIndex PIC 9 VALUE 1.
01 FoundPos PIC 9 VALUE 0.
PROCEDURE DIVISION.
PERFORM VARYING CharIndex FROM 1 BY 1 UNTIL CharIndex > LENGTH OF TestString OR FoundPos > 0
   IF FUNCTION ORD(TestString(CharIndex:1)) = FUNCTION ORD(CharToFind)
      MOVE CharIndex TO FoundPos
   END-IF
END-PERFORM
IF FoundPos > 0
   DISPLAY "Character " CharToFind " found at position " FoundPos
ELSE
   DISPLAY "Character not found"
END-IF
STOP RUN.

このコードでは、’HelloWorld’ という文字列内で ‘o’ という文字を探しています。

文字列を1文字ずつ確認し、目的の文字が見つかった場合はその位置をFoundPosに保存します。

このようにORD関数をループ処理と組み合わせることで、文字列内の特定の文字を効率的に探すことができます。

●ORD関数の応用例

COBOLにおけるORD関数は、その基本的な使い方を超えて、さまざまな応用が可能です。

たとえば、データベース操作やファイル操作において、特定の条件を満たすデータを選択するためにORD関数を使用することができます。

これにより、データの検索や整理をより効率的に行うことが可能になります。

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

データベース内のデータを処理する際に、ORD関数を利用して特定の文字条件に基づく選択を行う例を見てみましょう。

下記のサンプルコードは、特定の文字を含むレコードを選択する方法を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. DbOrdUsage.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 DatabaseRecord PIC X(20).
01 SearchChar PIC X VALUE 'A'.
01 RecordIndex PIC 9 VALUE 1.
PROCEDURE DIVISION.
PERFORM UNTIL RecordIndex > 10
   READ DatabaseRecord AT RecordIndex
   IF FUNCTION ORD(DatabaseRecord(1:1)) = FUNCTION ORD(SearchChar)
      DISPLAY "Record " RecordIndex " starts with " SearchChar
   END-IF
   ADD 1 TO RecordIndex
END-PERFORM
STOP RUN.

このコードでは、データベースの各レコードの最初の文字が ‘A’ であるかどうかをORD関数を使用して確認しています。

このような処理は、データベース内の特定のパターンに基づいてデータを選択する際に役立ちます。

○サンプルコード7:ファイル操作での使用例

ファイル内のデータを処理する際にもORD関数は有用です。

たとえば、ファイルから特定のパターンを含む行を選択する場合などに利用できます。

ここでは、ファイル内の特定の文字列を含む行を探すサンプルコードを紹介します。

IDENTIFICATION DIVISION.
PROGRAM-ID. FileOrdUsage.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FileLine PIC X(100).
01 FileHandle USAGE IS FILE.
01 SearchString PIC X(10) VALUE 'Example'.
PROCEDURE DIVISION.
OPEN INPUT FileHandle
PERFORM UNTIL END-OF-FILE FileHandle
   READ FileLine FROM FileHandle
   IF FUNCTION ORD(FileLine(1:LENGTH OF SearchString)) = FUNCTION ORD(SearchString)
      DISPLAY "Line: " FileLine
   END-IF
END-PERFORM
CLOSE FileHandle
STOP RUN.

このコードでは、ファイルから行を読み込み、各行の始めの部分が ‘Example’ という文字列で始まるかどうかをORD関数を使用して確認しています。

このようにORD関数を用いることで、ファイル内の特定のパターンを持つデータを効率的に検索することが可能です。

●注意点と対処法

COBOLプログラミングにおいてORD関数を使用する際には、いくつかの注意点があります。

これらを理解し適切に対処することで、エラーのリスクを減らし、より効率的で安全なコードを書くことができます。

○エラーへの対応

ORD関数使用時のエラーを適切にハンドリングするためには、入力データの検証を行うことが重要です。

例えば、関数に渡す前に文字列が空でないか、または特定の範囲の文字であるかどうかを確認してみましょう。

IDENTIFICATION DIVISION.
PROGRAM-ID. OrdErrorHandling.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TestString PIC X(10) VALUE SPACES.
01 CharCode PIC 9(3).
PROCEDURE DIVISION.
   IF TestString IS NOT EQUAL TO SPACES
      MOVE FUNCTION ORD(TestString(1:1)) TO CharCode
      DISPLAY "The ASCII code is " CharCode
   ELSE
      DISPLAY "Error: String is empty"
   END-IF
   STOP RUN.

このコードでは、文字列が空でないことを確認した後、ORD関数を使用しています。

このようなエラーチェックを行うことで、無効な入力によるエラーを防ぐことができます。

○効率的なコーディングのヒント

効率的なコーディングのためには、ORD関数の使用を最適化することが重要です。

たとえば、ループ内で繰り返し同じ文字に対してORD関数を呼び出すのではなく、必要な計算を一度行い、その結果を変数に保存して再利用する方法があります。

また、可能であれば、文字列操作を行う前にデータを適切に準備・整形することで、不要な関数呼び出しを減らすことができます。

効率的なコーディングは、プログラムのパフォーマンスと保守性を向上させるために非常に重要です。

●カスタマイズ方法

COBOLのORD関数は、その柔軟性から、様々なプログラミング要件に合わせてカスタマイズすることが可能です。

特定のプロジェクトやタスクに応じて、ORD関数の使用方法を調整することで、より効率的かつ効果的なプログラムを実現できます。

○個別のニーズに合わせたORD関数のカスタマイズ

例えば、ある特定の条件を満たす文字だけを取り出すカスタム関数を作成することを考えます。

ここでは、特定の数値範囲に基づいて文字を選択するカスタム関数のサンプルコードを紹介します。

IDENTIFICATION DIVISION.
PROGRAM-ID. CustomOrdFunction.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TestString PIC X(10) VALUE 'HelloWorld'.
01 ResultString PIC X(10) VALUE SPACES.
01 CharIndex PIC 9 VALUE 1.
01 ResultIndex PIC 9 VALUE 1.
PROCEDURE DIVISION.
PERFORM VARYING CharIndex FROM 1 BY 1 UNTIL CharIndex > LENGTH OF TestString
   IF FUNCTION ORD(TestString(CharIndex:1)) BETWEEN 65 AND 90
      MOVE TestString(CharIndex:1) TO ResultString(ResultIndex:1)
      ADD 1 TO ResultIndex
   END-IF
END-PERFORM
DISPLAY "Result String: " ResultString
STOP RUN.

このコードでは、’HelloWorld’ 文字列から大文字のアルファベット(ASCIIコードで65から90)だけを選択し、新しい文字列に組み入れています。

このように、ORD関数をカスタマイズすることで、特定の条件に基づいた文字の選択や処理が可能になります。

まとめ

この記事を通じて、COBOLプログラミング言語におけるORD関数の基本的な使い方から応用例、注意点、そしてカスタマイズ方法に至るまでを詳細に解説しました。

ORD関数は、文字データを扱う際の強力なツールであり、プログラム内での文字コードの操作を容易にします。

この記事が、COBOLを使用するプログラマー、特に初心者にとって有用な情報源となり、ORD関数をより効果的に活用するための理解と知識を深める手助けになれば幸いです。