COBOL2002 使用の手引 手引編


6.8.5 セルデータを数値として入出力する機能

〈この項の構成〉

(1) セルデータを数値として入出力する機能の概要

-NumCsvオプションを指定すると,外部10進項目,外部浮動小数点数字項目で定義されているセルに対して,データを数値として入出力できます。

この機能は,表計算プログラムのようなCOBOLとは数値データの表現形式が異なるプログラムと,COBOLプログラムとの間で数値データをやり取りする場合に使用します。例えば,次のような場合は,-NumCsvオプションを指定することで,表計算プログラムとCOBOLプログラムとで数値データをやり取りできます。

(例1)

次のようなデータを,WRITE文でCSV編成ファイルに出力する場合

データ定義

データ項目に格納されている値

-NumCsvオプション

ファイルへの出力結果

99v99

1.23

なし

0123

あり

01.23

-NumCsvオプションを指定すると小数点が出力されるため,表計算プログラムで正しい数値として入力できます。

(例2)

次のようなデータを,READ文でCSV編成ファイルから入力する場合

データ定義

ファイルから入力した値

-NumCsvオプション

データ項目への格納結果

9(9)

123

なし

123△△△△△△

あり

000000123

(凡例)

△:半角空白文字

-NumCsvオプションを指定すると数字項目に変換されるため,COBOLプログラムで数値として扱えます。

(2) データ変換の規則

-NumCsvオプションを指定した場合の,数字項目へのデータ変換規則を次に示します。

データ変換の一般規則
  • 特殊名段落のDECIMAL-POINT IS COMMA句の指定は有効です。ただし,小数点としてコンマ(,)を使用する場合は,その数値データをダブルコーテーション(")で囲む必要があります。ダブルコーテーションで囲まれていないコンマは,すべてセルの区切り文字とみなされます。

  • セルにデータを入出力するとき,次に示す文字が数値データとして有効です。

    表6‒5 CSV編成ファイルに数値データとして有効な文字の種類

    セルの属性

    入力時に有効な文字

    出力時に有効な文字

    外部10進項目

    • 09+-

    • 小数点

    • 右端,または左端にある空白文字(X'20')

    • 09+-

    外部浮動小数点数字項目

    • 09+-Ee

    • 小数点

    • 右端,または左端にある空白文字(X'20')

    • 符号位置にある空白文字(X'20')

    • 09+-Ee

    • 小数点

    • 空符号位置にある空白文字(X'20')

    注※

    外部浮動小数点数字項目の指数部,仮数部の符号をマイナス(-)で定義した場合,符号位置にある空白文字(X'20')は,有効な文字となります。

  • 外部10進項目,外部浮動小数点数字項目で定義したセルに,次のようなデータを入力した場合,実行時エラーになります。

    1. 「表6‒5 CSV編成ファイルに数値データとして有効な文字の種類」で示した「有効な文字」以外の文字が含まれるデータ

    2. 小数点が複数あるデータ

    3. 外部10進形式で,符号が複数ある,または符号の位置が不正なデータ

    4. 外部浮動小数点数字項目で,浮動小数点数字定数として正しくないデータ

     (ただし,指数部,仮数部の符号をマイナス(-)で定義した場合,データ中で符号を示す位置が空白文字(X'20')であってもよい)

入力時のデータ変換規則
  • 外部10進項目,外部浮動小数点数字項目で定義したセルでは,入力できるデータの長さは512バイトまでです。データの長さが512バイトを超える場合,それ以降のデータは切り捨てられます。切り捨てが起きた場合,FILE STATUS句を指定していると,入出力状態に04が返されます。また,2バイト文字の1バイト目でデータが切り捨てられる場合,その2バイト文字全体が入力されません。

  • 外部10進項目,外部浮動小数点数字項目で定義したセルに入力したデータの有効文字が22バイトを超える場合,それ以降のデータは切り捨てられます。切り捨てが起きた場合,FILE STATUS句を指定していると,入出力状態に04が返されます。

  • 外部10進項目で定義したセルでは,小数点位置を合わせて入力されます。その際,必要に応じて数字の左側や右側にゼロを補ったり,あふれたけたを切り捨てたりします。詳細は,マニュアル「COBOL2002 言語 標準仕様編」 「10.5.7 データ項目内でのデータのけた寄せ」を参照してください。

    また,このようなけた寄せが発生した場合,FILE STATUS句を指定していると,入出力状態に04が返されます。

  • 外部10進項目に符号の指定がある場合,SIGN句の指定に関係なく左端の符号だけが有効となります。

  • 外部浮動小数点数字項目で定義したセルには,外部10進形式,外部浮動小数点数字形式のどちらの形式のデータも,入力できます。ただし,入力データの中に"E"または"e"が含まれている場合,外部浮動小数点数字形式のデータとみなされます。

  • 外部10進項目,外部浮動小数点数字項目以外の属性を持つ項目には,通常の-NumCsvオプション指定なしの場合と同様にデータが入力されます。

  • 外部10進項目,外部浮動小数点数字項目で定義したセルに,次のようなデータを入力した場合,ゼロを入力したものとして扱われます。

    1.セル中に入力対象となるデータがない場合

    2.すべて空白文字のデータの場合

  • 入力データの右端,または左端にある空白は,読み込まれません。

出力時のデータ変換規則
  • 外部10進項目,外部浮動小数点数字項目に想定小数点が指定されている場合,想定小数点位置に出力される文字はDECIMAL-POINT IS COMMA句の指定に従います。

  • 外部浮動小数点数字項目に小数点が指定されている場合,小数点位置に出力される文字はDECIMAL-POINT IS COMMA句の指定に従います。

  • 外部10進項目に符号の指定がある場合,SIGN句の指定に関係なく左端に符号が出力されます。ただし,符号がプラス(+)の場合は出力されません。

注意事項
  • READ文が失敗した場合,レコード領域は不定になります。

  • 数字編集項目で定義したセルは,-NumCsvオプションを指定しても英数字項目属性でデータが入出力されます。

(3) 数値として入力するとき,不要な文字列を無視する機能

-NumCsvオプション指定時,セルデータ中に数値として無効な文字が含まれている場合,環境変数CBLCSVCHARにその文字を指定することで,文字を無視できます。この機能を使用すると,通貨記号などが付けられたデータを数値データとして読み込めます。

(例)

"\123","\456","\789"というCSV編成ファイルのデータを,-NumCsvオプションを指定して読み込もうとした場合

  • 環境変数CBLCSVCHARに\を指定したとき

    「123」「456」「789」という数値データとして読み込まれる。

  • 環境変数CBLCSVCHARを指定しないとき

    \は数値データとして無効なので,実行時エラーになる。

形式
CBLCSVCHAR='文字列〔;文字列…〕'
文字列

セルデータを数値として入力するとき,無視したい文字列を指定します。

規則
  • 環境変数CBLCSVCHARに,複数の文字列を指定する場合は,各文字列をセミコロン(;)で区切り,全体をアポストロフィ(')またはダブルコーテーション(")で囲んで指定する必要があります。

  • 環境変数CBLCSVCHARに指定した文字列は,数値の左端,右端,途中のどこにあっても無視されます。

  • 入力データが外部浮動小数点数字項目の場合,環境変数CBLCSVCHARの指定は無効になります。

  • 環境変数CBLCSVCHARには,1バイト以上,512バイト以下の文字列を指定してください。この範囲を超える長さの文字列を指定した場合,実行時エラーとなります。

注意事項
  • -NumCsvオプションが指定されていない場合,環境変数CBLCSVCHARの指定は無効になります。

  • 環境変数CBLCSVCHARに指定した文字列に含まれるセミコロン(;)は,すべて区切り文字とみなされます。無視する文字列としてセミコロンは指定できません。

  • 環境変数CBLCSVCHARに,空白文字(X'20')や数値データとして有効な文字を指定した場合,これらの文字列も無視されます。ただし,入力結果は保証しません。

  • 環境変数CBLCSVCHARに設定する文字列の全体の長さは,1,024バイト以内でなければなりません。1,024バイトを超える文字列を設定した場合,メッセージを出力して環境変数CBLCSVCHARの指定は無効となります。