過去の桐井戸端BBS (桐ver.8)
4841 繰り返し処理を途中で止めたい kaz 2000/02/23-23:37
こんばんは^^
いつもお世話になってます。
以前の書込みで、テキストファイルを連続的に読込んで、桐の表データに追加する
というような処理を行っているんですが。
実行ボタンで開始するわけですが、ファイル数が多くて途中でキャンセルしたい場合の処理について
自分で考えた方法は ●機能キー入力●でその記述を繰り返し処理の中ほどに埋め込みました。

機能キー入力 (2,1),プロンプト="中止:ESC",文字キー=無効,入力待ち=しない,&変数
条件  (&変数=27) 繰り返し中止   /*ESCキーでキャンセル*/

この記述で中止はできますが、ちょっとだけ納得できません。

コマンド検索の説明では
(<開始行>,<開始桁>)-(<終了行>,<終了桁>),プロンプト=<文字列>は一括実行ウィンドウ有りのときのみ有効である。

一括実行ウィンドウはたぶん使ってないので
機能キー入力 文字キー=無効,入力待ち=しない,&機能変数
この記述でもいいような気がするんですが形式エラーで((がないみたいなことを言ってきます。
これってやはり開始行と開始桁を入力しないとだめということでしょうか?

フォームに貼り付けた中止ボタンでスマートに繰り返しを中止したかっただけなんですけど・・・
だれか、よかったら教えてくださいませ。
長くなってすみません。m(--)m
ファイル>閉じるでも強制的に中止はできるけど・・・
デバッグの終了でも中止はできるけど・・・
スマートじゃなくて。
4850 Re:繰り返し処理を途中で止めたい 宮城 2000/02/24-10:27
記事番号4841へのコメント
独立したコマンドで処理するのはおもしろくないですね。(毎回止まっちゃう?)
繰り返しの中でなにをやってるかによるんですが、「終了状態」でエスケープキー入力を感知できそうな気もするんですけど。

ただ、できたにしても、それでいいんですか? 同じものを2度読み込まない工夫がいるように思えますが・・・。
4861 繰り返し処理の途中での中止方法 佐田 守弘 2000/02/24-22:10
記事番号4841へのコメント
kazさん

●繰り返しの中断方法
私は繰り返し処理を次の様に行っております。

変数 整数{&REP}
代入 &REP=1
繰り返し (&REP)
 <繰り返しを行う一連のコマンド>
繰り返し終了

ここで&REPは、繰り返しコマンドの繰り返しを行うかどうかを判断するフラグとして使っています。
繰り返しを行う一連のコマンドの中で、繰り返しを終了したい条件が成り立ったら、&REPに0を代入します。
従って、私は繰り返し中止コマンドは使いません。

この方法であれば、kazさんがご希望の繰り返しを途中で中断する事が簡単にできます。
コマンドボタンを使いたいとの事ですので、コマンドボタンに
機能名:なし 機能パラメータリスト:&set(REP,0)
を設定しておきます。このコマンドボタンを押せば、&REPに0が代入されるので、繰り返しが終了します。
もちろん、イベントハンドラを使って値を代入しても構いません。

●一連のテキストファイルを順次読込む場合
私は、読込み処理したいテキストファイルのリストを表に持ちます。
そして、この表からテキストファイル名を1つずつ取り出して、必要な処理をします。
この表の中に[済]の項目を設けておき、処理を終える度にここに1をセットしたらどうでしょうか。
つまり、コマンドは次の様になります。

表 テキスト一覧
絞り込み [済]=#未定義
代入 &REP=1
繰り返し (&REP)
 &TXT=[テキストファイル名]
 表 <読込む表>
 読込み テキスト ・・・・・
 編集表 テキスト一覧
 行訂正 [済]=1
 ジャンプ 行番号=+1
 条件 (#終端行) 代入 &REP=0
繰り返し終了

テキスト一覧の表で終端行まで処理したら&REPに0を代入して繰り返しを終了します。
この条件とは別に、コマンドボタンの機能やイベントなどで&REPに0を代入すれば、繰り返しが中断できます。
もちろん、読込み処理を行う事と、[済]の項目に1をセットする事を行ってから繰り返しを終わりますから、次に行う時には、
その続きからの処理が行えます。

佐田守弘(KS-00119)

4886 Re:繰り返し処理の途中での中止方法 kaz 2000/02/27-07:11
記事番号4861へのコメント
ちょっと仕事がいそがしくて、しばらくこれなかったんですが、
くわしい説明をしていただきありがとうございます。
宮城さん、佐田先生にまでお手数をおかけしましてもうしわけありません。

佐田先生のコメントを見る前にコメンドボタンに #代入(&判定フラグ,27)を
設定して エスケープキーの代用もどきをテストして失敗しました(?)
&判定フラグには27がセットされているはず(未確認ですが)ですが中断できませんでした。
できそうな気がしたんですが・・・

そこで、いま佐田先生のコメントを拝見しもう一度やりなおしてみようと思います。

>繰り返し (&REP)            ←●この記述が最大のポイントだったんですね(たぶん^^;)●
> <繰り返しを行う一連のコマンド>
>繰り返し終了

> 行訂正 [済]=1            ←●この記述は2度読みを防ぐポイントですね(たぶん^^;)●


&REPに0をセットすれば繰り返しは終了するんですね。
繰り返し中止コマンドをつかわなくても中止できたんですね。

コメントが遅くなりましたが、ほんとうにありがとうございました。m(--)m

戻る