ILE COBOL 解説書

ステートメントによる操作

COBOL ステートメントは、次の種類の操作を行います。

FROM 句

ヘルプを表示したいトピックを選択してください。

TO

ヘルプを表示したいトピックを選択してください。

共通の句および概念

以下の算術ステートメントとデータ操作ステートメントには、いくつかの共通した句と概念があります。

CORRESPONDING 句

同じ名前の基本データ項目が属しているグループ項目が指定されている場合には、CORRESPONDING 句 (CORR) を使用することにより、 それらの基本データ項目に対して ADD、SUBTRACT、および MOVE 操作を実行できます。

キーワード CORRESPONDING の後にある ID は両方とも、グループ項目でなければなりません。 ここの説明では、これらの ID を ID-1 および ID-2 とします。

ID-1 から 1 つ、また ID-2 から 1 つのデータ項目の対 (従属項目) は、以下の条件が真である場合に対応します。

(デフォルトの) *PRTCORR コンパイラー・オプションまたは PROCESS ステートメントの PRTCORR オプションを使用すると、 コンパイラーは、CORRESPONDING 句が入っている各ステートメントの後のコンパイラー・リスト内にコメント行を挿入します。 これらのコメント行は、次の有効なソース・ステートメントの直前で印刷され、指定されたグループ内部で影響を受ける基本項目を識別します。

GIVING 句

GIVING という語の後にある ID により参照されるデータ項目は、算術演算の計算結果に設定されます。

この ID は、それ自体は計算に関与しないため、数字編集項目とすることができます。

GIVING 句 - 形式
 
           .-------------------.
           V                   |
>>-GIVING----ID-1--+---------+-+-------------------------------><
                   '-ROUNDED-'
 
 

ROUNDED 句

小数点位置合わせが行われた後、算術演算結果の小数部の桁数と、結果の ID の小数部に用意されている桁数とが比較されます。

結果の小数部のサイズが、それを記憶するために用意された桁数を超えているときは、ROUNDED が指定されていない限り切り捨てが行われます。 ROUNDED が指定されている場合は、結果の ID の最下位の桁は、超過した部分の最上位桁が 5 以上の場合は 1 つ増加します。正確に丸めることができる最大の桁数は 62 です。

結果の ID が右端に P (複数個) を持つ PICTURE 文節によって記述されており、また計算結果が指定された整数桁数を超える場合、 ストレージが割り振られている最右端の整数桁に対して、丸めまたは切り捨てが行われます。

+----------------------------------IBM 拡張----------------------------------+

浮動小数点算術演算では、ROUNDED 句はどのような影響も与えません。 浮動小数点算術演算の結果は常に 丸められます。 浮動小数点演算式の詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」を参照してください。

+------------------------------End of IBM 拡張-------------------------------+

SIZE ERROR 句
SIZE ERROR 句 - 形式
 
>>-+----+--SIZE ERROR--命令ステートメント-1--------------------><
   '-ON-'
 
 

サイズ・エラー条件は、次の 3 つの状況で起こる可能性があります。

サイズ・エラー条件は最終結果に適用され、中間結果には適用されません。

結果の ID が USAGE IS BINARY で定義される場合、それに収容できる最大値は、関連した 10 進数の PICTURE 文字ストリングで暗黙に指定される最大値です。

ROUNDED 句が指定された場合、サイズ・エラー検査の前に丸めが行われま す。

サイズ・エラーが起こった場合、プログラムの次の処置は、ON SIZE ERROR 句が指定されているかどうかによって異なります。

ON SIZE ERROR 句が指定されているときにサイズ・エラー条件が起こると、サイズ・エラーの影響を受ける結果の ID の値はそのまま変わりません。 すなわち、誤った結果が受け入れ ID の中に入れられることはありません。 その他の結果の ID の値は、それらの ID に関してサイズ・エラーが起こっていなければ影響を受けることはありません。 算術演算の実行完了後、ON SIZE ERROR 句の中の命令ステートメントが実行されます。 ON SIZE ERROR 句に指定された命令ステートメントの完了時に明示的な制御の転送が実行されない場合、 制御は算術ステートメントの最後に渡され、NOT ON SIZE ERROR 句が指定されていてもそれは無視されます。

ON SIZE ERROR 句が指定されておらず、算術ステートメントで指定した算術演算の実行後にサイズ・エラー条件が存在する場合は、 その影響を受けた、結果の ID の値は未定義となります。 その他の結果の ID の値は、それらの ID に関してサイズ・エラーが起こっていなければ影響を受けることはありません。 算術演算の完了後、制御は算術ステートメントの最後に渡され、NOT ON SIZE ERROR 句が指定されていてもそれは無視されます。

ADD CORRESPONDING と SUBTRACT CORRESPONDING ステートメントの場合は、個々 の算術演算でサイズ・エラー条件が起こっても、それぞれの加算または減算のすべて が完了するまで、ON SIZE ERROR 命令ステートメントは実行されません。

NOT ON SIZE ERROR

NOT ON SIZE ERROR 句が指定されていて、算術演算の実行後にサイズ・エラー条件が存在しない場合、NOT ON SIZE ERROR 句が実行されます

ON SIZE ERROR 句と NOT ON SIZE ERROR 句の両方が指定され、実行される句の中のステートメントに明示的な制御の転送が入っていないとき、 必要ならば、暗黙の制御の転送が、算術ステートメントの終わりの句の実行後に行われます。

オーバーラップするオペランド

ステートメントでの項目のやり取りが記憶域の一部または全部を共用していながら、それらが同一のデータ記述項目で定義されていない場合には、 そのようなステートメントの実行の結果は予測できません。 さらに、項目のやり取りが同一のデータ記述項目により定義されているステートメントの中に、結果が予測不可能となるものがあります。 これらの例は、前述のステートメントに関連した一般規則で言及されています。

算術ステートメント

演算ステートメントは計算のために使用します。 個々の演算は、ADD、 SUBTRACT、MULTIPLY、および DIVIDE ステートメントによって指定されます。 これらの演算は、COMPUTE ステートメントを使って 1 つの式の中で記号によって組み合わせることができます。

算術ステートメントのオペランド

算術ステートメントの各オペランドのデータ記述は、同じでなくてもかまいません。 計算の間、コンパイラーは必要なデータ変換や小数点の位置合わせを行います。

関連情報

オペランドのサイズ

各オペランドの最大サイズは、10 進数で 18 桁です。

+----------------------------------IBM 拡張----------------------------------+

ゾーン 10 進数または内部 10 進オペランドの最大サイズは 10 進数で 63 桁です。

+------------------------------End of IBM 拡張-------------------------------+

各オペランドから、オペランドの合成での 10 進数の桁数を決定できます。 オペランドの合成は、小数点の位置にオペランドを合わせて、さらにそれらオペランドを重ね合わせた結果得られる仮想のデータ項目です。

たとえば、各項目がデータ部で次のように定義されているとします。

A  PICTURE 9(7)V9(5).
B  PICTURE 9(11)V99.
C  PICTURE 9(12)V9(3).

次のステートメントを実行すると、オペランドの合成は 17 桁の 10 進数になります。

ADD A B TO C

これは、次のような暗黙の記述を持っています。

Composite-of-Operands PICTURE 9(12)V9(5).

オペランドを合成したものが 18 桁以下であれば、実行時に有効数字が失われないように十分な桁が保たれます。

+----------------------------------IBM 拡張----------------------------------+

(デフォルト) コンパイラー・オプション *NOEXTEND または PROCESS ステートメント・オプション NOEXTEND が指定されている場合、 オペランドの合成は 10 進数で最大 30 桁までにできます。

算術計算モード・コンパイラー・オプション *EXTEND31 または PROCESS ステートメント・オプション EXTEND31 が指定されている場合、 オペランドの合成は 10 進数で最大 31 桁まで可能です。

算術計算モード・コンパイラー・オプション *EXTEND63 または PROCESS ステートメント・オ プション EXTEND63 が指定されている場合、オペランドの合成は 10 進数で 最大 63 桁まで可能です。

注:
オペランドの合成が指定された最大値を超えると、実行中に有効数字が失われる場合があります。

+------------------------------End of IBM 拡張-------------------------------+

以下の表は、算術ステートメント内でオペランドの合成に使用できる 10 進数の最大桁数を示しています。

コンパイラー・オプション / 処理ステートメント 合成の最大長 (10 進数)
*NOEXTEND/NOEXTEND

18

+----------------------------------IBM 拡張----------------------------------+

30

+------------------------------End of IBM 拡張-------------------------------+


*EXTEND31/EXTEND31

18

+----------------------------------IBM 拡張----------------------------------+

31

+------------------------------End of IBM 拡張-------------------------------+


*EXTEND63/EXTEND63

+----------------------------------IBM 拡張----------------------------------+

63

+------------------------------End of IBM 拡張-------------------------------+

以下のリストには、算術ステートメントにおけるオペランドの合成の決め方が示されています。

ステートメント
オペランドの合成の決め方

ADD
与えられたステートメントの中のすべてのオペランド (GIVING という語の後に続くものは除く) を重ね合わせることによって決める。

COMPUTE
制約は適用されない。

DIVIDE
REMAINDER データ項目以外のすべての受け入れデータ項目を重ね合わせることによって決める。

MULTIPLY
すべての受け入れデータ項目を重ね合わせることによって決める。

SUBTRACT
与えられたステートメントの中のすべてのオペランド (GIVING という語の後に続くものは除く) を重ね合わせることによって決める。

どの算術ステートメントの場合にも、データを定義する際には、所要の精度の最終結果が得られるよう、十分な桁数と小数部分を指定することが重要です。 演算の精度の詳細については 付録 B, 中間結果と算術精度を参照してください。

複数の結果

1 つの算術ステートメントが複数の結果を持つとき、実行は概念的に次のように進められます。

たとえば、次のステートメントを実行するとします。

ADD A, B, C, TO C, D(C), E.

これは、次の一連のステートメントを実行するのと同じです。

ADD A, B, C GIVING TEMP.
ADD TEMP TO C.
ADD TEMP TO D(C).
ADD TEMP TO E.

上の例では、TEMP はコンパイラーによって与えられる一時的な結果フィールドです。 D(C) との加算が行われるとき、添え字 C に C の新しい値が入ります。

注:
算術ステートメントの実行中に生成される中間結果はシステム特有のものであり、プログラムの可搬性に影響します。 算術ステートメントとして COMPUTE の代わりに ADD、SUBTRACT、MULTIPLY、および DIVIDE を独立して使用すれば、 不整合な結果が生じる危険性を少なくすることができます。

データ操作ステートメント

COBOL ステートメント ACCEPT、INITIALIZE、INSPECT、MOVE、READ、 RELEASE、RETURN、REWRITE、SET、STRING、UNSTRING、および WRITE は、データ の移動または検査を行います。

+----------------------------------IBM 拡張----------------------------------+

XML PARSE、XML GENERATE。

+------------------------------End of IBM 拡張-------------------------------+

入出力ステートメント

COBOL 入出力ステートメントは、外部メディアに保管されているファイルへ (または、ファイルから) データを転送し、 また入出力装置から得られる (または入出力装置へ送られる) 少量のデータを制御します。

COBOL では、プログラムで使用できるファイル・データの単位はレコードなので、ユーザーはそのようなレコードに対してだけ関心をもてばよいことになります。 バッファーや内部記憶装置へのデータの移動、妥当性検査、エラー訂正 (可能な場合)、ブロック化と非ブロック化、ボリューム切り替え手順などの処理は、自動的に行われます。

環境部とデータ部でファイルがどのように記述されているかによって、手続き部で使用できる入出力ステートメントが決まります。

ファイル構成サポートの要約については 付録 F, ファイル構造サポートの要約およびファイル状況キーの値を参照してください。

次の節の説明では、ボリュームおよびリールという用語を使用します。 ボリュームとは、ユニット・レコード装置以外のすべての入出力装置を指します。 リールは、テープ装置だけに適用されます。 順次アクセス・モードでの直接アクセス装置の取り扱い方法は、テープ装置の取り扱い方法と論理的には同じです。

関連情報

共通の処理機能

共通の処理機能の中には、複数の入出力ステートメントに適用されるものがいくつかあります。 共通の処理機能は次のとおりです。

状況キー

FILE STATUS 文節が FILE-CONTROL 項目に指定されている場合、そのファイルに対する要求の実行時に、 指定した状況キー (FILE STATUS 文節で指名した 2 文字のデータ項目) の中に値が入れられます。 入れられる値はその要求の状況を示すものです。 値が状況キーに入れられた後で、その要求に関連のある EXCEPTION/ERROR 宣言または INVALID KEY/AT END 句が実行されます。

状況キーの最初の文字は状況キー 1 (上位桁)、また 2 番目の文字は状況キー 2 (下位桁) として知られています。 考えられる値の組み合わせとその意味は 表 49 に示されています。

INVALID KEY 条件

INVALID KEY 条件は、START、READ、WRITE、 REWRITE、または DELETE ステートメントの実行中に発生することがあります。

(条件の発生理由の詳細は 手続き部のステートメントを参照してください。) 無効キー条件が発生すると、その条件を引き起こした入出力ステートメントは正常に実行されません。 無効キー条件が入出力操作の後に存在している場合、以下の処置がとられます。

  1. 該当するファイル状況文節 (該当する USE プロシージャーではない) が存在している場合は、ファイル状況は変更され、制御がプログラムに戻されます。
  2. INVALID KEY 句が指定されている場合には、その句の命令ステートメントに制御が渡されます。
  3. ファイルに明示または暗黙の EXCEPTION/ERROR プロシージャーが指定されている場合は、それが実行されます。 そのようなプロシージャーが指定されていない場合には、結果は予測できません。
  4. ファイル状況文節、USE プロシージャー、またはエラー処理の INVALID KEY 句が存在しないときは、 実行時メッセージが出されて、プログラムを終了させるかプログラムに戻るかのオプションがユーザーに与えられます。

入出力操作の後に無効キー条件が存在しない場合、指定された INVALID KEY 句は無視され、次の処置がとられます。

  1. 無効キー条件ではない例外条件が存在する場合、制御は、USE AFTER EXCEPTION プロシージャーが実行された後に、USE ステートメントの規則に従って転送されます。
  2. 例外条件が存在しない場合には、NOT INVALID KEY 句に指定される入出力ステートメントまたは命令ステートメントの終わりにこれらが指定されれば、 制御が転送されます。

エラー処理および INVALID KEY 句の役割の詳細については、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」の例外処理とエラー処理に関する章を参照してください。

INTO/FROM ID 句

この句は READ、RETURN、RELEASE、REWRITE、および WRITE ステートメントに有効です。 指定する ID は、 作業用ストレージ・セクション、ローカル・ストレージ・セクション、 またはリンケージ・セクションの項目の名前、あるいは以前にオープンした他のファイル のレコード記述の名前でなければなりません。レコード名と ID は、同じ記憶域を参照してはなりません。

INTO/FROM ID 句 - 形式
 
>>-+-+-READ---+--ファイル名-1--+--------+--+------------+-+----><
   | '-RETURN-'                '-RECORD-'  '-INTO--ID-1-' |
   '-+-RELEASE-+--レコード名-1--+------------+------------'
     +-REWRITE-+                '-FROM--ID-1-'
     '-WRITE---'
 
 

INTO 句を指定して READ または RETURN ステートメントを実行すると、その結果は、次に示す規則が (この順序どおりに) 適用されたのと同じことになります。

  1. INTO 句を指定していない同じ READ または RETURN ステートメントを実行する。
  2. CORRESPONDING 句が指定されていない MOVE ステートメントの規則に従って、現在のレコードをレコード域から ID-1 に移動させる。 現在のレコードの大きさは、RECORD 文節内に指定されている規則によって決定されます。 ファイル記述記入項目に RECORD IS VARYING 文節が含まれている場合には、暗黙の MOVE はグループの移動となります。 READ または RETURN ステートメントが正常に実行されなかった場合には、 暗黙の MOVE ステートメントは実行されません。レコードが読み取られるか戻された後で、かつそのレコードがデータ項目に転送される直前に、 ID-1 と関連する添え字付け、または参照変更の値が求められます。 レコードは、レコード域と ID-1 の両方で使用できます。

FROM 句が指定されている RELEASE、REWRITE、または WRITE ステートメントが実行されると、 その結果は、次に示すステートメントが (この順序どおりに) 実行されたのと同じことになります。

  1. 以下のステートメントを
    MOVE identifier-1 TO record-name-1
    

    MOVE ステートメントに指定された規則に従って実行する。

  2. FROM 句が指定されていない同じ RELEASE、REWRITE、または WRITE ステートメントを実行する。

RELEASE、REWRITE または WRITE ステートメントの実行が完了すると、ID-1 内の情報が使用可能になりますが、 SAME RECORD AREA 文節として指定されているものを除いて、レコード名-1 内の情報は使用することはできません。

ファイル位置標識

ファイル位置標識は概念的なエンティティーであり、本書では、入出力操作における特定の順序の中で所定のファイル内でアクセスされる次のレコードを正確に把握しやすくするために使用しています。

ファイル位置標識の概念は、出力または拡張モードでオープンするファイルには使用できません。 ファイル位置標識の設定は、次のような OPEN、READ、RETURN、ROLLBACK および START ステートメントの影響だけを受けます。

ファイル位置標識の概念は、ランダムのアクセス・モードのファイルまたは TRANSACTION ファイルには使用できません。

+----------------------------------IBM 拡張----------------------------------+

DB-FORMAT-NAME 特殊レジスター

入出力ステートメントの実行後、FORMATFILE または DATABASE ファイルについては、DB-FORMAT-NAME 特殊レジスターが次の規則に従って修正されます。

英数字の引数が認められている場合はいつでも、DB-FORMAT-NAME 特殊レジスターを関数内で指定できます。

+------------------------------End of IBM 拡張-------------------------------+

プロシージャー分岐ステートメント

手続き部のステートメント、文、および段落は順番に実行されますが、(以下に列挙した) プロシージャー分岐ステートメントが使用されている場合は例外です。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]