一括表示

− 野ざらし言 −

[2282] TOSFIND用のマクロ

でがらし 2007/09/20(Thu) 20:36
 としきさんの TOSFIND を VZ のマクロで動かすように、 IZGREP
用のマクロを利用して、 下記のマクロを作りました。しかし、
c:\tool\TOsfind c:\ /n$%s$ の部分をコマンドラインに記述して
フリーズします。どこが悪いのか、教えて下され。

 C:\に入っているすべてのディレクトリの中から、 指定したファ
イルを探し出して c:\file.txt に結果を報告させたいです。

 なお、ファイル名はほとんど英字だけなので、日本語変換を
マクロ起動時にオフにしたいですが、 これは

?. #F&Cr(r)?.

 の下に下記の1行を入れたらいいんでしょうか?

&j(0)

== TOSFIND.DEF ==
* M
25 "" ;
?. #F &Cr (r)?.
#E &?("c:\tool\TOsfind c:\ /n$%s$>c:\file.txt",ps,pw) #m
#[ #O "c:\file.txt" #m
*

[2283] Re: TOSFIND用のマクロ

としき 2007/09/20(Thu) 23:06
[2282]へのコメント http://www.hinocatv.ne.jp/~toshiki/
うちで試すと、一見、このマクロは正しく動いているようです。
ただ、試した環境が生DOSで、tosfindそのものが動作をしないので、本当
に正しく動いているかはわかりません。

ということで、今のところの可能性。
というか、思いつきにすぎないのですけど。

その1:
tosfindがバグっていて、このツール実行中に固まる
→細かいバグレポをすれば、バグが直る可能性があります
 あ、いや、作者自身が直すとは限りませんよ

その2:
きちんと動いているんだけど、検索しているディスク容量が巨大で、
一見フリーズしているように見えるだけ
→一晩置いておけば、結果が出るでしょう。

その3:
マクロがおかしい
→フリーズするところに原因があるとは限りません
 もちろん、フリーズするところに原因があることもあります
 ところで、%sは1つしかないようなんですが、このマクロの
 意図として、ここにはpsとpwのどちらを表示したいのでしょうか?


とりあえず、マクロ初心者の私にはさっぱり原因が判りません。
多分、マクロに詳しい人が謎を解き明かしてくれることでしょう。
 

[2284] Re: TOSFIND用のマクロ

めざら 2007/09/21(Fri) 00:42
[2282]へのコメント <mezala@nifty.com> http://homepage3.nifty.com/mezala/index.html
> c:\tool\TOsfind  c:\ /n$%s$ の部分をコマンドラインに記述して
> フリーズします。どこが悪いのか、教えて下され。

1. tosfind の書式と異なる
 まず,tosfind の要求する書式に従って書きましょう。
 tosfind のマニュアルを読みましたが, ファイル名を $ で括るとは書いて
いないはずです。ディレクトリ名にスペースを含む場合だけ二重引用符で括る
ことは必要のようですけれど。

2. 必要のない引数 pw がある
 %s がひとつしかないのに,ps と pw が引数になっています。

3. FEP/IME をオフにするタイミングが遅い
 マクロ起動時にオフにしたいなら,
        ?. &j(0) #F …
 …のように,窓を出す前に実行しましょう。

4. #F を使うなら mp を制御
 #F で文字列を取得すると, ページングモードが変化したままになってしま
います。それでもよければかまわないのですが,元のページングモードを保存・
復帰するのが行儀がよいように思います。
 なお,#F で取得した文字列は ps に残ります。 これも行儀が悪いと思えば
pa などにすり替えるという手もあります。


こんな感じ?

== TOSFIND.DEF ==
* M
25 ^\ ""
        ?. 
        &j(0)                           ;FEP/IMEをoff
        mp[, ps[=pa,                    ;モードや履歴を保護
        #F &Cr                          ;入力を待つ
        ps], mp],                       ;モード・バッファ復帰
        (r)?.                           ;[ESC]/[CR]はキャンセルと看做す
        #E &?("c:\tool\TOsfind c:\ /n%s >c:\file.txt",pa) #m
        #[
        #O "c:\file.txt" #m
*

[2285] TOSFIND用のマクロ:完成万歳

でがらし 2007/09/21(Fri) 06:56
[2284]へのコメント
 としきさん、めざらさん、レスありがとさんです。

 めざらさんの作ってくれたマクロでうまくいきました。万歳です。

1。 tosfind のマニュアルは読んだんですけど、IZGREP 用のマク
ロでは "が使われていて、それだと試したらうまくいかないので、
"を取ったら $ が裸で出ちゃったんです。 後で、IZGREP 用のマク
ロを載せます。

2。pwの件、実は昔、文太さんに指摘されていましたが、怠惰で、
そのままになっていました。psとpwのどっちかがいらないこと
は覚えていたんですが、どっちかわからなくなったので、そのまま
にしてました。

3。FEP制御の件、了解です。

4。 #F で文字列を取得するのが IZGREP 用マクロの方法だったの
で、それ以外の方法は思い付きませんでした。ページングモードが
変化したままになってしま

#F &Cr ;入力を待つ
ps], mp], ;モード・バッファ復帰

 詳しくわかっていませんが、この2行は丸呑みで使うということ
にするとよさそうですね。

 で、 IZGREP 用マクロが心配になってきたんで、ちっと見てくら
はい。別建てにします。

[2287] この機会に覚えるべきこと2件

めざら 2007/09/21(Fri) 08:26
[2285]へのコメント <mezala@nifty.com> http://homepage3.nifty.com/mezala/index.html
> psとpwのどっちかがいらないことは覚えていたんですが、
> どっちかわからなくなったので、そのままにしてました。

 この機会に覚えてください。
 #F や #G で取得した時は,ps に格納されます。
 &g() や #J で取得した時は,pw に格納されます。

 どちらかわからなかったら,どちらか片方を削除してみればよかったのでは?
 引数が多いというのは思わぬ不具合を引き起こす原因になりかねませんよ。

>  詳しくわかっていませんが、この2行は丸呑みで使うということ
> にするとよさそうですね。

 ps[, と ps],	…文字列バッファのアドレス保存・復帰
 mp[, と mp],	…ページングモードの保存・復帰

 これらをセットで覚えてください。
 そして,これらは入れ子にする必要があります。
        ps[=pa, ;(1)
        mp[,    ;(2)
        #F &Cr
        mp],    ;後から入れた(2)を先に復帰
        ps],    ;先に入れた(1)を後に復帰

 これは,「ごっくん」では済みません。

[2293] ちっとむずかしいので

でがらし 2007/09/21(Fri) 22:40
[2287]へのコメント
 ここ、ちっとむずかしいので、ゆっくりといきます。

[2297] Re: ちっとむずかしいので

めざら 2007/09/23(Sun) 07:22
[2293]へのコメント <mezala@nifty.com> http://homepage3.nifty.com/mezala/index.html
>  ここ、ちっとむずかしいので、ゆっくりといきます。

 そうですね,最初はバッファがどうこうなんてことは気にせず,エディタの基本機能を利用することに徹した方がよいでしょうね。要は便利になりさえすればよい,時間が節約できればよい,手数が減ればよい…ということでよいと思います。

[2288] Re^2: TOSFIND用のマクロ

としき@会社 2007/09/21(Fri) 08:48
[2284]へのコメント http://www.hinocatv.ne.jp/~toshiki/
> 1. tosfind の書式と異なる

おぉ、これはまったく気がつきませんでした。

>  まず,tosfind の要求する書式に従って書きましょう。

ごめんなさい、反省します。

[2290] Re^3: TOSFIND用のマクロ

めざら 2007/09/21(Fri) 10:19
[2288]へのコメント <mezala@nifty.com> http://homepage3.nifty.com/mezala/index.html
 何も,としきさんが反省なさることはないと思いますが…

 ところで,ファイル名指定部分を二重引用符で括るのはありですか? ディレクトリ名にスペースがある場合は説明がありましたが,ファイル名は特に説明がなかったような。スペースあり/なしにかかわらず二重引用符で括ってしまったほうが,汎用性が高くなりそうですけれど。


 本日は遅番。
 ちょうど出て行く頃に,酷く暑くなっていそうです。
 もうすぐ彼岸なのに,この暑さはどうだろう。(@o@)くらくらしちゃう

[2291] Re^4: TOSFIND用のマクロ

としき@会社 2007/09/21(Fri) 13:22
[2290]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  何も,としきさんが反省なさることはないと思いますが…

いやいや、その辺のところをまったくチェックせずに、一見正常と答えてし
まったことを反省しているだけです。

>  ところで,ファイル名指定部分を二重引用符で括るのはありですか?

なしのようです。
WEBで公開されているソースリストをチェックしてみたところ、ディレク
トリ名の二重引用符を引っぺがす処理はOSというかcmd.exeにまかせてしま
っているようです。
一方、ファイル名のほうは、このアプリが自前で処理していますが、ソース
を見た範囲ではその手の処理が作りこまれていませんでした。
えと、このツールの元になったTFINDではどういう仕様になっていましたっけ。
会社には持ってきていないのでよくわからないのですが、そちらと同じよう
になっていたような記憶があります。
もし、TFINDと仕様が異なるのであれば、改善される可能性はあるかもしれま
せんが、仕様が異なっていないのであれば、そもそもの設計理念から考えて、
作者自身による改善は絶対に望めないものと推測されます。もちろん、ソー
スが公開されていますから、勝手に改造してしまうのはありでしょうけど。
そういえば、めざらさん、コンパイラを持っていましたよね?
 

[2292] Re^5: TOSFIND用のマクロ

めざら 2007/09/21(Fri) 20:41
[2291]へのコメント <mezala@nifty.com> http://homepage3.nifty.com/mezala/
 うーん、やはり二重引用符はだめですか。ワイルドカードが使えるから不要なんでしょうね。

> そういえば、めざらさん、コンパイラを持っていましたよね?

ギョギョ。持ってるような持ってないような。
ライセンスもどうなっていたか覚えていないです。…と言うか、誰でも持つだけは持てるんですもんね。

↑ このページの先頭