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句の指定は有効です。ただし,小数点としてコンマ(,)を使用する場合は,その数値データをダブルコーテーション(")で囲む必要があります。ダブルコーテーションで囲まれていないコンマは,すべてセルの区切り文字とみなされます。
-
セルにデータを入出力するとき,次に示す文字が数値データとして有効です。
-
外部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')や数値データとして有効な文字を指定した場合,これらの文字列も無視されます。ただし,入力結果は保証しません。
-