# COBOLの考慮事項

特定のCOBOL表記を使用してCOBOLファイルを使用することは可能ですが、フラット表記で処理することも可能です。このセクションでは、フラット表記を使用してCOBOLファイルを処理する時に考慮すべき要因について説明します。

![\[COBOL Import Properties\] (COBOLインポートのプロパティ)ダイアログボックス。](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/repFlatCobol.jpg)

COBOLインポーターのプロパティは以下のとおりです。

* [Character Encoding] (文字エンコーディング) - 処理対象のデータに文字エンコーディングを指定します。IBM COBOLでは、通常CP037またはIBM037などのEBCDICエンコーディングになります。その他の環境では、より標準的なASCII (UTF-8)エンコーディングになる可能性が高くなります。詳細は、[文字エンコーディング](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/8.0/character-encoding)をご覧ください。

* [Copybook format] (Copybook形式) - Copybookのソースの形式を指定します。シーケンス番号が存在しない場合、[Free form] (自由形式)オプションを使用してください。シーケンス番号が存在する場合、カラム仕様を使って実際のソースが開始する場所を指定します(シーケンス番号と継続文字の後)。標準カラム値はデフォルトです。

* 各レコードは改行文字で区切られていますか? - 各レコードがCOBOL定義で指定されていない改行によって区切られている場合(比較的まれなケース)、これを指定します。つまり、データは、それぞれが改行文字によって区切られた一連の固定長レコードの組み合わせです。これを使用する場合、生成されたストラクチャー内のRecordエレメントには改行がエレメントターミネーターとして含まれます。必要に応じて、これを別の文字のシーケンスに変更できます。

* メインストラクチャーに加えて参照ストラクチャーを作成しますか? -このチェックボックスをオンにすると、参照ストラクチャーという名の追加のストラクチャーが作成されます。メインストラクチャーは参照ストラクチャーから継承します。Copybook全体用の参照ストラクチャーが1つあり、その他にREDEFINES用の参照ストラクチャーがあります(choice)。REDEFINESでは、各代替項目が個別の参照ストラクチャーとなります。

COBOLインポーターは、インポートされるCopybookの各トップレベルのレコード定義に対してストラクチャーを生成します。

次の表は、基本的なCOBOLデータアイテムがUSAGE句やPICTURE句に基づいてどのようにデータ型にマッピングされるかを示したものです。単純化するために、この表では次の略語を使用します。

* BINARY - COBOL USAGE BINARY、COMP、COMP-4、またはCOMP-5を持つアイテム。

* PACKED-DECIMAL - COBOL USAGE COMP-3またはPACKED-DECIMALを持つアイテム。

* ZONED-DECIMAL - PICTURE句が9、V、S、またはP記号のみを含むCOBOL USAGE DISPLAYを持つアイテム。

| データ項目 | データ型 | データ形式 |
| --- | --- | --- |
| BINARY、符号付き、totalDigits &lt; 5 | Short (16) | 該当しません。 |
| BINARY、符号なし、totalDigits &lt; 5 | 符号なしShort (16) | 該当しません。 |
| BINARY、符号付き、totalDigits &lt; 10 | 整数(32) | 該当しません。 |
| BINARY、符号なし、totalDigits &lt; 10 | 符号なし整数(32) | 該当しません。 |
| BINARY、totalDigits &lt; 19 | Long (64) | 該当しません。 |
| PACKED-DECIMAL、符号付き | Decimal | DF\_DEC\_PACKED\_SIGNED |
| PACKED-DECIMAL、符号なし | Decimal | DF\_DEC\_PACKED |
| COMP-1 | Float(32) | 該当しません。 |
| COMP-2 | 倍数(64) | 該当しません。 |
| ZONED-DECIMAL、符号付き、SIGN LEADING SEPARATE | Decimal | DF\_DEC\_ZONED\_LEADING\_SEP |
| ZONED-DECIMAL、符号付き、SIGN LEADING | Decimal | DF\_DEC\_ZONED\_LEADING |
| ZONED-DECIMAL、符号付き、SIGN TRAILING SEPARATE | Decimal | DF\_DEC\_ZONED\_TRAILING\_SEP |
| ZONED-DECIMAL、符号付き、SIGN TRAILING | Decimal | DF\_DEC\_ZONED |
| ZONED-DECIMAL、符号なし | Decimal | 該当しません。 |
| DISPLAY、BLANK WHEN ZERO | Decimal | DF\_DEC\_BWZ |
| DISPLAY、その他のPICTURE記号 | 文字列 | 該当しません。 |

COBOLインポーターは、次のCOBOL機能をサポートします。

* Numeric Scaling - PICTURE句の暗黙の小数点文字Vは、エレメントの小数位プロパティを使って実装されます。

* Level 88 - Level 88句はエレメントにValue (コード値など)のエレメントタイプを使ってサポートされます。Level 88句の名前は値エレメントの説明として含められます。

* OCCURS DEPENDING ON - エレメントの最小および最大出現回数を、指定された出現数の範囲内で設定します。DEPENDING ON部分を実装するには、FixedLoopを使います

* REDEFINES - REDEFINES句はChoiceのグループタイプを使って実装されます。出現するエレメントが依存する値を取るファンクションを含むエレメントの親エレメントのグループ型です。REDEFINES句はChoiceに設定されています。REDEFINES句を持つ各エレメントは選択のブランチです。これに関する制限については以下をご覧ください。

  IsPresent式を使って、入力の読み取り時に使用可能なREDEFINES (Choiceのメンバー)を決定するために使う条件を定義できます。デフォルトでは、定数IsPresent式が各Choiceメンバーに生成されます。最初のメンバーが値trueを取り、残りのメンバーが値falseを取ります。これにより、無条件で別のメンバーを選択する場合、変更が容易になります。

* REDEFINES Record Types - Choiceの各メンバーに対してREDEFINESを使ってレコードを再定義する際に(上記を参照)、最初のフィールドが単一の88レベル定数を持つ場合、区切り付きイニシエーターがフィールドに生成され、フィールドの長さが88レベル定数のサイズ(通常ゼロ)によって縮小されます。これにより、フラットリーダーおよびライターが、正しいレコードを提供するために、これらを自動的に取得または生成できます。

* Binary vs. Characterファンクションで、データのエンコーディングがすべて文字となるように指定されている場合、インポート時にレコードを区別する改行の検出がオプション(およびデフォルト)でストラクチャーに追加されます。表記のプロパティ内の改行文字がインポートするデータのタイプに適していることをご確認ください。デフォルトで、改行文字は行送り文字に設定されます。

次にCOBOL Copybookのインポートに関する一部の問題と制限事項を示します。

* Alignment or SYNCHRONIZED - SYNCHRONIZED値が検出された時に調整は行われません。特定のアーキテクチャーに必要なバイナリデータの調整も行われません。これらは、レコード内で最も近い32ビットの範囲と整列するよう調整する必要がある場合があります。ただし、これは使用されたコンパイラーとプラットフォームによって異なります。調整が必要な場合、適切なフィラーを追加して手動で実行する必要があります。

* Level 88 for Non-leaf Elements - Level 88の値は非リーフエレメントではサポートされません。警告が表示されますが、無視されます。

* REDEFINES Padding - REDEFINESに関与する任意のエレメントのサブツリーに追加されるパディングはありません。行区切りを持たない位置指定固定長レコードに対処する場合、処理が正しく行われるよう、適切なパディングが提供されていることを確認する必要があります(通常FILLER宣言が使用されます)。