いつも決まったページ対象でなく臨機応変に変えたい時、人間が指定出来ないと困りますよね。 これはそういう場合の指定方法です。
オート中、コマンド実行時に手操作で指定したい時は、
SH:?:とか「?」を書けば良いのですが、「何々するページは?」「キー列は?」「何々は?」と全部手入力で指定してたら、何のためのオート!ですよね。
そこで、ページだけを指定したい時、「?*1」というのが有ります。
< SH >
T:ESC:
SH:?*1:C2=B:::
これでタイトルを見ながら、マウスなとキーボードなと好きな方で指定出来ます。
C2=Bというのは、例えば、で、あなたが必要な指定をすれば良いのです。
因みに、
T:ESC:
SH:?*1:C2=B:::
Z1=Z38:Z2=Z40:
*で、Z1に C2=B が見つかった先頭頁番号、Z2に最終頁番号が入ります。
*だから?
ER::3:?:ESC:
*とか変更した後、
UPD:2:Z1-Z2:1:1:R:3:3::
*という感じで処理する事もOK。
STOP:
< グループ指定 >
また、SHが処理の先頭に必要ない、という事なら、グループ指定して、そのグループを対象に処理する方法もあります。
SHT:?*1::4:G4:ESC:
S:G4:1:1::G4:
STOP:
処理させたいページを聞く方法は他にも色々有りますが、一般的で無難なのは ACCPNUM と思います。
ACCPNUM:メッセージ:最小値:最大値:キーを押したときに代入する値:?:
具体的な書き方は
例えばデータが現在、1ページから300ページまで入ってるとします。
そして今年中に700ページまで入る可能性が有るとします。
301〜700ページまでは、DL:Aでデータを抜いた原票だけを書いておきます。
(これは、空白頁が有ると SH 等でエラー終了する可能性が有る為です。)
で、月々、或いはその時その時、オートに対象ページを聞かせたいならば。
ACCPNUM:処理する対象は 何ページから :1:700:1:?:Z1=Z0:
ACCPNUM: 何ページまで :Z1:700:Z1:?:Z2=Z0:
*ここにSとか、UPDとか、処理を書きます。
STOP:
これでミス入力は刎ねられますから、現在ファイルに関しては或る程度OKです。
あれ?何ページだっけ?とか、途中で中止させたい時にも対応するなら、
Z0=0:ACCPNUM:処理する対象は 何ページから :1:700:1:?:Z1=Z0:
IF Z0=0 THEN:STOP:ENDIF:
Z0=0:ACCPNUM: 何ページまで :Z1:700:Z1:?:Z2=Z0:
IF Z0=0 THEN:STOP:ENDIF:
*ここにSとか、UPDとか、処理を書きます。
STOP:
で、エスケープを押した時、中止出来ます。
問題は、他のファイルも指定したい事が有る時です。
ACCP:処理する対象は 何ページから :?:V1=V0:
ACCP: 何ページまで :?:V2=V0:
*ここにSとか、UPDとか、処理を書きます。
STOP:
これならば、先頭ページに M/100 といれようが、S1 と入れようが自由です。
V変数の場合、中止したい時は次のように書きます。
決まってるわけでなく、「ACCPでエスケープを押された時、ZO、V0の内容は変わらない」という経験から、私が自分で考えた方法です。
[中止…ESC] と書いた時、エスケープと思わず実際に「ESC」と入れる方がいらしてもOKで、何かと重宝しています。
V0="ESC":ACCP:処理する対象は 何ページから :?:V1=V0:
IF V0="ESC" THEN:STOP:ENDIF:
V0="ESC":ACCP: 何ページまで :?:V2=V0:
IF V0="ESC" THEN:STOP:ENDIF:
*ここにSとか、UPDとか、処理を書きます。
STOP:
V変数を使う場合、こういう書き方も出来ます。
V0="ESC":ACCP:処理対象は 何ページから何ページまで :?:V1=V0:
IF V0="ESC" THEN:STOP:ENDIF:
*ここにSとか、UPDとか、処理を書きます。
STOP:
但し、エラーチェックが大変になりますので、エラー終了しても良いように作った方が良いでしょう。
上記理由で、オートのサブルーチンを作ってあります。
使い方のサンプルが入っていますが、詳しくは COPY2 をご覧下さい。
但し、結構オートに慣れているか、言語を触った経験の有るかた向きです。
ACCPFL.MYX 頁指定チェッカーのダウンロード
戻る
2000/08/27 -