COBOL2002 ユーザーズガイド
(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オプションを指定した場合の,数字項目へのデータ変換規則を次に示します。
- データ変換の一般規則
- 「表6-6 CSV編成ファイルに数値データとして有効な文字の種類」で示した「有効な文字」以外の文字が含まれるデータ
- 小数点が複数あるデータ
- 外部10進形式で,符号が複数ある,または符号の位置が不正なデータ
- 外部浮動小数点数字項目で,浮動小数点数字定数として正しくないデータ
(ただし,指数部,仮数部の符号をマイナス(-)で定義した場合,データ中で符号を示す位置が空白文字(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')や数値データとして有効な文字を指定した場合,これらの文字列も無視されます。ただし,入力結果は保証しません。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.