COBOLの扱うデータの特徴とメンテナンス
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/17 23:55 UTC 版)
「COBOL」の記事における「COBOLの扱うデータの特徴とメンテナンス」の解説
COBOLの代表的な変数型(項類)に、次のものがある。 数字項目 (numeric item) - 例:99999 または 9(5) 英数字項目 (alphanumeric item) - 例:XXXXX または X(5) 英字項目 (alphabetic item) - 例:AAAAA または A(5) 数字編集項目 (numeric edited item) - 例:ZZZ,ZZ9 英数字編集項目 (alphanumeric edited item) - 例:AXX/XX/XX COBOLでは固定長のレコード(繰り返しデータ単位)の中に固定長でデータ項目を含むという使い方が多い。たとえば、 00076543SHOUYURAMEN 2012101300076544SHIORAMEN 20111231 などである。データには包含関係の階層があり、領域再定義機能により同じメモリ領域を何通りかの構成で解釈できる。 他の多くの言語(VB、C、Javaなど)では、改行までが繰り返しデータ単位で、その中の項目は可変長でコンマやタブなどの区切り記号で区切るという使い方が多い。たとえばCSV形式 76543,SHOUYURAMEN,2012101376544,SHIORAMEN,20111231 がある。最近のCOBOLコンパイラには、CSV形式の入出力をサポートするものもある。 COBOLでは基本項目を並べて集団項目を作る。レベル番号を用いて階層構造を作る。OCCURS句により多次元配列を作る。これらによる固定長や可変長の「レコード」(C言語などの構造体に相当)のレイアウトを定義する。なお、「レコード」という型はCOBOLによって初めて導入された概念である。 COBOLの階層的データの包含関係は、階層の深さを表すレベル番号"01"から"49"を各データ記述に付けることで記述される。 こうした階層や領域再定義などのデータ構造をもつファイルやレコードの定義と処理は、COBOLの得意とするところで、Java言語および従来のJavaのクラスライブラリによってはなかなかうまく再現できない。 COBOLでは、何百兆円という大きな金額の計算や、小数点以下何桁まで正確に複利計算をしても1円の誤差も出ない正確な小数計算が得意である。固定小数点数方式で整数とスケール(桁)を扱える数値項目は通常最大18桁(中間結果はそれ以上)あり、特に内部10進項目などの2進化10進数を用いれば、メモリを節約しつつ性能も確保できる。メインフレームではこれをサポートする専用のCPU命令まで設けられ、高速化が図られた。 このアプローチは、10進2進変換に伴う誤差が避けられない浮動小数点数によって実数を近似値で表現しようとする他の言語の発想とは対照的である。FORTRANには浮動小数点数はあっても内部10進項目などはなかった。Javaでは任意桁の整数、小数を扱えるBigInteger、BigDecimalというクラスが提供されているが、文字配列で処理しているために金額計算、利息計算をCOBOLほど少ないCPUステップでは行えていない。 COBOLでは無名の変数等として"FILLER"という名称を記述することができる。無名項目の"FILLER"は、COBOLにおける変数等の領域の定義は固定長となるため、そのような固定長領域内での予備的な領域の確保という意味合いも有している。たとえば 000100 01 PRODUCT-REC.000200 03 PRODUCT-NO PIC 9(8).000300 03 ...000400 03 PRODUCT-NAME PIC X(20).000500 03 FILLER PIC X(500). で予備項目500バイトを含む製品レコードPRODUCT-RECを定義して他のシステムとデータを交換しはじめる。年月が経ってこのレコードに追加項目AD-START-DATE(広告開始日)が発生したら、FILLERを削ってその新項目に宛てることで、授受データのレコード長を変更しなくて済む。 000100 01 PRODUCT-REC.000200 03 PRODUCT-NO PIC 9(8).000300 03 ...000400 03 PRODUCT-NAME PIC X(20).000500 03 AD-START-DATE PIC 9(8).000600 03 FILLER PIC X(492). FILLERによって、固定長レコードファイルの運用が円滑になった。ただ、この例で500バイトを使い切れば、やはりレコード長の変更が必要になる。だからといってむやみに長いFILLERを入れると、容量的な効率低下を招くのでバランスが必要である。 製品が多くなってPRODUCT-NO(製品番号)を8桁から12桁に拡張しようとすると、後続の項目群の開始番地が順繰りにずれてしまうので変更の影響が大きい。 COBOLが扱うデータベースの領域定義も、多くの場合同様に固定長の項目からなるレコードという考えで行われてきた。 システムが実際に入力したデータがプログラムが用意した桁数を1桁でも超えたとき、SIZE ERRORとしてエラー処理を行うのが普通である。オプションにより上を切り落として続行も可能。桁数が不足したときにデータのミスでなければ、プログラムとそのデータを授受するシステムのプログラムで一斉に桁数を増やす修正をしなければならない。データの変換も必要となる。 このように桁数やバイト数の変更は大変なため、COBOLプログラマやSEは常に桁数やバイト数の設定や変更を意識し、プログラムの使用されるのが何十年でもその間になるべく桁溢れが起こらないように目を配って作業している。 以上のような特徴は、固定長レコードやその中の文字列や数値を容易にかつ厳密に扱えるというCOBOLの大きな長所にともなう、保守、機能追加していく上での大きな短所である。
※この「COBOLの扱うデータの特徴とメンテナンス」の解説は、「COBOL」の解説の一部です。
「COBOLの扱うデータの特徴とメンテナンス」を含む「COBOL」の記事については、「COBOL」の概要を参照ください。
- COBOLの扱うデータの特徴とメンテナンスのページへのリンク