◆ No.72(1998年3月号)の回答-2
編集部注にしたがってバインダー数に余裕があるかどうかをチェックする方法として、LT;B;のバインダーリストを利用します。
バインダーに余裕があっても頁に余裕がなければ意味がありませんので、それもチェックするようにしまいした。
また、TPSは頁が不足していてもバインダー数は拡張できるので、50個に限定せず、最大数をチェックし、50個以上の場合にはリストを保管するようにしています。空きスペースをカウントする方法を二通り考えましたので、両方共発表します。
第一案
「バインダーリストの一行づつをチェックしカウントする方式」
注:- 1. バインダー登録数が50に限定されているようでしたら、6/8,9/11,13/16の行を消去し、10行目の%V4を消去してください。
- 2.メインのプログラムからキャビネット名、確保するバインダーの数が送られてくるならば、ACCEPT文は不要と思います。
- 3.すでに確保されているバインダーがあり、その名称が他と混同しない共通部分を持つならば、15行目のIF文にその条件のものもカウントするようにするか、後に別の変数で既登録のバインダーだけをカウントする、IF文を追加してください。
1<CHE>
2 LET X20=0;LET X1=0;
3 ACCEPT "チェックするキャビネット名は",V1;
4 CC;%V1; /*対象キャビネットの変更*/
5 IF MID$(V1,2,1)="/" THEN LET V2=RIGHT$(V1,3);/*キャビネット名と装置の分離*/
6 LET V1='"'+V1+'"';LET V3=LTINF$(2,8,%V1); /*最大バインダー数の読込み*/
7 LET V2='"'+V2+'"';LET Z1=FREE(3,%V2); /*空き頁数の読込み*/
8 IF VAL(V3)<=50 THEN GOTO $AA /*バインダーリスト保管の要不判定*/
9 ACCEPT "リストを保管するバインダー? ",V4;
10$AA:LT;B;;%V4;; /*バインダーリストの読込み*/
11 IF VAL(V3)<=50 THEN GOTO $CC; /*バインダー登録数50以上の対応*/
12 LET X20=X20+1;IF X20>IVAL(V3)\50 THEN GOTO $DD;
13 G;%V6/%X20;
14$CC:FOR X10=H TO T;LET V10=[X10,4];
15 IF V10="" THEN LET X1=X1+1;NEXT; /*未使用バインダーーのカウント*/
16 IF IVAL(V3)<=50 THEN GOTO $DD;GOTO$BB;
17$DD:ACCEPT "確保するバインダー数は?",X2;
18 IF X2<X1 & <INTG(Z1) THEN GOTO $EE; /*空きスペースの判別*/
19 MESSAGE "空きスペースが不足しています!!";STOP
20$EE:MESSAGE "確保可能です";STOP
第二案
「バインダーリストをCSでチェックしカウントする方式」 こちらのほうがステップ数も少なく、すっきりしていると思います。
注:- 1. バインダー登録数が50に限定されているようでしたら、第一案と同様に6/8,9/11,13/16の行を消去し、12行目の%V4を消してください。
- 2.空きスペースにカウントして良い使用中のバインダーがある場合は14行のCS条件にそれを加えてください。
1<CHEKB>
2 LET V4=""; /*変数のクリアー*/
3 ACCEPT "チェックするキャビネット名は",V1;
4 CC;%V1; /*対象キャビネットの変更*/
5 IF MID$(V1,2,1)="/" THEN LET V2=RIGHT$(V1,3);/*キャビネット名と装置切り離し*/
6 LET V1='"'+V1+'"';LET V3=LTINF$(2,8,%V1); /*最大バインダー数の読込み*/
7 LET V2='"'+V2+'"';LET Z1=FREE(3,%V2); /*空き頁数の読込み*/
8 IF VAL(V3)<=50 THEN GOTO $AA /*リスト保管の要不判定*/
9 ACCEPT "リストを保管するバインダー? ",V4; /*リスト保管バインダー指定*/
10 LET V6=V4;LET V5='"'+V4+'"';
11 IF NAME(3,%V5)<>0 THEN LET V4=V4+"/D"; /*既存バインダーのゴミ取り*/
12$AA:LT;B;;%V4;; /*バインダーリストの読込み*/
13 ;IF V4="" THEN LET V4="M" ELSE LET V4=V6;
14 CS;%V4;C4="";;;;;LET Z2=RESULT(1) /*空きスペースのカウント*/
15$DD:ACCEPT "登録予定のバインダー数は?",X2;
16 IF X2<INTEG(Z1) & <INTG(Z2) THEN GOTO $EE; /*空きスペースの大きさ判別*/
17 MESSAGE "空きスペースが不足しています!!";STOP
18$EE:MESSAGE "登録可能です";STOP 以上
|