バージョン 4.2.5
 —  ステートメント  —

REINPUT

REINPUT  [FULL] [(statement-parameters)]

USING HELP

WITH-TEXT-option
  [MARK-option]      
  [ALARM-option]      

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

構文図で使用されている記号については、「構文記号」を参照してください。

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

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


機能

REINPUT ステートメントは、INPUT ステートメントに戻って再実行するために使用します。 これは通常、前の INPUT ステートメントの結果、データ入力が無効であったことを示すメッセージを表示するために使用します。 「例 1」を参照してください。

INPUT ステートメントとそれに対応する REINPUT ステートメントの間に、WRITE または DISPLAY ステートメントを実行することはできません。 REINPUT ステートメントをバッチモードで使用することはできません。

REINPUT ステートメントが実行されると、INPUT ステートメントが実行されたときに存在していたサブルーチン、特殊条件、およびループ処理を考慮してプログラムステータスが再位置づけされます(INPUT ステートメントのステータスがまだ有効な場合)。 INPUT ステートメントの実行後にループが開始され、REINPUT ステートメントがそのループ内にある場合、ループは中断され、REINPUT の結果として再処理された INPUT ステートメントの後で再開されます。

INPUT ステートメントの実行後にサブルーチン階層が呼び出され、サブルーチン内で REINPUT が実行された場合、Natural は自動的に全サブルーチンをさかのぼり、INPUT ステートメントの位置にプログラムステータスを再位置づけします。

INPUT ステートメントが実行されたステータスがすでに終了してしまった時点では、INPUT ステートメントをループ、サブルーチン、または特殊条件ブロック内に位置づけ、REINPUT ステートメントを実行することはできません。 このエラー条件が検出されると、エラーメッセージが生成され、プログラムの実行が終了します。

ダイアログ設計」の「ステートメント REINPUT/REINPUT FULL(『プログラミングガイド』)も参照してください。

注:

入出力フィールド(オプション (AD=M))が INPUT ステートメントによって表示されているとき、画面に表示されているデータは、フィールドが "変更された" とみなされる場合にのみ変数に戻されます。 フィールドのステータスは、次の条件のいずれかが当てはまる場合、MODIFIED になります。

最終的に変更されなかったフィールドの内容は、画面から変数に転送されません。

FULL オプションを指定することなく REINPUT ステートメントを実行した場合、入出力フィールドの MODIFIED 状態は影響を受けません。 上記のオペレーションのいずれかによって INPUT ステートメントを介してフィールドが操作された場合以外は、フィールドは変更されていないとみなされます。 逆に言うと、前述のオペレーションの少なくとも 1 つが実行された場合は、FULL オプションなしで REINPUT ステートメントにより INPUT ステートメントが何度送られたかにかかわらず、フィールドは変更されたものとして扱われます。

つまり、FULL オプションなしで REINPUT ステートメントによりトリガされた INPUT ステートメントを使用して表示されたフィールド値は、前述のフィールドオペレーションによってフィールドが変更された場合にのみ、変数に転送されます。

属性制御変数(オプション CV)が、INPUT ステートメントの後の MODIFIED でチェックされているフィールドに割り当てられている場合は、プログラムコード内で MODIFIED ステータスをチェックできます。

Top of page

構文説明

REINPUT FULL

REINPUT ステートメントで FULL オプションを使用すると、対応する INPUT ステートメントが完全に再実行されます。

  • FULL オプションを使用しない通常の REINPUT ステートメントでは、INPUT ステートメントと REINPUT ステートメントの間で変更された変数の内容は表示されません。つまり、画面上のすべての変数は、INPUT ステートメントが初めて実行されたときに保持していた内容を示します。

  • REINPUT FULL ステートメントでは、INPUT ステートメントの最初の実行後に行われたすべての変更が、INPUT ステートメントの再実行時に INPUT ステートメント適用されます。つまり、画面上のすべての変数は、REINPUT ステートメントの実行時に保持していた値を含みます。

注意:
REINPUT FULL によって、入力専用フィールド(AD=A)の内容は再度削除されます。

REINPUT FULL ステートメントの別の特徴は、属性制御変数のステータスが NOT MODIFIED にリセットされることです。 この処理は普通の REINPUT ステートメントでは行われません。 属性制御変数にステータス MODIFIED が割り当てられているかどうかを確認するには、MODIFIED オプションを使用します。

例 3 - MARK POSITION を指定した REINPUT FULL」も参照してください。

statement-parameters

REINPUT ステートメントで指定されるパラメータは、ステートメントに指定した全フィールドに適用されます。

フィールドレベルで指定したパラメータ(MARK オプションを参照)は、ステートメントレベルの対応する各パラメータを上書きします。

REINPUT ステートメントで指定可能なパラメータ 指定(S = ステートメントレベル、E = 要素レベル)
AD 属性定義 * SE
CD カラー定義 S

* AD=P をステートメントパラメータとして指定した場合、すべてのフィールド(MARK オプションで使用されるフィールドを除く)が保護されます。

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

USING HELP

USING HELP 節により、INPUT マップに定義されているヘルプルーチンが呼び出されます。

USING HELPMARK オプション付きで使用すると、MARK オプションに指定された最初のフィールドに対して定義されているヘルプルーチンが呼び出されます。 フィールドにヘルプルーチンが定義されていない場合は、マップ用のヘルプルーチンが呼び出されます。

例:

REINPUT USING HELP MARK 3

結果として、INPUT マップの 3 番目のフィールドに対して定義されているヘルプルーチンが呼び出されます。

WITH-TEXT-option WITH TEXT オプションは、メッセージ行に表示されるテキストを提供するために使用します。 下記の「WITH TEXT オプション」を参照してください。
MARK-option MARK オプションを使用して、特定のフィールドをマークすることができます。つまり、REINPUT ステートメントの実行時にカーソルが配置されるフィールドを指定できます。 下記の「MARK オプション」を参照してください。
ALARM-option このオプションは、REINPUT ステートメントの実行時にアクティブ化される端末の音声アラーム機能を提供します。 下記の「ALARM オプション」を参照してください。

WITH TEXT オプション

WITH TEXT は、メッセージ行に表示されるテキストを提供するために使用します。 これは通常、画面処理やエラー修正のために実行する必要がある操作を示すメッセージです。

[WITH] [TEXT]

* operand1

[(attributes)] [,operand3]7
operand2

オペランド定義テーブル:

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
operand1 C S           N P I   B *             不可
operand2 C S       A U                       不可
operand3 C S       A U N P I F B D T L       不可

* operand1 のフォーマット B は、4 以下の長さでのみ使用できます。

構文要素の説明:

operand1
Natural メッセージファイルからのメッセージテキスト:

operand1 は、Natural メッセージファイルから取得するメッセージテキストの番号を表します。

ユーザー定義メッセージまたは Natural システムメッセージのいずれかを取得できます。

  • 最大 4 桁の正の値(954 など)を指定すると、ユーザー定義メッセージを取得できます。

  • 最大 4 桁の負の値(-954 など)を指定すると、Natural システムメッセージを取得できます。

例 4 - WITH TEXT オプション」も参照してください。

Natural メッセージファイルは、関連ドキュメントで説明しているように、SYSERR ユーティリティで作成およびメンテナンスします。
operand2
メッセージテキスト:

operand2 は、メッセージ行に配置されるメッセージを表します。

例 4 - WITH TEXT オプション」も参照してください。

attributes

operand1operand2 にさまざまな出力属性を割り当てることができます。 これらの属性と構文については、以下の「出力属性」で説明します。

operand3
メッセージテキストのダイナミック置換:

operand3 は、英数字、テキスト定数、または変数名を表します。

提供された値は、operand1 または operand2 のいずれかで指定されるメッセージテキストの一部を置き換えるために使用されます。

表記 :n: は、operand3 の内容を参照するためにメッセージテキスト内に指定します。n にはoperand3 のオカレンス(1~7)を指定します。

例 4 - WITH TEXT オプション」も参照してください。

注意:
複数の operand3 を指定する場合は、それぞれをコンマで区切る必要があります。 コンマを小数点文字として(セッションパラメータ DC で定義)使用し、数値定数を operand3 として指定している場合は、コンマの前後に空白を挿入して、コンマが小数点文字と解釈されないようにします。 あるいは、複数のoperand3 を INPUT 区切り文字(セッションパラメータ ID で定義)で区切ることができます。ただし、ID=/(スラッシュ)の場合は使用できません。

先頭のゼロまたは末尾の空白は、メッセージに表示される前にフィールド値から削除されます。

出力属性

attributes は、テキスト表示に使用される出力属性を示します。 可能な属性:

AD=AD-value
CD=CD-value

指定可能なセッションパラメータ値については、『パラメータリファレンス』ドキュメントの該当するセクションを参照してください。

注意:
コンパイラは、実際には 1 つの出力フィールドに複数の属性値を受け入れます。 例えば、「AD=BDI」と指定できます。 ただし、この場合は最後の値のみが適用されます。 示した例では、値 I のみが有効になり、出力フィールドは強調表示されます。

MARK オプション

MARK オプションを使用して、特定のフィールドをマークすることができます。つまり、REINPUT ステートメントの実行時にカーソルが配置されるフィールドを指定できます。 また、フィールド内の特定の位置をマークすることもできます。 さらに、入力保護フィールドにしたり、表示属性やカラー属性を変更できます。

MARK [POSITION operand4 [IN]] [FIELD]

operand5

[(attributes)]

*fieldname

オペランド定義テーブル:

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
operand4 C S           N P I                 不可
operand5 C S A         N P I                 不可

構文要素の説明:

operand5
マークするフィールド:

INPUT ステートメントに指定された AD=A または AD=M のフィールド(非保護フィールド)にはすべて、1 から始まるフィールド順番号が Natural によって割り当てられます。 operand5 には、カーソルを位置づけるフィールド番号を指定します。

*fieldnameの表記は、フィールド名を参照として用いて、(INPUT ステートメントで使用した)フィールドに位置づけるために使用します。

該当する INPUT フィールドが配列の場合、配列の 1 つ以上のオカレンスを参照するために一意のインデックスまたはインデックス範囲を指定できます。

INPUT #ARRAY (A1/1:5)
...
REINPUT (AD=P) 'TEXT' MARK *#ARRAY (2:3)

operand5 も配列の場合、operand5 の値は INPUT 配列に対するフィールド番号として使用されます。

RESET #X(N2/1:2)
INPUT #ARRAY ...
...
REINPUT (AD=P) 'TEXT' MARK #X (1:2)
MARK POSITION

MARK POSITION では、フィールド内の特定の位置(operand4 で指定)にカーソルを置くことができます。

例 3 - MARK POSITION を指定した REINPUT FULL」も参照してください。

operand4 operand4 ではカーソル位置を指定します。 operand4 に小数桁を含めることはできません。
attributes 下記の「属性割り当て」を参照してください。

属性割り当て:

 

B

 

 

BL

  C     GR
  D     NE
AD=[P] I   CD = PI
  N     RE
  U     TU
  V     YE

入力フィールド(AD=A または AD=M)に対しては、入力保護属性(AD=P)を指定できます。

注意:
出力専用フィールド(AD=O)として定義されたフィールドに対して入力非保護属性は指定できません。

AD=P をステートメントレベルで指定した場合、MARK オプションで指定されたフィールドを除く全フィールドが入力保護フィールドになります。

さらにフィールドの表示属性およびカラー属性を変更できます。 これらの属性の詳細については、『パラメータリファレンス』のセッションパラメータ AD および CD を参照してください。

例 2 - 属性を割り当てた REINPUT」も参照してください。

ALARM オプション

[AND] [SOUND] ALARM

このオプションは、REINPUT ステートメントの実行時にアクティブ化される端末の音声アラーム機能を提供します。 この機能を使用するには、対応するハードウェアが使用可能である必要があります。

Top of page

例 1 - REINPUT ステートメント

** Example 'REIEX1': REINPUT                                            
************************************************************************
DEFINE DATA LOCAL                                                       
1 #FUNCTION (A1)                                                        
1 #PARM     (A1)                                                        
END-DEFINE                                                              
*                                                                       
INPUT #FUNCTION #PARM                                                   
*                                                                       
DECIDE FOR FIRST CONDITION                                              
  WHEN #FUNCTION = 'A' AND #PARM = 'X'                                  
    REINPUT 'Function A with parameter X selected.'                     
            MARK *#PARM                                                 
  WHEN #FUNCTION = 'C' THRU 'D'                                         
    REINPUT 'Function C or D selected.'                                 
  WHEN #FUNCTION = 'X'                                                  
    STOP                                                                
  WHEN NONE                                                                 
    REINPUT 'Please enter a valid function.'                            
            MARK *#FUNCTION
END-DECIDE                 
*                          
END                       

プログラム REIEX1 の出力:

#FUNCTION A #PARM Y

Enter キーを押した後:

PLEASE ENTER A VALID FUNCTION
#FUNCTION A #PARM Y

例 2 - 属性を割り当てた REINPUT

** Example 'REIEX2': REINPUT  (with attributes)                         
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A (A20)                                                              
1 #B (N7.2)                                                             
1 #C (A5)                                                               
1 #D (N3)                                                               
END-DEFINE                                                              
*                                                                       
INPUT (AD=A) #A  #B  #C  #D                                             
*                                                                       
IF #A = ' ' OR #B = 0                                                   
  REINPUT (AD=P) 'RETYPE VALUES'                                        
                 MARK *#A (AD=I CD=RE)    /* put cursor on first field  
                      *#B (AD=U CD=PI)    /* and change colours    
END-IF                                                                  
*                                                                       
END                                                                     

例 3 - MARK POSITION を指定した REINPUT FULL

** Example 'REIEX3': REINPUT  (with FULL and POSITION option)           
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A (A20)                                                              
1 #B (N7.2)                                                             
1 #C (A5)                                                               
1 #D (N3)                                                               
END-DEFINE                                                              
*                                                                       
INPUT (AD=M) #A  #B  #C  #D                                             
*                                                                       
IF #A = ' '                                                             
  COMPUTE #B = #B + #D                                                  
  RESET #D                                                              
END-IF                                                                  
*                                                                       
IF #A = SCAN 'TEST' OR = ' '                                            
REINPUT FULL 'RETYPE VALUES' MARK POSITION 5 IN *#A             
END-IF                                                                  
*   
END

プログラム REIEX3 の出力:

RETYPE VALUES 
#A                      #B        0.00 #C       #D    0

例 4 - WITH TEXT オプション

** Example 'REIEX4': REINPUT (with TEXT option)                         
************************************************************************
DEFINE DATA LOCAL                                                       
01 #NAME   (A8)                                                         
01 #TEXT   (A20)                                                        
END-DEFINE                                                              
*                                                                       
*                                                                       
INPUT WITH TEXT 'Enter a program name.' 'Program name:' #NAME           
*                                                                       
IF #NAME = ' '                                                          
  REINPUT WITH TEXT 'Input missing. Enter a name.'                    
END-IF                                                                  
*                                                                       
IF #NAME NE MASK (A)                                                    
  MOVE 'Invalid input.' TO #TEXT                                        
  REINPUT WITH TEXT ':1: Name must start with a letter.',#TEXT      
ELSE                                                                    
  /* Using Natural error message 7600 for demonstration                 
  COMPRESS *INIT-USER 'on' *DAT4I INTO #TEXT                            
  INPUT WITH TEXT *-7600,#NAME,#TEXT 'Input accepted.'
END-IF                                                
END                                                  

Top of page