FGALDC 15 /RE:19926 RE:dirlist, tosfind, bmama 関連 こんにちは、文太 さん tosfind の開発状況ですが、横着するために、他の方の作られたファイル検索ル ーチン(ワイルドカードはOS準拠)の完成度の高いやつをそのままリンクして みようしました。ところが、これをリンクするだけで、ファイルサイズが 200KB を越えてしまうことがわかりました。また、検索ルーチンを自作して、ファイル 名の比較ルーチンだけ Delphi の上位バージョンで使われているのとほぼ同じル ーチンを使うと、大体 TFIND と似たようなワイルドカードの使い方ができること がわかったのですが、これもやっぱりファイルサイズが 200KB を越えてしまうこ とがわかりました。ということで、やっぱり当初予定通り、OS準拠のワイルド カードが使えるルーチンを自作する事になりそうです。 さて、やっと BMAMA を試してみました。 中身はざっと見ただけなんですが、ディレクトリのリストを作るバッチで、例え ば TFIND C:\ /AD /N*.* なんていうものを使えば、ドコモバなり 200LX で使う こともできますね。 あ、でも、生DOSだと CD コマンドで引数を二重引用符でくくるのは受け付け てもらえないはずだなぁ。という事は、短いディレクトリ名のリスト専用にして 一切引用符をつけない、という制限を設けるか、さもなくばディレクトリ名に空 白を含んでいた場合のみ二重引用符をつけるようにする、という追加コーディン グが必要になってしまうので、そういう事を考えると、やっぱり窓なOS専用と いう事をうたっておいた方がいいのかもしれません。 ただ、これで気がついたのですが、上記の TFIND のオプション指定だと、出力結 果にはカレントディレクトリと上位ディレクトリを示す . と .. が表示されてし まいますね。tosfind ではこれらを表示しない予定なんですが、プログラミング の難易度によっては、結果的に TFIND 互換になってしまうかもしれません。 》★のところを変更してください。C:\ に勝手にCDしてるのは、コマンドライン 》の溢れ予防のつもりです。環境によっては、書き換えが必要になります。 えと、溢れ予防ってなんですか? どの部分で、コマンドラインがあふれるのでしょうか。 最初のバッチ走行時? それとも、最後の CD 実行時? 》 あんまり変なワイルドカード使って、思いっきり長ーーーいディレクトリを指 》定すると、正規表現に転換した時に窓から文字が溢れ得るのかもしれない、と思 》いつきました。(あり得ないと確信はできない)でも、どの長さでチェックした 》らいいのか分からないので、いじめないでね。使う人の善意に期待。もちろん、 》フルパスという話でなく、一つのディレクトリ名の話。 XP がどうなっているかは知りませんが、95/98/ME/NT/2K までだと、フルパスの 長さが最大258文字くらいだったと思います。なので、そのくらいでチェック すればよろしいかと。 ところで、SONOTA.TXT でちょっと書かれているようですが。 》 僕の説明は、Cドライブのことしか考えてないみたいですが、もちろん、多ド 》ライブにも簡単に対応できるはずです。バッチを書き換えましょう。但し、ドラ 》 このマクロの原理は、ものすごく単純です。リストから拾った行を、コマンド 》ラインでCDというコマンドの後ろにペーストして、リターンしてるだけ。です 》から、どのドライブでも、あれば、CDできます。 このバッチで別ドライブを指定していて、結果として得られたリストに別ドライ ブが記録されていた場合の動作って、単に CD しているだけですから、カレント ディレクトリって動きませんよね? つまり、最初のバッチで C:\ D:\ を指定していると、C:\TMP C:\WINDOWS\TMP だ けではなく D:\TMP も引っかかってくるので、当然一覧の中にこれらのディレク トリが表示されるわけですが、いま現在自分がいるドライブが C: ドライブだっ た場合、仮に D: ドライブや A: ドライブのディレクトリを指定しても、そのド ライブのカレントディレクトリが動くだけで、カレントドライブそのものは動き ませんよね。 ということで、去年の秋から12月中旬にかけての14階での、カレントドライ ブとカレントディレクトリの移動に関する議論を参考にされるとよろしいかと思 います。そうすれば、 》正直に告白すると、ファイラーやコマンドラインが主要使用場面になるマクロは、 》まだまだ僕の能力を越えてます。Vzの挙動が読めない。さて、どうなることやら。 少なくともコマンドラインに移行しなくてもいいし。 あ、でも、これをこのまま使おうとすると、やっぱり短いディレクトリ専用にな ってしまうなぁ。$713B を使わないとダメか。 最後におまけ。 文太さんのドキュメントだけを読んだ段階で、マクロの中身を見ずに自分でも似 たようなものを作ろうとしてみました。実は、今まで、メニューだの窓だので、 対話的に人間から入力をもらって動作するマクロって作った事がないもので、そ れの練習を兼ねてみようかな、と思ったのでした。 結果的にそこまで行かなかったのですが、以下のようなものができました。 = cd_test.def * m 1 ^\ "ChDir test" ?. &Sx(nm,"nul") (r==0)?{ #< #l #54 #E #u #< "cd " #m #[ ;ファンクションコールを使おう #S #m #C ;(s==4) のチェックはいらない? . }?{ #F &Cr ;&g の使い方を覚えよう ;空打ちだったときのチェックも欲しい #R "DIRS.LST" #m #N "NUL" #m #W :A #c (r)??{ #k #W #i #W >A } ;ZH や RX に対する考慮要 #C . } * エラーチェックが何もしていないけど、とにかく、ある限定的な環境ではたまた ま運良く動作することが確認できています。ま、私のマクロレベルっていうのは こんなもんだよ、ということで。 としき