web-dev-qa-db-ja.com

COBOLデータ型

COBOLデータ型について混乱しています。多くのインタビューのように、COMP-3とCOMPの違いを説明するように求められます...正確な違いは何ですか? COBOLでの使用モードの意味は何ですか、それはデータ型とどのように関連していますか?

よろしくお願いします、Manasi Kulkarni

16
Manasi

COBOLのUSAGEは、データ項目の使用方法を説明しています。 USAGEの例は次のとおりです。

  • 表示。端末またはレポートに印刷される可能性のあるアイテムを識別します。これは、数値である場合とそうでない場合があります(テキスト値など)。 DISPLAYアイテムの説明は、PICture句で指定されます。例:PIC 9(5) USAGE DISPLAYは、表示(印刷)できる5桁の番号を示します。しばしばUSAGE DISPLAYが欠落している場合は暗黙的に含まれるため、省略されます。
  • INDEX。これは、テーブル(OCCURS)へのインデックスとして使用されるアイテムを識別します。
  • COMPsomethingは、データ項目が算術演算で使用されることを示します(つまり、それはいくつかのタイプの数です)。

数値アイテムにはさまざまなタイプがあります。最も一般的に使用される2つの数値データ型は次のとおりです。

  • COMPUTATIONALまたはCOMP。これはBINARYと同等です
  • COMPUTATIONAL-3またはCOMP-3。これはPACKED-DECIMALと同等です

COMP(BINARY)データ項目は、通常、整数値を表すデータ項目に対して計算を実行する最も効率的な方法です。

COMP PACKED-DECIMAL)データ項目は、固定数の小数点を維持するため、COBOLで使用されます。すべての計算は、規定された数の小数点を持つ結果を導きます。これは、会計タイプの操作で特に役立ちます。浮動小数点数は、小数点変数の後の桁数になります(たとえば、小数点は「浮動」することができます)。これは、通常、財務操作が表される方法ではありません。

IBM Enterprise COBOLの計算項目の完全なリストを見つけることができます---(here

多くのプログラマーがCOBOLを使い始めたときに抱える問題の1つは、COMPアイテムは計算に最適であるが、MOVEステートメントによってDISPLAYableアイテムに変換されるまで表示(印刷)できないことを理解することです。 COMPアイテムをレポートまたは画面に移動すると、うまく表示されません。最初にDISPLAYアイテムに移動する必要があります。

もう少し調べておきたいもう1つのことは、COBOLで変数を定義するときのPICtureとUSAGEの関係です。これは、リムリック大学の非常に優れた入門 COBOLチュートリアル へのリンクです。

17
NealB

COBOLには、実際には数値と文字列の2つのデータ型しかありません。

COBOLレコードの各フィールドのレイアウトは、PICTURE(通常はPICと省略)句によって正確に指定されます。最も一般的なものは次のとおりです。

  • 文字列の場合は_PIC X_。 PIC X(100)は100バイトの文字列を意味します。
  • 数値の場合は_PIC 9_、オプションでS(符号)またはV(暗黙の小数点)を使用。たとえば、PIC S9(7)V99は、暗黙の小数点の左側に7桁、右側に2桁の符号付き数値を意味します。

数値フィールドには、ストレージを最適化するためにUSAGE句を含めることができます。最も一般的なUSAGEsは、DISPLAYCOMP、および_COMP-3_です。

DISPLAYは、各桁を文字として格納します。たとえば、PIC 9(4) VALUE 123は、数値を文字列「0123」であるかのように格納します。そしてPIC 9(4)V99 VALUE 123.45は "012345"として保存します。小数点は実際には保存されないことに注意してください。

これは、各桁を表すのに8ビットを必要とするという点で非効率的な形式です。ただし、最後のバイトの半分を使用して符号を格納することにより、符号付き数値の「最適化」が行われます。通常、EBCDICの数字はすべてFの上位ニブルを持っているため、0123はF0 F1 F2 F3です。しかし、-0123はF0 F1 F2 D;です。 Dは負を示します。 Cは正を意味し、Fは符号なし(つまり、正)を意味します。 (類似のフォーマットがCOBOLのASCIIバージョンで使用されていますが、標準化されていません。)

_COMP-3_は、末尾がニブルである2進化10進数です。 PIC 9(3) COMP-3 VALUE 123は2バイト12 3Fになります。

COMPまたはBINARYは、Cのshortint、またはlongと同様に、ネイティブのバイナリ形式です。

16
dan04

使用するデータ型の決定に関しては、非常に複雑にすることができます-しかし-簡単な一連のガイドラインは次のとおりです。

[〜#〜] display [〜#〜]およびEdited Zone Decimalは、レポートまたはSYSOUTで数値を表示するためにのみ使用する必要があります。 COMPおよびCOMP-3フィールドをDISPLAY/Editedフィールドに移動してから、レポートまたはsysoutに配置してください。

[〜#〜] comp [〜#〜]-integersの計算速度が最も速い

COMP-(PACKED Decimal)-decimal positionを維持する必要がある場合に使用します。

COMPおよびCOMP-3フィールドは、計算で一緒に使用できます。コンパイラーは、どのフィールドタイプが(カバーの下で)単一の一般的な数値データタイプに変換されるかを決定します-ルールベース

3
user396088

他の回答が示唆するように、COMPはビッグエンディアンバイナリを意味します。 COMP-3はパック10進数です。つまり、1つの10進数が各ニブルにマッピングされます。

前の返答が正確さに関する問題を正しかったかどうかはわかりませんが。

PIC S9(9)V9(9)COMPおよびPIC S9(9)V9(9)COMP-3

精度はまったく同じです。これはANSI85規格の一部です。同じ結果が確実にexactlyになるようにCOMPのバイナリ表現に適切な変換が配置されていることを確認するのは、コンパイラとランタイムの仕事です使用方法がディスプレイまたはCOMP-3の場合と同様に達成されます。

IBMメインフレームコンピューターは、ハードウェアに10進数の計算をパックしています。 nの2乗nは数値の長さなので、10進数から2進数への変換は非常に便利です。これは、COMP-3がメインフレームの中で最も高速なフォーマットであることが多いですが、分散システム上にある可能性は低いことを意味します。ただし、これは常にそうであるとは限りません。たとえば、Micro FocusネイティブCOBOLソリューションは、非常に大きな10進数精度(> 18桁)の場合、COMP-5よりもCOMP-3の方が高速になる傾向がありますが、それ以外の場合は逆になります。 Micro FocusのManaged COBOLシステムは、ほとんどの場合COMPで最も高速です(実際には、COMP-5が最高です。これはCOMPに似ていますが、ビッグエンディアンのメモリレイアウトを強制するのではなく、ハードウェアエンディアンを備えています)。

最後に、中間値と一般的な数学の場合、binary-longとbinary-doubleの新しいデータ定義の方が適切な選択であることをお勧めします。これにより、コンパイラーが格納および最適化の方法を決定できるようになります。

分散およびマネージCOBOLでのCOBOLの詳細については、次の記事を確認してください。 http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4 およびFacebookでcobolを自由に調べてください:)

2
alex turner