COBOL2002 使用の手引 手引編


27.5.2 入出力機能

Unicode機能では,順編成ファイル,相対編成ファイル,および索引編成ファイルについては,文字コードを意識することなく,入出力できます。しかし,テキスト編成ファイルおよびCSV編成ファイルは,ほかのアプリケーションで参照可能とするため,文字コードをUTF-8に統一します。

〈この項の構成〉

(1) テキスト編成ファイル

テキスト編成ファイルでは,UTF-8で作成されたファイルの入出力ができます。この機能の規則を次に示します。

(a) テキスト編成ファイルのUnicodeシグニチャ出力の切り替え機能

新規ファイル作成時にUnicodeシグニチャを出力しないようにする場合,実行時環境変数CBLD_ファイル名にTEXTSUPPRESSBOMを設定するか,または実行時環境変数CBLTEXTSUPPRESSBOMを設定します。

なお,この機能はテキスト編成ファイル作成時だけ有効です。

ファイル単位に指定する方法
形式
CBLD_ファイル名={TEXTSUPPRESSBOM|NOTEXTSUPPRESSBOM}
機能
  • この環境変数にTEXTSUPPRESSBOMが指定された場合,実行単位中の任意の新規作成のテキスト編成ファイルに対してUnicodeシグニチャを出力しません。

  • この環境変数にNOTEXTSUPPRESSBOMが指定された場合,テキスト編成ファイルのUnicodeシグニチャ出力の切り替え機能は無効となります。

実行単位中のすべてのファイルに指定する方法
形式
CBLTEXTSUPPRESSBOM=YES
機能
  • この環境変数にYESが指定された場合,実行単位中のすべての新規作成のテキスト編成ファイルに対してUnicodeシグニチャを出力しません。

  • この環境変数にYESの指定がないか,またはYES以外が指定された場合,テキスト編成ファイルのUnicodeシグニチャ出力の切り替え機能は無効となります。

規則

ファイル単位に指定する方法と実行単位中のすべてのファイルに指定する方法を併用した場合,ファイル単位に指定する方法が優先されます。

環境変数CBLTEXTSUPPRESSBOMと環境変数CBLD_ファイル名の指定の組み合わせによるUnicodeシグニチャの出力状態を次の表に示します。

表27‒14 環境変数CBLTEXTSUPPRESSBOMと環境変数CBLD_ファイル名の指定の組み合わせによるUnicodeシグニチャの出力状態

CBLTEXTSUPPRESSBOM

CBLD_ファイル名

TEXTSUPPRESSBOM

NOTEXTSUPPRESSBOM

指定なし

YES

出力しない

出力する

出力しない

環境変数指定なし,

または

YES以外

出力しない

出力する

出力する

(2) CSV編成ファイル

CSV編成ファイルではUTF-8で作成されたファイルの入出力ができます。この機能の規則を次に示します。

(a) CSV編成ファイルの入出力

CSV編成ファイルを入力する場合,対象ファイルはUTF-8で作成してください。対象ファイルのレコード記述項に用途がNATIONALの項目が定義されている場合,入出力時にUTF-8/UTF-16の相互変換をします。そのため,CSV編成ファイルにUTF-8以外の文字コードが含まれる場合,動作は保証しません。CSV編成ファイルの入出力について次に示します。

  • 入力したデータに対応する項目の用途がNATIONALの場合,実行時環境変数CBLUNIENDIANの指定に従い,UTF-8からUTF-16に自動変換し,データ項目に格納します。

  • 出力するレコード領域に用途がNATIONALの項目を含む場合,該当する項目の文字コードをUTF-16からUTF-8に自動変換することで,CSV編成ファイルの文字コードをUTF-8に統一します。

CSV編成ファイルでは,用途がNATIONALの項目の文字コードをUTF-16からUTF-8に変換することで,プログラム上のサイズと実際のレコードサイズが異なります。

(例1)
       IDENTIFICATION DIVISION.
             :
       DATA DIVISION.
       FILE SECTION.
       FD FILE01.
       01 REC01 PIC X(5) USAGE DISPLAY.
       PROCEDURE DIVISION.
             :
           MOVE 'ABCDE' TO REC01.
           WRITE REC01.

この場合,データ項目「REC01」は用途がDISPLAYなので,文字コードはUTF-8であり,実際にREC01に格納されたデータとファイルに書き出されたデータサイズは等しくなります。

(例2)
       IDENTIFICATION DIVISION.
             :
       DATA DIVISION.
       FILE SECTION.
       FD FILE02.
       01 REC02 PIC N(5) USAGE NATIONAL.
       PROCEDURE DIVISION.
             :
           MOVE NC'あいうえお' TO REC02.
           WRITE REC02.

この場合,データ項目「REC02」は用途がNATIONALであり,文字コードはUTF-16なので,ファイルへ書き出すときにUTF-8に自動変換します。UTF-16(2バイトの固定)からUTF-8(可変。日本語は3バイト)に変換することで,データサイズは大きくなります。

(例3)
       IDENTIFICATION DIVISION.
             :
       DATA DIVISION.
       FILE SECTION.
       FD FILE02.
       01 REC02 PIC N(5) USAGE NATIONAL.
       PROCEDURE DIVISION.
             :
           READ  FILE02.

例2で出力したデータを入力するとき,入力データはUTF-8で15バイトですが,入力時にUTF-16に変換することで10バイトとなり,データサイズは小さくなります。

(b) Unicodeシグニチャ

CSV編成ファイルは,Unicodeシグニチャを含まないでください。CSV編成ファイルにUnicodeシグニチャが含まれる場合,データとして扱います。

(3) 順編成ファイル,相対編成ファイル,および索引編成ファイルを使用した入出力

順編成ファイル,相対編成ファイル,および索引編成ファイルを使用した入出力では,用途がNATIONALの項目についてUTF-16からUTF-8への自動変換はしません。この機能の規則を次に示します。

(4) HiRDBによる索引編成ファイル使用時の,HiRDBのクライアント環境変数PDCLTCNVMODEの指定

HiRDBによる索引編成ファイルを使用している場合,HiRDBのクライアント環境変数PDCLTCNVMODEには,NOUSE(デフォルト値)を指定してください。ほかの値を指定した場合,不当なコード変換によって入出力エラーになることがあります。

(5) ACCEPT/DISPLAY文による入出力

(a) ACCEPT文による入力

ACCEPT文で外部から入力したデータは,文字コードを変換しません。AIXの場合,外部から入力することで,用途がDISPLAY/NATIONALの項目にUTF-8/UTF-16以外の文字データが格納されるときは,コード変換ライブラリを使用して入力データをUTF-8/UTF-16へ変換してください。なお,Linuxの場合,ACCEPT文で外部から入力したデータを用途がNATIONALの項目に格納できません。格納する場合の動作は保証しません。

(b) DISPLAY文による出力

DISPLAY文で用途がDISPLAY/NATIONALの項目の内容を画面上に出力するとき,文字コードは変換しません。出力する内容がUnicodeの場合,文字情報を正しく出力するためにはコード変換ライブラリを使用し文字コードを変換してください。

ただし,Linuxの場合,UTF-8ロケールでの動作となるため,出力する内容がUTF-8のときは文字コードの変換は必要ありません。

(c) 注意事項

DISPLAY文でファイルに出力する場合,指定した項目の用途にかかわらず,改行コードはX'0A'となります。

(6) 画面入出力機能(AIXで有効)

日本語,半角かたかななど,Unicodeの多バイト文字をCOBOLプログラムから直接画面表示はできません。

(7) プリンタへのアクセス(AIX(32)で有効)

日本語,半角かたかななど,Unicodeの多バイト文字をCOBOLプログラムから直接印刷はできません。