Cobol-quick-guide
COBOL-概要
COBOLの概要
COBOLは高水準言語です。 COBOLの仕組みを理解する必要があります。 コンピューターは、0と1のバイナリストリームであるマシンコードのみを認識します。 COBOLコードは、コンパイラ*を使用してマシンコードに変換する必要があります。 コンパイラを介してプログラムソースを実行します。 コンパイラは最初に構文エラーをチェックしてから、機械語に変換します。 コンパイラーは、 *load module と呼ばれる出力ファイルを作成します。 この出力ファイルには、0と1の形式の実行可能コードが含まれています。
COBOLの進化
世界の西部でビジネスが成長していた1950年代には、操作を簡単にするためにさまざまなプロセスを自動化する必要があり、ビジネスデータ処理を目的とした高レベルのプログラミング言語が誕生しました。
- 1959年に、COBOLはCODASYL(Conference on Data Systems Language)によって開発されました。
- 次のバージョンのCOBOL-61は1961年にリリースされ、いくつかの修正が加えられました。
- 1968年、COBOLはANSIによって商業用の標準言語(COBOL-68)として承認されました。
- 1974年と1985年に再び改訂され、それぞれCOBOL-74とCOBOL-85という名前の後続バージョンが開発されました。
- 2002年に、オブジェクト指向COBOLがリリースされました。これは、COBOLプログラミングの通常の部分としてカプセル化されたオブジェクトを使用できます。
COBOLの重要性
- COBOLは、最初に広く使用されている高レベルのプログラミング言語でした。 ユーザーフレンドリーな英語に似た言語です。 すべての指示は、簡単な英単語でコーディングできます。
- COBOLは、自己文書化言語としても使用されます。
- COBOLは膨大なデータ処理を処理できます。
- COBOLは以前のバージョンと互換性があります。
- COBOLには効果的なエラーメッセージがあるため、バグの解決は簡単です。
COBOLの機能
標準言語
COBOLは、IBM AS/400、パーソナルコンピューターなどのマシンでコンパイルおよび実行できる標準言語です。
ビジネス志向
COBOLは、金融ドメイン、防衛ドメインなどに関連するビジネス指向のアプリケーション向けに設計されました。 高度なファイル処理機能により、大量のデータを処理できます。
堅牢な言語
COBOLは、ほぼすべてのコンピュータープラットフォームで多数のデバッグおよびテストツールが利用できるため、堅牢な言語です。
構造化言語
論理制御構造はCOBOLで使用でき、読み取りと変更が容易になります。 COBOLにはさまざまな部門があるため、デバッグは簡単です。
COBOL-環境設定
'__ === オンラインで試す
COBOLプログラミング環境をオンラインで設定したため、利用可能なすべてのサンプルをオンラインでコンパイルして実行できます。 読んでいるものに自信を与え、さまざまなオプションでプログラムを検証することができます。 サンプルを自由に変更して、オンラインで実行してください。
CodingGroundから入手できるオンラインコンパイラを使用して、次の例を試してください。
このチュートリアルに記載されているほとんどの例では、オンラインコンパイラにアクセスできる右上隅のWebサイトコードセクションに[試用]オプションがあります。 だからそれを利用して、あなたの学習を楽しんでください。 '__
Windows/LinuxでのCOBOLのインストール
Windowsには、単純なCOBOLプログラムの作成と学習に使用できる無料のメインフレームエミュレータが多数あります。
そのようなエミュレータの1つはHerculesです。これは、以下に示すいくつかの簡単な手順に従うことで、Windowsに簡単にインストールできます。
- Herculesエミュレーターをダウンロードしてインストールします。Herculesのホームサイトから入手できます:http://www.hercules-390.eu [www.hercules-390.eu]
- Windowsマシンにパッケージをインストールすると、 C:/hercules/mvs/cobol のようなフォルダーが作成されます。
- コマンドプロンプト(CMD)を実行し、CMDのディレクトリC:/hercules/mvs/cobolに到達します。 JCLおよびCOBOLプログラムを作成および実行するためのさまざまなコマンドに関する完全なガイドは、次の場所にあります。 + www.jaymoseley.com/hercules/installmvs/instmvs2 *
Herculesは、最新の64ビットz/Architectureに加えて、メインフレームSystem/370およびESA/390アーキテクチャのオープンソースソフトウェア実装です。 Herculesは、Linux、Windows、Solaris、FreeBSD、およびMac OS Xで動作します。
ユーザーは、シンクライアント、ダミーターミナル、仮想クライアントシステム(VCS)、仮想デスクトップシステム(VDS)など、さまざまな方法でメインフレームサーバーに接続できます。 すべての有効なユーザーには、Z/OSインターフェース(TSO/EまたはISPF)に入るためのログインIDが与えられます。
COBOLプログラムのコンパイル
JCLを使用してCOBOLプログラムをバッチモードで実行するには、プログラムをコンパイルする必要があり、すべてのサブプログラムでロードモジュールが作成されます。 JCLは、実行時に実際のプログラムではなく、ロードモジュールを使用します。 ロードライブラリは連結され、 JCLLIB または STEPLIB を使用して実行時にJCLに渡されます。
COBOLプログラムのコンパイルには、多くのメインフレームコンパイラユーティリティが利用できます。 一部の企業では、 Endevor などの変更管理ツールを使用しています。これは、プログラムのすべてのバージョンをコンパイルして保存します。 これは、プログラムに加えられた変更を追跡するのに役立ちます。
IGYCRCTLは、IBM COBOLコンパイラユーティリティです。 コンパイラーのオプションは、PARMパラメーターを使用して渡されます。 上記の例では、RMODEは、プログラムで相対アドレス指定モードを使用するようコンパイラーに指示します。 COBOLプログラムは、SYSINパラメーターを使用して渡されます。 Copybookは、SYSLIBのプログラムで使用されるライブラリです。
COBOLプログラムの実行
以下に示すのは、プログラムMYPROGが入力ファイルMYDATA.URMI.INPUTを使用して実行され、スプールに書き込まれる2つの出力ファイルを生成するJCLの例です。
MYPROGのロードモジュールはMYDATA.URMI.LOADLIBにあります。 これは、上記のJCLが非DB2 COBOLモジュールにのみ使用できることに注意することが重要です。
COBOL-DB2プログラムの実行
COBOL-DB2プログラムを実行するには、JCLおよびプログラムで専用のIBMユーティリティーが使用されます。 DB2領域および必須パラメーターは、ユーティリティーへの入力として渡されます。
COBOL-DB2プログラムを実行する際の手順は次のとおりです-
- COBOL-DB2プログラムがコンパイルされると、DBRM(データベース要求モジュール)がロードモジュールとともに作成されます。 DBRMには、COBOLプログラムのSQLステートメントが含まれており、構文が正しいことが確認されています。
- DBRMは、COBOLが実行されるDB2領域(環境)にバインドされます。 これは、JCLでIKJEFT01ユーティリティーを使用して実行できます。
- バインド手順の後、ロードライブラリとDBRMライブラリをJCLへの入力としてIKJEFT01(再び)を使用して、COBOL-DB2プログラムが実行されます。
上記の例では、MYCOBBはIKJEFT01を使用して実行されるCOBOL-DB2プログラムです。 プログラム名、DB2サブシステムID(SSID)、およびDB2プラン名はSYSTSIN DDステートメント内で渡されることに注意してください。 DBRMライブラリーはSTEPLIBで指定されます。
COBOL-プログラム構造
COBOLプログラム構造は、次の画像に示すように部門で構成されています-
これらの部門の簡単な紹介を以下に示します-
- *セクション*は、プログラムロジックの論理的な下位区分です。 セクションは段落の集まりです。
- *段落*は、セクションまたは部門の下位区分です。 これは、ユーザー定義または事前定義の名前の後にピリオドが続き、ゼロ個以上の文/エントリで構成されます。
- *文*は、1つ以上のステートメントの組み合わせです。 文は、手続き部にのみ表示されます。 文はピリオドで終わる必要があります。
- Statements は、何らかの処理を実行する意味のあるCOBOLステートメントです。
- *文字*は階層の最下位であり、分割できません。
次の例では、上記の用語をCOBOLプログラムと相互に関連付けることができます-
部門
COBOLプログラムは4つの部門で構成されています。
識別部
これは、すべてのCOBOLプログラムの最初で唯一の必須区分です。 プログラマとコンパイラは、この区分を使用してプログラムを識別します。 この部門では、PROGRAM-IDのみが必須の段落です。 PROGRAM-IDは、1〜30文字で構成されるプログラム名を指定します。
オンラインで Live Demo オプションを使用して、次の例を試してください。
上記のCOBOLプログラムを実行する JCL を以下に示します。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
環境課
環境区分は、プログラムへの入力ファイルと出力ファイルを指定するために使用されます。 それは2つのセクションで構成されています-
- *構成セクション*は、プログラムが作成および実行されるシステムに関する情報を提供します。 それは2つの段落で構成されています-
- ソースコンピューター-プログラムのコンパイルに使用されるシステム。
- オブジェクトコンピューター-プログラムの実行に使用されるシステム。
- *入出力セクション*は、プログラムで使用されるファイルに関する情報を提供します。 それは2つの段落で構成されています-
- ファイル制御-プログラムで使用される外部データセットの情報を提供します。
- I-Oコントロール-プログラムで使用されるファイルの情報を提供します。
データ部
データ分割は、プログラムで使用される変数を定義するために使用されます。 それは4つのセクションで構成されています-
- *ファイルセクション*は、ファイルのレコード構造を定義するために使用されます。
- * Working-Storageセクション*は、プログラムで使用される一時変数とファイル構造を宣言するために使用されます。
- *ローカルストレージセクション*は、ワーキングストレージセクションに似ています。 唯一の違いは、プログラムが実行を開始するたびに変数が割り当てられて初期化されることです。
- *リンケージセクション*は、外部プログラムから受信したデータ名を記述するために使用されます。
- COBOLプログラム*
上記のCOBOLプログラムを実行する JCL は次のとおりです-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
手続き部
手続き部は、プログラムのロジックを含めるために使用されます。 データ部で定義された変数を使用した実行可能ステートメントで構成されます。 この部門では、段落名とセクション名はユーザー定義です。
手続き部には少なくとも1つのステートメントが必要です。 この部門で実行を終了する最後のステートメントは、呼び出し側プログラムで使用される STOP RUN または呼び出されるプログラムで使用される EXIT PROGRAM です。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
COBOL-基本構文
キャラクターセット
「文字」は階層の最下位であり、さらに分割することはできません。 COBOL文字セットには、以下に示す78文字が含まれます-
Sr.No. | Character & Description |
---|---|
1 |
A-Z アルファベット(大文字) |
2 |
a-z アルファベット(小文字) |
3 |
0-9 数値 |
4 |
スペース |
5 |
+ プラス記号 |
6 |
- マイナス記号またはハイフン |
7 | アスタリスク |
8 |
/ フォワードスラッシュ |
9 |
$ 通貨記号 |
10 |
, コンマ |
11 |
; セミコロン |
12 |
. 小数点または期間 |
13 |
" 引用符 |
14 |
( 左括弧 |
15 |
) 右括弧 |
16 |
> より大きい |
17 |
< 未満 |
18 |
: 結腸 |
19 |
'' アポストロフィ |
20 |
= 等号 |
コーディングシート
COBOLのソースプログラムは、コンパイラが受け入れられる形式で作成する必要があります。 COBOLプログラムは、COBOLコーディングシートに記述されています。 コーディングシートの各行には80文字の位置があります。
文字の位置は、次の5つのフィールドにグループ化されます-
Positions | Field | Description |
---|---|---|
1-6 | Column Numbers | Reserved for line numbers. |
7 | Indicator | It can have Asterisk (*) indicating comments, Hyphen (-) indicating continuation and Slash (/) indicating form feed. |
8-11 | Area A | All COBOL divisions, sections, paragraphs and some special entries must begin in Area A. |
12-72 | Area B | All COBOL statements must begin in area B. |
73-80 | Identification Area | It can be used as needed by the programmer. |
例
次の例は、COBOLコーディングシートを示しています-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
文字列
文字列は、個々の文字を組み合わせて形成されます。 文字列は
- コメント、
- リテラル、または
- COBOLワード。
すべての文字列は separators で終わる必要があります。 区切り文字は、文字列を区切るために使用されます。
頻繁に使用される区切り記号-スペース、コンマ、ピリオド、アポストロフィ、左/右括弧、および引用符。
コメント
コメントは、プログラムの実行に影響を与えない文字列です。 文字の任意の組み合わせを使用できます。
コメントには2種類あります-
コメント行
コメント行は、任意の列に書き込むことができます。 コンパイラーは、コメント行の構文をチェックせず、文書化のために処理します。
コメント入力
コメントエントリは、識別部のオプションの段落に含まれているものです。 これらはエリアBで記述されており、プログラマーが参照用に使用しています。
- 太字*で強調表示されたテキストは、次の例のコメントエントリです-
上記のCOBOLプログラムを実行する JCL -
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
リテラル
リテラルは、プログラムで直接ハードコーディングされた定数です。 次の例では、「Hello World」はリテラルです。
以下で説明するように、リテラルには2つのタイプがあります-
英数字リテラル
英数字リテラルは引用符またはアポストロフィで囲まれています。 長さは最大160文字です。 アポストロフィまたは引用符は、ペアになっている場合にのみリテラルの一部になります。 リテラルの開始と終了は、アポストロフィまたは引用符のどちらかで同じでなければなりません。
例
次の例は、有効および無効な英数字リテラルを示しています-
数値リテラル
数値リテラルは、0〜9の数字の組み合わせ、+、–、または小数点です。 長さは最大18文字です。 記号を右端の文字にすることはできません。 小数点は最後に表示されません。
例
次の例は、有効および無効な数値リテラルを示しています-
COBOL Word
COBOL Wordは、予約語またはユーザー定義語にできる文字列です。 長さは最大30文字です。
ユーザー定義の
ユーザー定義の単語は、ファイル、データ、レコード、段落名、およびセクションの命名に使用されます。 ユーザー定義の単語を作成する際、アルファベット、数字、ハイフンを使用できます。 COBOLの予約語は使用できません。
予約語
予約語は、COBOLの事前定義語です。 私たちが頻繁に使用する予約語の種類は次のとおりです-
- ADD、ACCEPT、MOVEなどの*キーワード*
- 特殊文字 +、-、*、<、⇐などの単語
- *比Fig定数*は、ゼロ、スペースなどの定数値です。 表意定数のすべての定数値は、次の表に記載されています。
比Constant定数
Sr.No. | Figurative Constants & Description |
---|---|
1 |
HIGH-VALUES 降順で最上位にある1つ以上の文字。 |
2 |
LOW-VALUES 1つ以上の文字のバイナリ表現にはゼロが含まれます。 |
3 |
ZERO/ZEROES 変数のサイズに応じて1つ以上のゼロ。 |
4 |
SPACES 1つ以上のスペース。 |
5 |
QUOTES 一重引用符または二重引用符。 |
6 |
ALL literal データ項目をリテラルで埋めます。 |
COBOL-データ型
データ部は、プログラムで使用される変数を定義するために使用されます。 COBOLでデータを説明するには、次の用語を理解する必要があります-
- データ名
- レベル番号
- ピクチャー句 *値句
データ名
データ名は、手続き部で使用する前に、データ部で定義する必要があります。 ユーザー定義の名前が必要です。予約語は使用できません。 データ名は、実際のデータが保存されているメモリの場所への参照を提供します。 基本タイプまたはグループタイプを指定できます。
例
次の例は、有効および無効なデータ名を示しています-
レベル番号
レベル番号は、レコード内のデータのレベルを指定するために使用されます。 基本項目とグループ項目を区別するために使用されます。 基本項目をグループ化して、グループ項目を作成できます。
Sr.No. | Level Number & Description |
---|---|
1 |
レコード記述エントリー |
2 |
02 to 49 グループおよび基本アイテム |
3 |
66 句アイテムの名前変更 |
4 |
77 細分化できないアイテム |
5 |
88 条件名エントリ |
- *基本項目*はそれ以上分割できません。 レベル番号、データ名、Picture句、およびValue句(オプション)は、基本項目を記述するために使用されます。
- *グループ項目*は、1つ以上の基本項目で構成されます。 レベル番号、データ名、および値句(オプション)は、グループアイテムを記述するために使用されます。 グループレベル番号は常に01です。
例
次の例は、グループおよび基本項目を示しています-
ピクチャー句
Picture句は、次の項目を定義するために使用されます-
- *データタイプ*は、数値、アルファベット、または英数字です。 数値型は、0〜9の数字のみで構成されます。 アルファベットのタイプは、A〜Zの文字とスペースで構成されます。 英数字タイプは、数字、文字、および特殊文字で構成されます。
- Sign は数値データで使用できます。 +または–のいずれかです。
- *小数点位置*は数値データで使用できます。 想定位置は小数点の位置であり、データには含まれません。
- *長さ*は、データ項目が使用するバイト数を定義します。
Picture節で使用される記号-
Sr.No. | Symbol & Description |
---|---|
1 |
9 数値 |
2 |
A アルファベット |
3 |
X 英数字 |
4 |
V 暗黙の10進数 |
5 |
S Sign |
6 |
P 想定される10進数 |
例
次の例は、PIC句の使用を示しています-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
値句
値句は、データ項目を初期化するために使用されるオプションの句です。 値は、数値リテラル、英数字リテラル、または比fig定数です。 グループ項目と基本項目の両方で使用できます。
例
次の例は、VALUE句の使用を示しています-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
COBOL-基本動詞
COBOL動詞は、データ処理の手続き部で使用されます。 ステートメントは常にCOBOL動詞で始まります。 アクションのタイプが異なるいくつかのCOBOL動詞があります。
入力/出力動詞
入出力動詞は、ユーザーからデータを取得し、COBOLプログラムの出力を表示するために使用されます。 次の2つの動詞がこのプロセスに使用されます-
動詞を受け入れる
Accept動詞は、日付、時刻、曜日などのデータをオペレーティングシステムから、またはユーザーから直接取得するために使用されます。 プログラムがユーザーからデータを受け入れている場合、JCLを介して渡す必要があります。 オペレーティングシステムからデータを取得している間、次の例に示すようにFROMオプションが含まれています-
動詞の表示
表示動詞は、COBOLプログラムの出力を表示するために使用されます。
- COBOLプログラム*
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
動詞の初期化
初期化動詞は、グループ項目または基本項目を初期化するために使用されます。 RENAME句を含むデータ名は初期化できません。 数値データ項目はゼロに置き換えられます。 英数字またはアルファベットのデータ項目はスペースに置き換えられます。 REPLACING用語を含めると、データ項目は、次の例に示すように、指定された置換値に初期化できます-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
動詞を移動
移動動詞は、ソースデータから宛先データにデータをコピーするために使用されます。 基本データ項目とグループデータ項目の両方で使用できます。 グループデータ項目の場合、MOVE CORRESPONDING/CORRが使用されます。 try itオプションでは、MOVE CORRは機能していません。しかし、メインフレームサーバーでは動作します。
文字列からデータを移動するには、MOVE(x:l)が使用されます。xは開始位置で、lは長さです。 宛先データ項目のPIC句がソースデータ項目のPIC句よりも小さい場合、データは切り捨てられます。 宛先データ項目のPIC句がソースデータ項目のPIC句よりも大きい場合、余分なバイトにZEROSまたはSPACESが追加されます。 次の例はそれを明確にします。
上記のCOBOLプログラムを実行する JCL 。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
法的な動き
次の表は、法的動きに関する情報を提供します-
Alphabetic | Alphanumeric | Numeric | |
---|---|---|---|
Alphabetic | Possible | Possible | Not Possible |
Alphanumeric | Possible | Possible | Possible |
Numeric | Not Possible | Possible | Possible |
動詞を追加
追加動詞は、2つ以上の数値を追加し、結果を宛先オペランドに格納するために使用されます。
構文
以下の2つ以上の数字を追加する構文です-
構文-1では、A、B、Cが追加され、結果はCに保存されます(C = A + B + C)。 A、B、Dが追加され、結果がDに保存されます(D = A + B + D)。
構文-2では、A、B、C、Dが追加され、結果はEに保存されます(E = A + B + C + D)。
構文3では、WS-GROUP1およびWS-GROUP2内のサブグループアイテムが追加され、結果はWS-GROUP2に格納されます。
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
動詞を引く
減算動詞は、減算演算に使用されます。
構文
以下は、減算操作の構文です-
構文-1では、AとBがCから加算および減算されます。 結果はCに保存されます(C = C-(A + B))。 AとBがDから加算および減算されます。 結果はDに保存されます(D = D-(A + B))。
構文-2では、A、B、Cが加算され、Dから減算されます。 結果はEに保存されます(E = D-(A + B + C))
構文3では、WS-GROUP1およびWS-GROUP2内のサブグループアイテムが減算され、結果がWS-GROUP2に格納されます。
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
動詞を掛ける
乗算動詞は、乗算演算に使用されます。
構文
以下は、2つ以上の数字を乗算する構文です-
構文-1では、AとBは乗算され、結果はBに格納されます(B = A B)。 AとCは乗算され、結果はCに格納されます(C = A C)。
構文2では、AとBは乗算され、結果はEに格納されます(E = A * B)。
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
動詞を分ける
除算動詞は除算操作に使用されます。
構文
以下は、除算演算の構文です-
構文-1では、BはAで除算され、結果はBに格納されます(B = B/A)。
構文2では、AはBで除算され、結果はC(C = A/B)に格納され、残りはRに格納されます。
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
計算ステートメント
計算ステートメントは、COBOLで算術式を記述するために使用されます。 これは、加算、減算、乗算、および除算の代替です。
- 例 *
上記のCOBOLプログラムを実行する JCL 。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
COBOL-データレイアウト
COBOLレイアウトは、各フィールドの使用とそのフィールドに存在する値の説明です。 以下は、COBOLで使用されるデータ記述エントリです-
- 句の再定義
- 句の名前を変更
- 使用条項
- コピーブック
句の再定義
Redefines句は、異なるデータ記述でストレージを定義するために使用されます。 1つ以上のデータ項目が同時に使用されない場合、同じストレージを別のデータ項目に使用できます。 そのため、同じストレージを異なるデータ項目で参照できます。
構文
以下は、再定義句の構文です-
以下は、使用されるパラメータの詳細です-
- WS-OLDは再定義されたアイテムです
- WS-NEW1およびWS-NEW2はアイテムの再定義です
再定義されたアイテムと再定義されたアイテムのレベル番号は同じである必要があり、66または88のレベル番号であってはなりません。 再定義アイテムでVALUE句を使用しないでください。 ファイルセクションでは、01レベル番号の再定義句を使用しないでください。 定義の再定義は、再定義する次のデータ記述でなければなりません。 再定義するアイテムは、常に再定義するアイテムと同じ値を持ちます。
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
句の名前を変更
Renames句は、既存のデータ項目に異なる名前を付けるために使用されます。 データ名を再グループ化し、新しい名前を付けるために使用されます。 新しいデータ名は、グループまたは基本項目にわたって名前を変更できます。 レベル番号66は、名前変更のために予約されています。
構文
以下は、名前変更句の構文です-
名前の変更は、同じレベルでのみ可能です。 上記の例では、WS-A、WS-B、およびWS-Cは同じレベルにあります。 名前変更定義は、名前を変更する次のデータ記述でなければなりません。 01、77、または66のレベル番号で名前の変更を使用しないでください。 名前の変更に使用されるデータ名は順番に並んでいる必要があります。 occur句を含むデータ項目の名前は変更できません。
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
使用条項
Usage句は、形式データが保存されるオペレーティングシステムを指定します。 レベル番号66または88では使用できません。 グループに使用法句が指定されている場合、すべての基本項目は同じ使用法句になります。 Usage句で使用できるさまざまなオプションは次のとおりです-
表示
データ項目はASCII形式で保存され、各文字には1バイトが必要です。 デフォルトの使用法です。
次の例では、必要なバイト数を計算します-
計算/COMP
データ項目はバイナリ形式で保存されます。 ここで、データ項目は整数でなければなりません。
次の例では、必要なバイト数を計算します-
COMP-1
データ項目は実数または浮動小数点数に似ており、単精度の浮動小数点数として表されます。 内部的には、データは16進形式で保存されます。 COMP-1はPIC句を受け入れません。 ここで、1ワードは4バイトに相当します。
COMP-2
データ項目はLongまたはDoubleに似ており、倍精度の浮動小数点数として表されます。 内部的には、データは16進形式で保存されます。 COMP-2はPIC句を指定しません。 ここで、2ワードは8バイトに相当します。
COMP-3
データ項目はパック10進数形式で保存されます。 各桁は半バイト(1ニブル)を占有し、符号は右端のニブルに格納されます。
次の例では、必要なバイト数を計算します-
コピーブック
COBOLコピーブックは、データ構造を定義する一連のコードです。 特定のデータ構造が多くのプログラムで使用されている場合、同じデータ構造を再度書き込む代わりに、コピーブックを使用できます。 COPYステートメントを使用して、コピーブックをプログラムに組み込みます。 COPYステートメントは、WorkingStorageセクションで使用されます。
次の例では、COBOLプログラム内にコピーブックが含まれています-
ここで、ABCはコピーブック名です。 ABCコピーブックの次のデータ項目は、プログラム内で使用できます。
COBOL-条件ステートメント
条件ステートメントは、プログラマーが指定した特定の条件に応じて実行フローを変更するために使用されます。 条件付きステートメントは常にtrueまたはfalseに評価されます。 条件は、IF、Evaluate、およびPerformステートメントで使用されます。 条件の種類は次のとおりです-
- IF条件ステートメント
- 関係条件
- サイン条件
- クラス条件
- 条件名条件
- 否定的な条件
- 複合条件
IF条件ステートメント
IFステートメントは条件をチェックします。 条件が真の場合、IFブロックが実行されます。条件が偽の場合、ELSEブロックが実行されます。
構文
IF条件ステートメントの構文は次のとおりです-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
関係条件
関係条件は、2つのオペランドを比較します。オペランドは、識別子、リテラル、または算術式のいずれかです。 数値フィールドの代数比較は、サイズと使用法の句に関係なく行われます。
非数値オペランドの場合
同じサイズの2つの非数値オペランドが比較される場合、文字は左から、対応する位置と最後まで比較されます。 より多くの文字を含むオペランドは、より大きく宣言されます。
サイズが等しくない2つの非数値オペランドを比較する場合、オペランドのサイズが等しくなるまで、短いデータ項目の末尾にスペースが追加され、前のポイントで述べた規則に従って比較されます。
構文
以下に、関係条件ステートメントの構文を示します-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
サイン条件
符号条件は、数値オペランドの符号を確認するために使用されます。 与えられた数値がゼロより大きいか、小さいか、等しいかを決定します。
構文
以下は、符号条件ステートメントの構文です-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
クラス条件
クラス条件は、オペランドにアルファベットまたは数値データのみが含まれているかどうかを確認するために使用されます。 スペースは、ALPHABETIC、ALPHABETIC-LOWER、およびALPHABETIC-UPPERで考慮されます。
構文
以下は、クラス条件ステートメントの構文です-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
条件名条件
条件名はユーザー定義の名前です。 ユーザーが指定した値のセットが含まれます。 ブール変数のように動作します。 レベル番号88で定義されます。 PIC句はありません。
構文
以下は、ユーザー定義の条件ステートメントの構文です-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
否定的な条件
否定条件は、NOTキーワードを使用して与えられます。 条件がtrueで、その前にNOTを指定した場合、その最終値はfalseになります。
構文
否定条件ステートメントの構文は次のとおりです-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
複合条件
結合条件には、論理演算子ANDまたはORを使用して接続された2つ以上の条件が含まれます。
構文
以下は、結合された条件ステートメントの構文です-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
動詞を評価する
動詞の評価は、一連のIF-ELSEステートメントの置き換えです。 複数の条件を評価するために使用できます。 CプログラムのSWITCHステートメントに似ています。
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
COBOL-ループステートメント
ファイルの各レコードを最後まで読み込むなど、何度も何度も実行する必要があるタスクがあります。 COBOLで使用されるループ文は次のとおりです-
- 実行する
- まで実行
- 時間を実行
- 変化させる
実行する
Perform Thruは、シーケンスの最初と最後の段落名を指定して一連の段落を実行するために使用されます。 最後の段落を実行した後、コントロールが返されます。
インライン実行
PERFORM内のステートメントは、END-PERFORMに達するまで実行されます。
構文
以下は、インライン実行の構文です-
アウトラインの実行
ここでは、文が1つの段落で実行され、その後、制御は他の段落またはセクションに移されます。
構文
以下は、行外実行の構文です-
例
上記のCOBOLプログラムを実行する JCL 。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
まで実行
「実行まで」では、指定された条件が満たされるまで段落が実行されます。 「with before before」はデフォルトの条件であり、段落内のステートメントの実行前に条件がチェックされることを示します。
構文
以下は、perform untilの構文です-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
時間を実行
「実行時間」では、指定した回数だけ段落が実行されます。
構文
実行時間の構文は次のとおりです-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
変化させる
可変実行では、Until句の条件がtrueになるまで段落が実行されます。
構文
以下は、可変実行の構文です-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
GO TOステートメント
GO TOステートメントは、プログラムの実行フローを変更するために使用されます。 GO TOステートメントでは、転送は順方向にのみ行われます。 段落を終了するために使用されます。 使用されるGO TOステートメントの種類は次のとおりです-
無条件のGO TO
条件付きGO TO
「x」が1に等しい場合、コントロールは最初の段落に転送されます。 「x」が2に等しい場合、コントロールは2番目の段落に移され、以下同様に続きます。
例
上記のCOBOLプログラムを実行する JCL :
上記のプログラムをコンパイルして実行すると、次の結果が生成されます。
COBOL-文字列処理
COBOLの文字列処理ステートメントは、文字列に対して複数の機能操作を実行するために使用されます。 以下は、文字列処理ステートメントです-
- 調べる
- ひも
- 紐を外す
調べる
Inspect verbは、ストリング内の文字をカウントまたは置換するために使用されます。 文字列操作は、英数字、数値、またはアルファベットの値に対して実行できます。 検査操作は左から右に実行されます。 文字列操作に使用されるオプションは次のとおりです-
集計
集計オプションは、文字列の文字をカウントするために使用されます。
構文
以下は、集計オプションの構文です-
使用されるパラメータは-
- 入力文字列-文字がカウントされる文字列。
- output-count-文字数を保持するデータ項目。
例
上記のCOBOLプログラムを実行する JCL 。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
交換する
置換オプションは、文字列文字を置換するために使用されます。
構文
以下は、オプションの置換の構文です-
使用されるパラメータは-
- input-string -文字がchar1からchar2に置き換えられる文字列。
例
上記のCOBOLプログラムを実行する JCL 。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
ひも
文字列動詞は、文字列を連結するために使用されます。 STRINGステートメントを使用すると、2つ以上の文字列を組み合わせて長い文字列を作成できます。 「区切り」句は必須です。
構文
以下は、文字列動詞の構文です-
以下は、使用されるパラメータの詳細です-
- ws-string1およびws-string2:連結される入力文字列
- ws-string:出力文字列
- ws-count:新しい連結文字列の長さをカウントするために使用されます
- 区切り文字は、文字列の終わりを指定します
- ポインターとオーバーフローはオプションです
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
紐を外す
Unstring verbは、1つのストリングを複数のサブストリングに分割するために使用されます。 Delimited By句は必須です。
構文
以下は、Unstring verbの構文です-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
COBOL-テーブル処理
COBOLの配列はテーブルと呼ばれます。 配列は線形データ構造であり、同じタイプの個々のデータ項目のコレクションです。 テーブルのデータ項目は内部的にソートされます。
テーブル宣言
テーブルはデータ部で宣言されています。 Occurs 句は、テーブルを定義するために使用されます。 Occurs句は、データ名定義の繰り返しを示します。 02から49までのレベル番号でのみ使用できます。 Redefinesでは発生句を使用しないでください。 一次元と二次元の表の説明は次のとおりです-
一次元テーブル
1次元テーブルでは、 occurs 句は宣言で1回だけ使用されます。 WSTABLEは、テーブルを含むグループアイテムです。 WS-Bは、10回出現するテーブル要素に名前を付けます。
構文
以下は、一次元のテーブルを定義するための構文です-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
二次元テーブル
両方のデータ要素が可変長である2次元テーブルが作成されます。 参考のため、構文を確認してから、テーブルの分析を試みてください。 最初の配列(WS-A)は1〜10回発生し、内部配列(WS-C)は1〜5回発生します。 WS-Aの各エントリには、WS-Cの対応する5つのエントリがあります。
構文
以下は、2次元テーブルを定義するための構文です-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
添字
テーブルの個々の要素には、添え字を使用してアクセスできます。 添え字の値の範囲は、1からテーブルの出現回数までです。 添字には任意の正数を指定できます。 データ分割での宣言は必要ありません。 occurs句で自動的に作成されます。
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
索引
インデックスを使用してテーブル要素にアクセスすることもできます。 インデックスは、テーブルの先頭からの要素の変位です。 インデックスは、INDEXED BY句を使用してOccurs句で宣言されます。 インデックスの値は、SETステートメントとPERFORM Varyingオプションを使用して変更できます。
構文
以下は、テーブルでインデックスを定義するための構文です-
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
セットステートメント
Setステートメントは、インデックス値を変更するために使用されます。 Set動詞は、インデックス値を初期化、インクリメント、またはデクリメントするために使用されます。 [検索]および[すべて検索]で使用して、テーブル内の要素を見つけます。
構文
以下は、Setステートメントを使用するための構文です-
例
上記のCOBOLプログラムを実行する JCL 。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
サーチ
検索は、テーブル内の要素を見つけるために使用される線形検索方法です。 ソート済みのテーブルとソートされていないテーブルの両方で実行できます。 Index句で宣言されたテーブルにのみ使用されます。 インデックスの初期値から始まります。 検索された要素が見つからない場合、インデックスは自動的に1ずつ増加し、テーブルの最後まで続きます。
例
上記のCOBOLプログラムを実行する JCL 。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
すべて検索
すべて検索は、テーブル内の要素を見つけるために使用されるバイナリ検索方法です。 [すべて検索]オプションを使用するには、テーブルを並べ替える必要があります。 インデックスは初期化を必要としません。 バイナリ検索では、テーブルは2つの半分に分割され、検索された要素の半分が存在するかどうかを判断します。 このプロセスは、要素が見つかるか終了に達するまで繰り返されます。
例
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
COBOL-ファイル処理
COBOLのファイルの概念は、C/C ++のファイルとは異なります。 COBOLで「ファイル」の基本を学習している間、両方の言語の概念は相互に関連してはなりません。 単純なテキストファイルはCOBOLでは使用できませんが、代わりに* PS(物理シーケンシャル)および *VSAM ファイルが使用されます。 PSファイルについては、このモジュールで説明します。
COBOLでのファイル処理を理解するには、基本的な用語を知っている必要があります。 これらの用語は、ファイル処理の基本を理解するためにのみ役立ちます。 さらに詳細な用語については、「ファイル処理動詞」の章で説明します。 以下は基本的な用語です-
- フィールド
- 記録
- 物理記録
- 論理レコード
- File
次の例は、これらの用語を理解するのに役立ちます-
フィールド
フィールドは、要素に関して保存されたデータを示すために使用されます。 上記の例に示すように、学生ID、名前、マーク、合計マーク、パーセンテージなどの単一の要素を表します。 フィールドの文字数はフィールドサイズと呼ばれます。たとえば、学生名には10文字を使用できます。 フィールドは次の属性を持つことができます-
- *主キー*は、各レコードに固有のフィールドであり、特定のレコードを識別するために使用されます。 たとえば、学生のマークファイルでは、各学生は主キーを形成する一意の学生IDを持ちます。
- *セカンダリキー*は、関連データの検索に使用される一意または非一意のフィールドです。 たとえば、学生のマークファイルでは、学生IDが不明な場合、学生のフルネームをセカンダリキーとして使用できます。
- *記述子*フィールドは、エンティティを記述するために使用されます。 たとえば、学生のマークファイルでは、レコードに意味を追加するマークとパーセンテージフィールドは既知の記述子です。
記録
レコードは、エンティティを記述するために使用されるフィールドのコレクションです。 1つ以上のフィールドが一緒になってレコードを形成します。 たとえば、学生のマークファイル、学生ID、名前、マーク、合計マーク、およびパーセンテージが1つのレコードを形成します。 レコード内のすべてのフィールドの累積サイズは、レコードサイズと呼ばれます。 ファイルに存在するレコードは、固定長でも可変長でもかまいません。
物理記録
物理レコードは、外部デバイスに存在する情報です。 ブロックとも呼ばれます。
論理レコード
論理レコードは、プログラムで使用される情報です。 COBOLプログラムでは、どの時点でも1つのレコードのみを処理でき、論理レコードと呼ばれます。
File
ファイルは、関連するレコードのコレクションです。 たとえば、学生のマークファイルは、すべての学生のレコードで構成されます。
COBOL-ファイル編成
ファイル編成は、レコードがファイルに編成される方法を示します。 レコードへのアクセス効率を高めるために、ファイルにはさまざまなタイプの組織があります。 以下は、ファイル編成スキームのタイプです-
- 順次ファイル編成
- インデックス付きの順次ファイル編成
- 相対ファイル編成
このモジュールの構文は、それぞれの用語とともに言及され、プログラムでの使用法のみを参照しています。 これらの構文を使用する完全なプログラムについては、「ファイル処理動詞」の章で説明します。
順次ファイル編成
順次ファイルは、順次に格納およびアクセスされるレコードで構成されます。 順次ファイル編成の重要な属性は次のとおりです-
- レコードは順番に読み取ることができます。 10番目のレコードを読み取るには、前の9つのレコードをすべて読み取る必要があります。
- レコードは順番に書き込まれます。 新しいレコードを間に挿入することはできません。 新しいレコードは常にファイルの最後に挿入されます。
- レコードを順次ファイルに配置した後、レコードを削除、短縮、または延長することはできません。
- レコードの順序は、一度挿入されると変更できません。
- 記録の更新が可能です。 新しいレコード長が古いレコード長と同じ場合、レコードは上書きできます。
- 順次出力ファイルは、印刷に適したオプションです。
構文
順次ファイル編成の構文は次のとおりです-
インデックス付き順次ファイル編成
インデックス付きシーケンシャルファイルは、シーケンシャルにアクセスできるレコードで構成されます。 直接アクセスも可能です。 それは2つの部分で構成されています-
- *データファイル*にはシーケンシャルスキームのレコードが含まれます。
- *インデックスファイル*には、データファイル内の主キーとそのアドレスが含まれています。
順次ファイル編成の重要な属性は次のとおりです-
- レコードは、順次ファイル編成の場合と同様に順次に読み取ることができます。
- 主キーがわかっている場合、レコードにランダムにアクセスできます。 インデックスファイルを使用してレコードのアドレスを取得し、データファイルからレコードを取得します。
- ソートされたインデックスは、キー値をファイル内のレコードの位置に関連付けるこのファイルシステムで保持されます。
- レコードを取得するための代替インデックスも作成できます。
構文
以下は、インデックス付き順次ファイル編成の構文です-
相対ファイル編成
相対ファイルは、*相対アドレス*で順序付けられたレコードで構成されます。 以下は、相対的なファイル編成の重要な属性です-
- レコードは、シーケンシャルおよびインデックス付きファイル編成の場合と同様にシーケンシャル順序で読み取ることができます。
- 相対キーを使用してレコードにアクセスできます。 相対キーは、ファイルの先頭のアドレスに対するレコードの位置を表します。
- レコードは、相対キーを使用して挿入できます。 相対アドレスは、相対キーを使用して計算されます。
- 相対ファイルは、レコードへの最速のアクセスを提供します。
- このファイルシステムの主な欠点は、一部の中間レコードが欠落している場合、それらもスペースを占有することです。
構文
以下は、相対ファイル編成の構文です-
COBOL-ファイルアクセスモード
今まで、ファイル編成スキームが議論されてきました。 ファイル編成スキームごとに、異なるアクセスモードを使用できます。 ファイルアクセスモードの種類は次のとおりです-
- シーケンシャルアクセス
- ランダムアクセス
- ダイナミックアクセス
このモジュールの構文は、それぞれの用語とともに言及され、プログラムでの使用法のみを参照しています。 これらの構文を使用した完全なプログラムについては、次の章で説明します。
シーケンシャルアクセス
アクセスモードがシーケンシャルの場合、レコードの取得方法は、選択したファイル編成によって変わります。
- *順次ファイル*の場合、レコードは挿入されたのと同じ順序でアクセスされます。
- *インデックス付きファイル*の場合、レコードを取得するために使用されるパラメーターはレコードキー値です。
- *相対ファイル*の場合、相対レコードキーを使用してレコードを取得します。
構文
順次アクセスモードの構文は次のとおりです-
ランダムアクセス
アクセスモードがRANDOMの場合、レコードの取得方法は、選択したファイル構成に従って変更されます。
- *インデックス付きファイル*の場合、レコードは、主キーまたは代替キーのキーフィールドに配置された値に従ってアクセスされます。 1つ以上の代替インデックスが存在する場合があります。
- relative files の場合、レコードは相対レコードキーを通じて取得されます。
構文
ランダムアクセスモードの構文は次のとおりです-
ダイナミックアクセス
ダイナミックアクセスは、同じプログラムでシーケンシャルアクセスとランダムアクセスの両方をサポートします。 ダイナミックアクセスでは、1つのファイル定義を使用して、キーによっていくつかのレコードにシーケンシャル順序でアクセスし、他のレコードにアクセスするなど、シーケンシャル処理とランダム処理の両方を実行します。
相対ファイルとインデックス付きファイルの場合、ダイナミックアクセスモードでは、READステートメントでNEXT句を使用して、ファイルの読み取り中にシーケンシャルアクセスモードとランダムアクセスモードを切り替えることができます。 NEXTおよびREAD機能については、次の章で説明します。
構文
ダイナミックアクセスモードの構文は次のとおりです-
COBOL-ファイル処理動詞
ファイル処理動詞は、ファイルに対してさまざまな操作を実行するために使用されます。 以下は、ファイル処理動詞です-
- Open
- Read
- 書きます
- リライト
- 削除する
- 開始 *閉じる
動詞を開く
オープンは、実行する必要がある最初のファイル操作です。 Openが成功した場合、ファイルに対してそれ以降の操作のみが可能です。 ファイルを開いた後にのみ、ファイル構造内の変数を処理に使用できます。* FILE STATUS *変数は、各ファイル操作の後に更新されます。
構文
ここで、file-nameは文字列リテラルであり、ファイルに名前を付けるために使用します。 ファイルは、次のモードで開くことができます-
Sr.No. | Mode & Description |
---|---|
1 |
Input 入力モードは既存のファイルに使用されます。 このモードでは、ファイルの読み取りのみが可能で、ファイルに対する他の操作は許可されていません。 |
2 |
Output 出力モードは、ファイルにレコードを挿入するために使用されます。 *順次ファイル*が使用され、ファイルがいくつかのレコードを保持している場合、既存のレコードが最初に削除されてから、新しいレコードがファイルに挿入されます。 *インデックス付きファイル*または*相対ファイル*の場合は発生しません。 |
3 |
Extend 拡張モードは、 sequential file にレコードを追加するために使用されます。 このモードでは、レコードは最後に挿入されます。 ファイルアクセスモードが*ランダム*または*ダイナミック*の場合、拡張モードは使用できません。 |
4 |
I-O 入出力モードは、ファイルのレコードを読み書きするために使用されます。 |
動詞を読む
読み取り動詞は、ファイルレコードを読み取るために使用されます。 読み取りの機能は、ファイルからレコードを取得することです。 読み取り動詞ごとに、ファイル構造に読み取れるレコードは1つだけです。 読み取り操作を実行するには、ファイルをINPUTモードまたはI-Oモードで開きます。 読み取りステートメントごとに、ファイルポインターがインクリメントされるため、連続するレコードが読み取られます。
構文
以下は、ファイルアクセスモードがシーケンシャルの場合にレコードを読み取る構文です-
以下は、使用されるパラメータです-
- NEXT RECORDはオプションであり、インデックス付きシーケンシャルファイルがシーケンシャルに読み取られるときに指定されます。
- INTO句はオプションです。 ws-file-structureはWorkingStorageセクションで定義され、READステートメントから値を取得します。
- AT END条件は、ファイルの終わりに達するとTrueになります。
例-次の例は、行順編成を使用して既存のファイルを読み取ります。 このプログラムは、ファイルに存在するすべてのレコードを表示する Live Demo オプションを使用してコンパイルおよび実行できます。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
構文
以下は、ファイルアクセスモードがランダムな場合にレコードを読み取る構文です-
例-次の例では、インデックス化された組織を使用して既存のファイルを読み取ります。 このプログラムは、メインフレームで JCL を使用してコンパイルおよび実行でき、ファイルに存在するすべてのレコードが表示されます。 Mainframesサーバーでは、テキストファイルは使用しません。代わりに、PSファイルを使用します。
メインフレームに存在するファイルの内容が上記の例のinput.txtファイルと同じであると仮定しましょう。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
動詞を書く
書き込み動詞は、ファイルにレコードを挿入するために使用されます。 レコードが書き込まれると、レコードバッファで使用できなくなります。 レコードをファイルに挿入する前に、値をレコードバッファーに移動してから、書き込み動詞を実行します。
Writeステートメントを FROM オプションとともに使用して、作業用ストレージ変数からレコードを直接書き込むことができます。 Fromはオプションの句です。 アクセスモードがシーケンシャルの場合、レコードを書き込むには、ファイルを出力モードまたは拡張モードで開く必要があります。 アクセスモードがランダムまたはダイナミックの場合、レコードを書き込むには、ファイルを出力モードまたはI-Oモードで開く必要があります。
構文
以下は、ファイル編成がシーケンシャルであるときにレコードを読み取るための構文です-
以下は、ファイル編成がインデックス付けされているか、相対であるときにレコードを読み取るための構文です-
例-次の例は、組織がシーケンシャルであるときに新しいファイルに新しいレコードを挿入する方法を示しています。
上記のプログラムをコンパイルして実行すると、新しいレコードが出力ファイルに追加されます。
動詞を書き換える
Rewrite verbは、レコードを更新するために使用されます。 書き換え操作を行うには、ファイルをI-Oモードで開く必要があります。 読み取り操作が成功した後にのみ使用できます。 Rewrite verbは、最後に読み取られたレコードを上書きします。
構文
以下は、ファイル編成がシーケンシャルであるときにレコードを読み取るための構文です-
以下は、ファイル編成がインデックス付けされているか、相対であるときにレコードを読み取るための構文です-
例-次の例は、前の書き込みステップで挿入した既存のレコードを更新する方法を示しています-
上記のプログラムをコンパイルして実行すると、レコードが更新されます-
動詞を削除
削除動詞は、インデックス付きファイルおよび相対ファイルでのみ実行できます。 ファイルはI-Oモードで開く必要があります。 順次ファイル編成では、レコードを削除できません。 順次アクセスモードの場合、Readステートメントによって最後に読み取られたレコードは削除されます。 ランダムアクセスモードでは、レコードキーを指定してから、削除操作を実行します。
構文
以下は、レコードを削除するための構文です-
例-既存のレコードを削除するには-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
動詞を開始
開始動詞は、インデックス付きファイルおよび相対ファイルでのみ実行できます。 特定のレコードにファイルポインターを配置するために使用されます。 アクセスモードは、シーケンシャルモードまたはダイナミックモードでなければなりません。 ファイルはI-Oまたは入力モードで開く必要があります。
構文
以下は、特定のレコードにポインタを配置するための構文です-
動詞を閉じる
ファイルを閉じるには、閉じる動詞が使用されます。 Close操作を実行した後、ファイル構造内の変数は処理に使用できなくなります。 プログラムとファイル間のリンクは失われます。
構文
以下は、ファイルを閉じるための構文です-
COBOL-サブルーチン
Cobolサブルーチンは、独立してコンパイルできますが、独立して実行できないプログラムです。 サブルーチンには2つのタイプがあります: Perform ステートメントのような* internalサブルーチン*とCALL verbのような external サブルーチンです。
動詞を呼び出す
呼び出し動詞は、あるプログラムから別のプログラムに制御を転送するために使用されます。 CALL動詞を含むプログラムは Calling Program であり、呼び出されるプログラムは Called Program として知られています。 呼び出しプログラムの実行は、呼び出されたプログラムが実行を終了するまで停止します。 Exit Programステートメントは、呼び出し先プログラムで制御を戻すために使用されます。
呼び出されたプログラムの制約
以下は、呼び出されたプログラムの要件です-
- *リンケージセクション*は、呼び出されたプログラムで定義する必要があります。 プログラムで渡されるデータ要素で構成されます。 データ項目にValue句を含めることはできません。 PIC句は、呼び出しプログラムを介して渡される変数と互換性がある必要があります。
- *を使用した手続き除算*には、呼び出し側プログラムから渡される変数のリストがあり、呼び出し動詞で言及されている順序と同じでなければなりません。
- Exit program ステートメントは、制御を戻すために呼び出されたプログラムで使用されます。 呼び出されたプログラムの最後のステートメントでなければなりません。
パラメータは、2つの方法でプログラム間で渡すことができます-
- 参照により *コンテンツごと
参照による呼び出し
呼び出されたプログラムの変数の値が変更された場合、それらの新しい値は呼び出し元のプログラムに反映されます。* BY *句が指定されていない場合、変数は常に参照渡しされます。
構文
参照によってサブルーチンを呼び出す構文は次のとおりです-
例
次の例は、メインの呼び出しプログラムであり、UTILは呼び出されたプログラムです-
呼び出されたプログラム
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
コンテンツで呼び出す
呼び出されたプログラムの変数の値が変更された場合、それらの新しい値は呼び出しプログラムに反映されません。
構文
内容によってサブルーチンを呼び出す構文は次のとおりです-
例
次の例は、メインの呼び出しプログラムであり、UTILは呼び出されたプログラムです-
呼び出されたプログラム
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
通話の種類
呼び出しには2つのタイプがあります-
- *静的呼び出し*は、プログラムがNODYNAMコンパイラオプションでコンパイルされるときに発生します。 呼び出された静的プログラムは、コンパイル時にストレージにロードされます。
- *ダイナミックコール*は、プログラムがDYNAMおよびNODLLコンパイラオプションでコンパイルされるときに発生します。 動的に呼び出されるプログラムは、実行時にストレージにロードされます。
COBOL-内部ソート
ファイル内のデータのソートまたは2つ以上のファイルのマージは、ほとんどすべてのビジネス指向のアプリケーションで共通の必要性です。 ソートは、レコードを昇順または降順で配列するために使用されるため、順次処理を実行できます。 COBOLでファイルをソートするために使用される2つの技術があります-
- *外部ソート*は、JCLのSORTユーティリティを使用してファイルをソートするために使用されます。 これについては、JCLの章で説明しました。 今のところ、内部ソートに焦点を当てます。
- 内部ソート*は、COBOLプログラム内のファイルをソートするために使用されます。 *SORT 動詞は、ファイルのソートに使用されます。
動詞の並べ替え
COBOLのソートプロセスでは3つのファイルが使用されます-
- *入力ファイル*は、昇順または降順でソートする必要があるファイルです。
- *ワークファイル*は、ソートプロセスの進行中にレコードを保持するために使用されます。 入力ファイルのレコードは、ソートプロセスのためにワークファイルに転送されます。 このファイルは、SDエントリの下のファイルセクションで定義する必要があります。
- *出力ファイル*は、ソート処理後に取得されるファイルです。 これは、ソート動詞の最終出力です。
構文
以下は、ファイルをソートするための構文です-
SORTは次の操作を実行します-
- ワークファイルをI-Oモードで、入力ファイルをINPUTモードで、出力ファイルをOUTPUTモードで開きます。
- 入力ファイルにあるレコードをワークファイルに転送します。
- SORT-FILEをrec-keyで昇順/降順でソートします。
- ワークファイルから出力ファイルにソートされたレコードを転送します。
- 入力ファイルと出力ファイルを閉じて、ワークファイルを削除します。
例
次の例では、INPUTは入力ファイルであり、昇順でソートする必要があります-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
動詞を結合
Mergeステートメントを使用して、2つ以上の同じ順序のファイルを結合します。 マージプロセスで使用されるファイル-
- 入力ファイル-入力1、入力2
- ワークファイル
- 出力ファイル
構文
以下は、2つ以上のファイルをマージするための構文です-
Mergeは次の操作を実行します-
- ワークファイルをI-Oモードで、入力ファイルをINPUTモードで、出力ファイルをOUTPUTモードで開きます。
- 入力ファイルにあるレコードをワークファイルに転送します。
- SORT-FILEをrec-keyで昇順/降順でソートします。
- ワークファイルから出力ファイルにソートされたレコードを転送します。
- 入力ファイルと出力ファイルを閉じて、ワークファイルを削除します。
例
次の例では、INPUT1とINPUT2は、昇順でマージされる入力ファイルです-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
COBOL-データベースインターフェイス
今のところ、COBOLでのファイルの使用を学びました。 次に、COBOLプログラムがDB2と対話する方法について説明します。 次の用語が含まれます-
- 埋め込みSQL
- DB2アプリケーションプログラミング
- ホスト変数
- SQLCA
- SQLクエリ
- カーソル
埋め込みSQL
埋め込みSQLステートメントは、COBOLプログラムで標準のSQL操作を実行するために使用されます。 埋め込みSQLステートメントは、アプリケーションプログラムがコンパイルされる前に、SQLプロセッサによって前処理されます。 COBOLは*ホスト言語*として知られています。 COBOL-DB2アプリケーションは、COBOLとDB2の両方を含むアプリケーションです。
埋め込みSQLステートメントは、若干の変更を加えた通常のSQLステートメントと同様に機能します。 たとえば、クエリの出力は、 Host Variables と呼ばれる定義済みの変数セットに送られます。 追加のINTO句がSELECTステートメントに配置されます。
DB2アプリケーションプログラミング
以下は、COBOL-DB2プログラムのコーディング中に従うべき規則です-
- すべてのSQLステートメントは、 EXEC SQL と* ENDEXEC。*で区切る必要があります。
- SQLステートメントは、エリアBでコーディングする必要があります。
- プログラムで使用されるすべてのテーブルは、WorkingStorageセクションで宣言する必要があります。 これは、 INCLUDE ステートメントを使用して行われます。 *INCLUDEおよびDECLARE TABLE以外のすべてのSQLステートメントは、手続き部に表示する必要があります。
ホスト変数
ホスト変数は、テーブルからデータを受信したり、テーブルにデータを挿入したりするために使用されます。 ホスト変数は、プログラムとDB2の間で受け渡されるすべての値に対して宣言する必要があります。 これらは、Working-Storage Sectionで宣言されています。
ホスト変数をグループ項目にすることはできませんが、ホスト構造内でグループ化できます。* 名前変更*または*再定義*することはできません。 SQLステートメントでホスト変数を使用し、*コロン(:)。*をプレフィックスとして付けます。
構文
以下は、ホスト変数を宣言し、Working-Storageセクションにテーブルを含めるための構文です-
SQLCA
SQLCAは、DB2がSQL実行のフィードバックをプログラムに渡すSQL通信領域です。 実行が成功したかどうかをプログラムに伝えます。 エラーコードを含む SQLCODE のようなSQLCAの下には多くの定義済み変数があります。 SQLCODEの値 '000’は、実行が成功したことを示します。
構文
以下は、Working-StorageセクションでSQLCAを宣言する構文です-
SQLクエリ
Student-Id、Student-Name、Student-Addressを含む 'Student’という名前のテーブルが1つあるとします。
STUDENTテーブルには、次のデータが含まれています-
次の例は、COBOLプログラムでの SELECT クエリの使用方法を示しています-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
次の例は、COBOLプログラムでの INSERT クエリの使用方法を示しています-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
次の例は、COBOLプログラムでの UPDATE クエリの使用方法を示しています-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
次の*例*は、COBOLプログラムでの DELETE クエリの使用法を示しています-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
カーソル
カーソルは、一度に複数の行選択を処理するために使用されます。 これらは、クエリのすべての結果を保持するデータ構造です。 これらは、Working-Storage SectionまたはProcedure Divisionで定義できます。 カーソルに関連付けられている操作は次のとおりです-
- 宣言する
- Open
- 閉じる
- フェッチ
カーソルを宣言
カーソル宣言は、Working-Storage SectionまたはProcedure Divisionで実行できます。 最初のステートメントは、実行不可能なステートメントであるDECLAREステートメントです。
Open
カーソルを使用する前に、Openステートメントを実行する必要があります。 Openステートメントは、実行のためにSELECTを準備します。
閉じる
Closeステートメントは、カーソルが占有しているすべてのメモリを解放します。 プログラムを終了する前にカーソルを閉じることは必須です。
フェッチ
Fetchステートメントはカーソルを識別し、値をINTO句に入れます。 Fetchステートメントは、一度に1行を取得するときにループでコーディングされます。
次の例は、STUDENTテーブルからすべてのレコードをフェッチするカーソルの使用法を示しています-
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-