COBOL2002 ユーザーズガイド

[目次][用語][索引][前へ][次へ]

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

<この項の構成>
(1) セルデータを数値として入出力する機能の概要
(2) データ変換の規則
(3) 数値として入力するとき,不要な文字列を無視する機能

(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-6 CSV編成ファイルに数値データとして有効な文字の種類

    セルの属性 入力時に有効な文字 出力時に有効な文字
    外部10進項目
    • 0〜9,+,-
    • 小数点
    • 右端,または左端にある空白文字(X'20')

    • 0〜9,+,-
    外部浮動小数点数字項目
    • 0〜9,+,-,E,e
    • 小数点
    • 右端,または左端にある空白文字(X'20')
    • 符号位置にある空白文字(X'20')

    • 0〜9,+,-,E,e
    • 小数点
    • 空符号位置にある空白文字(X'20')

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

  • 外部10進項目,外部浮動小数点数字項目で定義したセルに,次のようなデータを入力した場合,実行時エラーになります。
  1. 表6-6 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には,1バイト以上,512バイト以下の文字列を指定してください。この範囲を超える長さの文字列を指定した場合,実行時エラーとなります。

注意事項
  • -NumCsvオプションが指定されていない場合,環境変数CBLCSVCHARの指定は無効になります。
  • 環境変数CBLCSVCHARに指定した文字列に含まれるセミコロン(;)は,すべて区切り文字とみなされます。無視する文字列としてセミコロンは指定できません。
  • 環境変数CBLCSVCHARに,空白文字(X'20')や数値データとして有効な文字を指定した場合,これらの文字列も無視されます。ただし,入力結果は保証しません。