10.2.3 外部からのデータを入力するACCEPT文
ACCEPT文で外部からのデータを入力する場合,次の2種類の方法で受け取り側作用対象にデータを設定できます。
-
標準転記
入力したデータをそのまま受け取り側作用対象に設定します。
-
数値へのデータ変換を伴う転記
受け取り側作用対象が数字項目の場合,入力された英数字データを数字データへ変換して,受け取り側作用対象に設定します。
(1) 標準転記によるACCEPT文
少量入出力に使用するACCEPT文について説明します。なお,ACCEPT文の言語仕様の詳細については,マニュアル「COBOL2002 言語 標準仕様編」 「10.8.1 ACCEPT文」を参照してください。
(a) 形式
ACCEPT 一意名 〔FROM {SYSIN|SYSIPT|CONSOLE|SYSSTD|呼び名}〕
(b) 一般規則
-
FROM指定を省略するとSYSINが仮定されます。
-
SYSIPTは,SYSINと同様とみなされます。
-
入出力の対象とするファイルの規則については,「10.2.1 入出力の対象とするファイルの割り当て方法」の「(1) ACCEPT文」を参照してください。
-
環境変数CBL_SYSINまたは環境変数CBL_SYSSTDに値が指定されていない場合,またはCONSOLE指定がある場合の入力先は,次のような指定になります。
モードの種類
データの入力元
GUIモード
COBOL2002が出力するダイアログボックス
CUIモード
標準入力
標準エラー出力
-
一意名の領域には,入力データの最後の改行文字は格納されません。
-
入出力エラーが発生した場合は,エラーメッセージが出力され,処理が終了します。
(c) SYSIN,SYSIPT,CONSOLEを指定した場合の規則
- データ入力の単位
-
改行文字までが1回だけ入力されます。
- 転記規則
-
-
入力データが一意名の領域より長い場合,一意名の長さで区切られ,残りは切り捨てられます。
-
入力データが一意名の領域より短い場合,一意名の残りの領域には空白が埋められます。
-
入力データは一意名の領域の左端から順に転送されます。一意名が日本語項目なら日本語空白文字(シフトJISのときはX'8140')が,日本語項目以外なら標準コードの空白文字(X'20')が埋められます。日本語項目で入力が語境界(2バイトで1語)でなければエラーメッセージを出力して終了します。
-
(d) SYSSTDを指定した場合の規則
- データ入力の単位
-
1レコードは常に80バイトであり,改行文字がレコードの区切りとなります。1レコードが80バイトを超える場合は,先頭から80バイトが転送され,残りのデータは改行文字まで切り捨てられます。1レコードが80バイト未満の場合は,残った領域に空白文字が埋められたレコードとして扱われます。
- 転記規則
-
-
一意名の長さが80バイトの場合,データは一度だけ転送されます。
-
一意名の長さが80バイトより短い場合は,データは一度だけ転送され,残りは切り捨てられます。
-
一意名の長さが80バイトより長い場合は,一意名の長さを満たすまで80バイト単位で転送が繰り返されます。一意名の長さが80の倍数でないときは,80バイト単位での転送を繰り返したあと,最後に残った80バイト未満のデータ領域に入力データが格納されます。ただし,最後に残った80バイト未満のデータ領域に入りきらないデータがある場合,残ったバイト数から右側は,切り捨てられます。
-
入力データは一意名の領域の左端から順に転送されます。一意名が日本語項目なら日本語空白文字(シフトJISのときはX'8140')が,日本語項目以外なら標準コードの空白文字(X'20')が埋められます。日本語項目で入力が語境界(2バイトで1語)でなければエラーメッセージを出力して終了します。
-
(e) ACCEPT文の表示形式(GUIモードの場合)
GUIモードでACCEPT文を実行した場合,COBOL2002が出力するダイアログボックスを次に示します。
ここで[Esc]キーを押すと,ダイアログボックスが閉じ,データを入力しないで[OK]ボタンを選んだ場合と同じ動きとなります。
なお,ダイアログボックスに入力した文字はコンソールウィンドウに出力されます。
(2) 数値へのデータ変換を伴うACCEPT文
-NumAcceptオプションが指定されている場合,ACCEPT文は数字項目,数字編集項目,外部浮動小数点数字項目,内部浮動小数点数字項目で定義されている受け取り側作用対象に対して,入力されたデータを受け取り側作用対象の属性に合わせたデータに変換して,設定します。
(a) データ変換の規則
データ変換の規則を,次に示します。
一意名の項目 |
受け取り 領域長 |
入力できる文字 |
備考 |
|
---|---|---|---|---|
符号なし数字項目 (Sなし) |
Vなし |
けた数 |
0〜9 |
|
Vあり |
けた数+1 |
0〜9 . |
数字はけた数以内 小数点位置を合わせる |
|
符号あり数字項目 (Sあり) |
Vなし |
けた数+1 |
0〜9 + - |
数字はけた数以内 |
Vあり |
けた数+2 |
0〜9 + - . |
数字はけた数以内 小数点位置を合わせる |
|
数字編集項目 |
一意名長※ |
0〜9 + - CR DB |
数字は有効数字長以内 小数点位置を合わせる |
|
外部浮動小数点数字項目 |
V .なし |
22 |
0〜9 E + - |
数字は有効けた数以内 |
V .あり |
22 |
0〜9 E + - . |
||
内部浮動小数点数字項目 |
単精度 |
22 |
0〜9 E + - . |
|
倍精度 |
22 |
0〜9 E + - . |
(b) 転記規則
- 転記規則
-
-
入力データが一意名の領域より長い場合,「表10‒1 -NumAcceptオプション指定時のACCEPT文の入力規則」に示す受け取り領域長で区切られ,残りは切り捨てられます。
-
入力データが一意名の領域より短い場合,入力した長さだけが有効となり,一意名の残りの領域にはゼロが埋められます。
-
入力データは,一意名が数字項目の場合は小数点の位置に合わせて,数字編集項目の場合は編集文字に合わせて,外部浮動小数点数字項目,内部浮動小数点数字項目の場合は小数点位置,Eの位置に合わせて,それぞれ右詰めで転記されます。
-
(c) 入力データのチェック
次の規則に従って,入力データがチェックされます。
- 不当文字を入力した場合
-
各項目に「表10‒1 -NumAcceptオプション指定時のACCEPT文の入力規則」の入力できる文字以外の文字が入力された場合,不当文字とみなされます。入力データ中に使用できる文字と不当文字とが混在している場合,不当文字は,一意名へ転記されません。
- 符号,小数点,Eを複数入力した場合
-
左端から検索し,最初に出現したものを有効とします。それ以降に出現したものは不当文字として扱います。
- すべて不当文字の文字列を入力するか,または何も入力しなかった場合
-
一意名にすべてゼロを設定します。
- 一意名が外部浮動小数点数字項目,内部浮動小数点数字項目の場合
-
入力形式は小数点を含む外部10進形式,外部浮動小数点数字形式のどちらでもかまいません。ただし,外部浮動小数点数字形式で入力した場合,指数部のけた数は2けたまで有効となります。