INPUT

このドキュメントでは、次のトピックについて説明します。

構文については別途説明します。以下を参照してください。

関連ステートメント:DEFINE WINDOW | REINPUT | SET WINDOW

関連機能グループ:対話型処理用の画面生成


関数

INPUT ステートメントは、会話型モードの場合、データ入力のための形式化された画面やマップを作成するために使用します。

Natural スタック(STACK ステートメント参照)と結合して使用することもできます。また、バッチモードで実行しているプログラムにユーザーデータを提供するために使用することもできます。

Natural RPC の場合:『Natural リモートプロシージャコール(RPC)』ドキュメントの「サーバーに対する Natural ステートメントの注意事項」を参照してください。

入力モード

INPUT ステートメントは、スクリーン、フォームまたはキーワード/デリミタの各モードで使用できます。スクリーンモードは、通常ビデオ端末で使用します。フォームモードは、TTY 端末で使用します。デリミタモードは、TTY 端末およびバッチモードで使用します。デフォルトはスクリーンモードです。

セッションパラメータIM

スクリーンモード

スクリーンモードでは、INPUT ステートメントを実行すると、フィールドや位置指定に従って画面が表示されます。画面のメッセージ行は、Natural のエラーメッセージに使用されます。メッセージ行の位置(画面の最上段または下段)は、端末コマンド %M を使用して変更できます。端末ユーザーは、Tab キーで個々のフィールドに位置付けることができます。

Natural には 画面ウィンドウ処理が用意されています。そのため、論理画面マップのレイアウトは物理画面サイズより大きく作成できます(理論上 250 桁×250 行、ただし内部画面バッファにより制限されます)。

ウィンドウ端末コマンドの %W で、論理的および物理的ウィンドウの位置や大きさを変更できます(ウィンドウ処理の詳細は、端末コマンド %W 参照)。

物理画面に入り切らない入力フィールド(AD=A または AD=M)には、次の規則が適用されます。

  • フィールドの始まりがウィンドウ内にない入力フィールドは常に保護されます。

  • ウィンドウ内で始まりウィンドウ外で終わる入力フィールドは、フィールドに含まれる値がウィンドウ内に完全に表示できない場合にのみ保護されます。この場合、フィールド長ではなく値の長さがウィンドウのサイズを超えているかどうかを決定します。充填文字(プロファイルパラメータ FC またはセッションパラメータ AD で指定)は値の一部とはみなされません。

  • このように保護された入力フィールドをアクセスまたは処理するには、ウィンドウサイズを調節してフィールドや値の全体を画面表示できるようにする必要があります(端末コマンド %W を参照)。

非スクリーンモード

INPUT ステートメントは、行単位デバイスのオペレーション、またはシーケンシャルファイルからのバッチ入力処理に使用することもできます。

スクリーンモードで定義した同じマップレイアウトを、非スクリーンモードで使用することもできます。

フォームモードおよびキーワード/デリミタモードは、行モードの画面レイアウトと同様に、またはマップレイアウトなしでデータだけを処理することによって入力を処理できます。

以下の項目も参照してください。

データ入力

英数字フィールドのデータは左詰めで入力する必要があります。空白も含めてすべての文字に意味があります。データは 1 文字ごとにバイト単位で内部フィールドに割り当てられます。英数字フィールドに入力されるデータは、入力の際はチェックされません。

小文字および大文字の変換は、端末コマンド %L%U および属性 AD=TAD=W で制御できます。

数字フィールドのデータは、入力フィールドの中のどこでも入力できます。リーディングおよび(または)トレーリングブランク、リーディングゼロ、リーディングサインおよび 1 つの小数点を使用できます。Natural は、フィールドの内部定義に従って、値の桁合わせをします。SG=OFF が指定されている場合は、Natural は符号桁を確保しません。P フォーマットで定義されたフィールドのデータは、10 進数形式で入力する必要があります。必要に応じて 10 進がパック形式に変換されます。全部が空白のフィールドは、値 0 とみなされます。数字フィールドのデータは、リーディングおよび(または)トレーリングブランク、オプションで 1 つのリーディングサイン、オプションで 1 つの小数点、および数字以外のものが値に含まれていないかどうかがチェックされます。小数点が入力されていなければ、値の右端にあると仮定します。

バイナリフィールドに対するデータは、入力フィールドのすべての桁に対して入力する必要があります(1 バイトに対して 2 桁が対応します)。16 進数文字(0~9、A~F)だけが使用できます。空白文字(ASCII では H'20'、または EBCDIC では H'40')は有効で、バイナリゼロに変換されます。バイナリフィールドのデータは、16 進文字かどうかチェックされます。

フォーマット L のフィールドに対するデータには、空白(偽)または空白以外(真)を入力できます。

フォーマット F、D および T に対するデータは、F、D および T の定数の定められた規約に従って入力します。

数値編集マスクフリーモード

フィールド要素内に、フィールド内容の表現を編集マスクでフォーマットすることができます。編集マスクは次の 2 つの目的に使用されます。

  • 画面にフィールド表示するためのレイアウトの構築。

  • 文字列が修正され、ENTER が押されたときに、入力された文字列からフィールドデータを抽出するため。

入力される新しいデータ値は編集マスクのフォーマットと完全に一致している必要があるため、追加の挿入文字付きで表示されるフィールドデータのフォーマットを改善する利点は実際には不都合である可能性があります。

例:

SET GLOBALS ID=; DC=,
RESET N (N7,3)
INPUT N (AD=M EM=Z'.'ZZZ'.'ZZZ,999EUR)
END
出力値 表示 入力値 必要な入力 エラーになる入力
0 ,000EUR 1 1,000EUR

1
1EUR
01,000EUR

1234 1.234,000EUR 1234567 1.234.567,000EUR

1234567
1.234.567
1.234.567EUR

0,123 ,123EUR 1,234 1,234EUR 1,234

編集マスクを持つ数値フィールドを入力するためのもう 1 つのオプションは、編集マスクフリーモードと呼ばれる代替 INPUT モードを使用することです。(プロファイルパラメータ EMFM 指定のセッション起動時、または端末コマンド %FM+ により Natural セッション実行中に)アクティブにされると、編集マスク挿入文字のすべてまたは一部が入力から除外されることがあります。

ただし、挿入文字の連続文字列が編集マスクに(以下の例の EUR のように)表示されると、文字列を完全に供給するか、または除外することのみが可能となります。供給されるオプションまたは必須の桁数(編集マスク文字 Z および 9)には影響しません。

例:編集マスクフリーモードを有効にする

SET GLOBALS ID=; DC=,
SET CONTROL 'FM+'         /* activate numeric Edit Mask Free Mode
RESET N (N7,3)
INPUT N (AD=M EM=Z'.'ZZZ'.'ZZZ,999EUR)
END
入力値 可能な入力 エラーになる入力
1

1
1,0
001
1,00EUR
0.001
1,EUR

1EUR
1234567

1234567
1.234.567
1234.567
1234567,0
1.234.567,0
1.234.567,EUR
1.234.567,0EUR
1.234.567,000EUR

1.234.567EUR
1,234

1,234
1,234EUR
001,234
0.001,234EUR
00001,234EUR

1,234EU

注意:
編集マスクフリーモードは INPUT にのみ適用され、MOVE EDITED ステートメントでは無視されます。

SB - 選択ボックス

INPUT ステートメントの選択ボックスは、メインフレームコンピュータでのみ利用可能です。Windows では、選択ボックスはマップエディタでのみ定義できます。UNIX および OpenVMS では、選択ボックスは定義できず、Windows またはメインフレーム環境からインポートされた場合には無視されます。

選択ボックスは入力フィールドに付加することができます。選択ボックスはコーディングをプログラム内で直接行うことができるため、フィールドにヘルプルーチンを添付する方法に代わる最適な選択肢です。ヘルプルーチンと同様に、特別なプログラムは必要ありません。

詳細については、『パラメータリファレンス』でセッションパラメータ SB を参照してください。

エラー修正

INPUT フィールドに入力した値がフォーマットやフィールドの編集マスクと一致しない場合、(プログラムの実行を終了せずに)エラーメッセージが表示され、エラーのあるフィールドにカーソルが位置付けられます。そこでユーザーは正しい値を入力でき、その後処理は継続されます。

画面分割

一般的に、各 INPUT ステートメントは、新しいページ(または端末画面)を生成します。AT END OF PAGE ステートメント内に指定された INPUT ステートメントは、新しい画面を生成しません。この機能を使用することにより分割画面が作成できます。分割画面の上部には複数の行を表示し、画面の下部は会話のため、入力マップの作成に使用することができます。PS パラメータ(ページサイズ)を、SET GLOBALS または FORMAT ステートメントで指定し、同一物理画面に入力マップが作成できるように論理ページサイズを設定します。

最初の INPUT 行は最終表示行の後に位置付けられます。だたし NO ERASE オプションを使用した場合、最初の INPUT 行はページの先頭に位置付けられます。

INPUT ステートメントで使用可能な Natural システム変数

関連するシステム変数の詳細については、『システム変数』ドキュメントの「入力/出力関連システム変数」セクションを参照してください。