■書式
メニュー 〈変数名〉,初期項目=〈メニュー番号〉,画面消去=《しない|する》,文字選択=《しない|する》
,ESC=《無効|有効》,{〈メニュー番号〉,〈開始行〉,〈開始桁〉,〈表示文字列〉
,《白|黄|水|緑|紫|赤|青|黒》,《下線|点滅|反転》,・・・},・・・
■機能
メニューを画面に表示し、ENT(RET)キーを押したときに反転表示されるメニュー項目の番号を変数に代入する。ESCキーを押したときには0が代入される。〈変数〉の型は数値または整数である。
初期項目で最初に反転するメニュー番号を指定する。表示されている文字でもメニュー選択を可能にするには文字選択を"する"に指定する。メニュー番号を0や負の数字にすると、表示されるだけで選択対象にならない。
メニューの必要性
並列の関係にある複数の処理から目的とする処理を選択する場合に使用するコマンドです。
メニューコマンドは入力コマンドと同様に、キーボードから入力することで実行されるコマンドですが、矢印キーでカソールを上下(或いは左右)させることによって処理を選択できるところから、桐の一括処理どころかパソコンをほとんど触ったことのない方にでも十分に操作可能なレベルにまでもっていけるコマンドであると思います。
当HPには公開しておりませんが、【偏差値および欠点計算システム】という一括処理プログラムがあります。当プログラムは、メニューコマンドの連続操作のみで作った一括処理で、矢印キーとENTキーだけですべての処理が完了してしまいます。そんなこともあり、コンピュータをあまり使用したことがなかった方々にもご使用いただき好評を得ております。
★メニューコマンドはキー入力操作の簡易化として考えることができる。
メニューコマンドとその指定方法
サンプルプログラム(抜粋)
1行目 | メニュー &メニュー2,初期項目=&メニュー2,画面消去=しない,文字選択=する\
,{1,1, 1,"1:祝・祭日の編集”,白,下線}\ ,{2,1,22,"2:学校行事の編集”,白,下線}\ ,{3,1,43,"3:再編集後の印刷”,白,下線}\ ,{4,1,64,"4:処理を終了する”,白,下線} |
2行目 | ケース開始 |
3行目 |
ケース (&メニュー2=1) |
4行目 |
・・・・・省略・・・・・ |
5行目 |
画面消去 (1,1)-(21,80) |
6行目 |
ケース (&メニュー2=2) |
7行目 |
・・・・・省略・・・・・ |
8行目 |
画面消去 (1,1)-(21,80) |
9行目 |
ケース (&メニュー2=3) |
10行目 |
・・・・・省略・・・・・ |
11行目 |
画面消去 (1,1)-(21,80) |
12行目 |
ケース (&メニュー2=4) |
13行目 |
繰り返し中止 |
14行目 | ケース終了 |
【解説】
1行目;メニューコマンドによって、画面には
1:祝・祭日の編集 2:学校行事の編集 3:再編集後の印刷 4:処理を終了する
と表示されています。"画面消去=しない"というのは、1〜4の数字を選択しキー入力した後も、画面を
そのまま残すということです。また、”文字選択=する”というのは、矢印キーで番号を選択する以外に、
1〜4の番号をキー入力しても選択できるということです。変数&メニュー2にはここで選択した1〜4の
どれかの数が代入されます。
2行目;ケースコマンドと14行目のケース終了コマンドで囲まれた範囲内で、変数&メニュー2に代入された数に応じて
以下で説明する処理を行います。
3行目;変数&メニュー2に1が代入されているときに3行目〜5行目までの処理を行い、
〜
5行目;指定した範囲の画面を消去し、14行目移行の制御に移行します。
6行目;変数&メニュー2に2が代入されているときに6行目〜8行目までの処理を行い、
〜
8行目;指定した範囲の画面を消去し、14行目移行の制御に移行します。
9行目;変数&メニュー2に3が代入されているときに9行目〜11行目までの処理を行い、
〜
11行目;指定した範囲の画面を消去し、14行目移行の制御に移行します。
12行目;変数&メニュー2に4が代入されているときに13行目の処理を行います。
13行目;繰り返しを中止し、14行目以降の制御に移行します。
14行目;ケースを終了し、14行目以降の制御へ移行します。
テクニック1【メニューコマンドとディスク・ファイル関数でファイルの保護を】
■関連する関数
#ファイルサイズ(#FSIZE):ファイルのサイズをバイト単位の数値で返す。ファイルが存在しないとき、-1を返す。
また、ディスクが準備できていないか存在しないときは未定義値(データが何も入って
いないときの状態)を返す。
(注;サンプルプログラムのなかで、一連の処理手順に関係のないものは省いています。)
1行目 | 代入 &表名=#連結(”行事”,#文字列(&年度),”.TBL”) |
2行目 | 代入 &表=#ファイルサイズ(&表名) |
3行目 | 分岐 (&表=-1) , 処理2 |
4行目 | メニュー &保護,{0,10,10,"指定年度の行事予定表は以前作成しましたね。",白}\
,{1,14,17,"使用する",白}\ ,{2,16,17,"使用しない",白}\ ,{0,16,27,": 以前作成した表は消去されます。",白}\ ,{0,18,15,"↑・↓キーで注意して選択し、ENTキーを押して下さい。",赤} |
5行目 | 分岐 (&保護=1) , 処理3 |
6行目 | 名札 処理2 |
7行目 | ファイル複写 "行事モト.TBL",&表名 |
8行目 | 名札 処理3 |
【解説】
1行目;一括処理を実行すると、最初にキー入力した数字がすでに&年度なる変数に代入されています。その数字を使って
ファイル名を作成し、変数&表名に代入しています。
例えば"1997"と入力していた場合、行事1997.TBLというファイル名を変数&表名に代入します。
2行目;&表名のファイルサイズ、すなわち行事1997.TBLのファイルサイズを変数&表に代入します。
3行目;もし行事1997.TBLというファイルが存在しないときは変数&表に-1という数字が返り6行目に分岐し、そのまま
7、8行目へ移行します。
4行目;画面には 指定年度の行事予定表は以前作成しましたね。
使用する
使用しない:以前作成した表は消去されます。
↑・↓キーで注意して選択し、ENTキーを押して下さい。
と表示されています。
行事1997.TBLというファイルが存在すると認識されたので、メニューコマンドを使って以前のファイルを使うか
それとも新しく作り直すかを選択します。これはファイルの保護という観点から色々なところで使用出来ると思います。
5行目;4行目で1を選択した場合、以前の表を使用します。そのため、7行目のファイル複写は行わずに8行目に分岐します。
7行目;4行目で2を選んだ場合、前もって作っておいた行事モト.TBLというデータの入力されていないファイルを行事1997.TBL
に複写します。この場合、ミス入力を懸念される方もいらっしゃるかと思いますが、1または2以外の数字を入力しても
先には進まないようになっていますのでご安心下さい。これによって以前存在したファイルは消去されたことになりま
す。
テクニック2【メニューコマンドとディスク・ファイル関数でファイルの保護を】
■関連する関数
#ファイル検索(〈ファイル名〉,〈n番目〉):ディレクトリをワイルドカードを含むファイル名で検索し、n番目に
一致するファイル名をパス名付の文字列で返す。一致するファイル名
がないときは未定義値を返す。
【リスト1】の2行目と3行目を関数#ファイル検索を用いて書き換えてみます。
【リスト2】
1行目 | 代入 &表名=#連結(”行事”,#文字列(&年度),”.TBL”) |
2行目 | 代入 &表=#ファイル検索(&表名,1) |
3行目 | 分岐 (&表=#未定義) , 処理2 |
4行目 | メニュー &保護,{0,10,10,"指定年度の行事予定表は以前作成しましたね。",白}\
,{1,14,17,"使用する",白},{2,16,17,"使用しない",白}\ ,{0,16,27,": 以前作成した表は消去されます。",白}\ ,{0,18,15,"↑・↓キーで注意して選択し、ENTキーを押して下さい。",赤} |
5行目 | 分岐 (&保護=1) , 処理3 |
6行目 | 名札 処理2 |
7行目 | ファイル複写 "行事モト.TBL",&表名 |
8行目 | 名札 処理3 |
【解説】
2行目;&表名のファイル検索をしてファイルすなわち行事1997.TBLのファイルが存在すればそのファイル名を変数&表に代入
します。ここで、【リスト1】では変数&表の変数宣言は数値型でしたが、【リスト2】での変数&表の変数宣言は
文字列型にする必要があります。
3行目;もし行事1997.TBLというファイルが存在しないときは変数&表に#未定義値が返り6行目に分岐し、そのまま7、8行目
へ移行します。