> 今度の部品はひょっとして複数の不要行を指定するのに使えるの
> かなと思っちゃったわけです。
> 「カーソル位置から次の空行まで取得して参照型メニュー表示」
> というのを読んで、カーソル位置にある行を順にメニューに蓄積表
> 示していくのかと想像しちゃったんです。こんな感じで。
> 1。削除行指定
>
> 削除したい行の上で起動すると、それを下記のようなリストに追加する。
> 2。指定行一括削除
>
> 別の起動キーを押すと、上記のリストに表示された行すべて(フ
> ァイル内にある複数行すべてということ)を一括削除する。
> 1+1。削除文字列指定
>
> 削除したい行に含まれる文字列を順に下記のリストに追加する。
> で、その文字列が含まれる行を一括削除するのは上と同じです。
> 「削除したい行に含まれる文字列を順に下記のリストに追加する」
> というのは、行全部を登録しなくても、行の中の特定の文字列だけ
> を登録すれば、その文字列を含む行をすべて削除するというつもり
> だったです。
> その行まで行って登録するのが面倒なことがあると思
> ったもんですから。それと行が長いときとか。たとえば下記の行を
> 文字列は1つだけを考えており、複数のキーワードが含
> まれる行を指定するつもりではありません。
一括置換のサンプルを書いてみました。 あらかじめ元ファイルの拡張子と語句ファイルを合わせておく必要がありま す。 例えばニュースなら hoge.nws が元ファイル,語句ファイルが news.rpl という感じになります。 ----------^ IKKATSU.DEF ( date:2007-06-14 time:05:39 ) -----< cut here = ikkatsu = by H_ear #if 0 外部ファイルの項目にマッチする行を一括削除 #endif * mad for vz! 1 ^\ "" ?. &s (tc>wc)??{ &m(6) . } ;'オープンできません' a=id, ;編集ファイルのテキストidを記録 ; ---- Customize ---- (ne=='NW')?{ f="NEWS.RPL", >f } ;neは拡張子の先頭2文字 (ne=='BL')?{ f="BLOG.RPL", >f } ;f:削除語句ファイル (ne=='ET')?{ f="ETC.RPL", >f } ;いくつでも指定可,複数拡張子指定可 &Sc(pa,wa+146) &Sy(pa) ;パス名を解析 p=bx, (r&2)?cx.0-, ;ファイル名抽出 &Sx(p,"NEWS") (r)??{ f="NEWS.RPL", >f } &Sx(p,"BLOG") (r)??{ f="BLOG.RPL", >f } f="ETC.RPL", ;どれにも当てはまらない雑多なものとか :f ; ---- open file ---- mx[+, #R &?("%s%s",pi,f) #m (s)?{ 'n' f-, } mx], ;pi指定推奨 (f)??>z ;オープンできなければ終了 b=id, RX[+, mp[, ps[=pa, mi[=mb-, :l ; ---- main loop ---- (ct<2)?>n #b #> #G &#T(-a) &m(20) ;'全部一度に置換します' #56 #e ".*" #< ".*" #m #m "ay" ;一括削除置換 &#T(-b) :n #d (r==0 || ct)?>l mx[+, #C mx], &#T(-a) :z ; ---- exit ---- (f)??{ &m(41) } ;'準備ができていません' mi], ps], mp], RX], &d #] . * [Variables] a,b text id f filename/flag p ptr bx,cx,si &Sy() rtn [Buffers] pa as ps [History] 2007/06/14 0.10 初版 [Notes] ・正規表現の行バッファが心配 ・改行が残る ----------$ IKKATSU.DEF ( lines:47 ) -----------------------< cut here 名前が安易だなぁ…(笑)
> ほとんどのファイルの拡張子は TXT なんで、それをどうするか、迷います。
> おー、それはありがたいですが、TXTの拡張子の場合でも、
> NEWSのところにファイル名(例えばXX.TXT)を入れてやれば
> いいってことですか?
> 下記の2つの関係がわかりません。上のほうが下のほうへ
> 利いてくるんだと思ったけど、上はこのままにして、下のほう
> だけファイル名を書けばいいのでしょうか?
> 拡張子がSTKのファイルで試したときは
>
> (ne=='ST')?{ f="STK.RPL", >f }
>
> を上の行の下に追加しました。
> マクロ FAQ は前と表示が変わりましたか? 見易くていいです
> ね。ご紹介のページ、下記の部分、「を」がだぶってました。
> これは別建てにしたほうがいいかな?
語句の登録ってこんな感じですかね。 何度も同じ入力は面倒なので,いくつかの登録語句を \n で区切っていれば 一度に登録できるようにしました。 ----------^ KILLWORD.DEF ( date:2007-06-10 time:06:41 ) ----< cut here = KILLWORD = by H_ear #if 0 語句登録 #endif * mad for vz! 1 ^\ "" ?. pa.0-, mx[+, (mb-2)?{ pw[=pa, &g("登録語句",40) &Cr pw], }?{ ps[=pa, mp[, #G mp], ps], } (pa.0)??>z ;取得されていなければ終了 &s #R "nul" #m (s)?"y" ;一旦作業ファイルを開く #n &?("%s",pa) ;行単位登録のため#n必須 ps[=pa, #56 "\\n" #m "\n" #m "ay" ps], ;\nで区切れば複数登録可 mb-, pr[=pa, #A ;全アペンド &?("%s",pi) ;pi:defファイルの参照パス\つき "KILLWORD.RPL" ;※ファイル名と拡張子のみ #m (s)?"y" pr], #C ;出力したら作業ファイルを閉じる :z ; ---- exit ---- mx], &d #] . * [Variables] - [Buffers] pa as pw/ps/pr [History] 2007/06/10 0.10 初版 [Notes] #Aを使ってみたかったわけ ----------$ KILLWORD.DEF ( lines:29 ) ----------------------< cut here
> 昨夜、レスつけてもらったの気付いていたんですが、くたびれて> たんで、今日になって考えようと思ってました。すばやい対応、あ> りがとうございます。さっそく KILLWORD.DEF を試してみました。睡眠は大事ですから,じっくりのんびりやりましょう。わたしも先週は休み が1日しかなかったため週の頭から疲れていて,コメントは2日遅れくらいだ ったでしょ。> (なおメーラーの利用は> 検討中。EDMAX にしようかな、それとも電八にしようかなとか)電八はメールが1通1通テキストファイルになっているのでデータの扱いは やりやすいのですが,インターフェイスが如何にも古いかなと思います。 EdMax は新しい認証システムの仕様に対応していないため, 例えば Gmail で POP/SMTP を利用することができません。Yahoo mail は可能です。 Thunderbird はかなり良いみたいですね。最近は相談されると Thunderbird を勧めています。それなりにバグもあるようですが,フィルターが優秀で手間 がかからないようですね。> それぞれの行をブロックするのが面倒です。それぞれの行の上で起動すると、> 削除したい行を自動登録すると便利です。ただ今の機能もほしいです。これは簡単ですよ。単純に自動ブロックするだけですから。ただ,行全体だ と長くなりますので一部でよいようにも思います。「今の機能」というのは, どの部分なのでしょう。多重登録かしら。> 削除したい行はファイルごとに異なります(メール用のファイル> とブログなどを保存するファイルを分けている)。そこで行を登録> するファイル(削除行登録ファイル)を複数作るようにして、それ> をリストで表示してどの削除行登録ファイルを利用するか、選択で> きるほうがよさそうな気がします。ファイルごとに分類してあって中身が異なるのであれば,ファイル名や拡張 子で自動判別するのがよいと思います。作製方面から見れば,拡張子が異なる 方が楽ですね。ファイル名の場合は特にディレクトリ名と切り分けて取り出す 必要があるので,いくつか余計にステップを踏むことになります。> 複数の登録ファイルを作るというのは削除行登録と単語帳登録の> 仕分けに利用できそうです。でもこれは killword.def の名前を変> えて、 それぞれごとに登録ファイルを変えればすみそうですねいやー,それはどうなんでしょう。作製方面から見ると簡単ですが,美しく ないと思います。ここはよい仕様を練るための思案のしどころだと思います。 わたしが美しいと思う仕様は,現テキストの拡張子かファイル名で自動的に 語句ファイルに振り分け,削除置換する場合も同様に自動的に語句ファイルを 選択するというものです。これは単に拡張子かファイル名を固定すればよいこ とですから,最も手間がかからず,コードも簡素になり,マクロも単一で済み ます。> ・シフト起動するとカーソル位置の論理行を取り込む。 ▼ここ追加▲pa.0-, mx[+, (ks&1)?{ mb-, #< #b #> (lh)?{ #< &x(78) } >g } ;この行追加 (mb-2)?{ pw[=pa, &g("登録語句",40) &Cr pw], }?{ :g ps[=pa, mp[, #G mp], ps], ;ラベル :g 追加 } (pa.0)??>z ;取得されていなければ終了 シフト起動で論理行登録は,こんな感じに修正すればできます。
> (3)美しい仕様には魅力を感じますが、私のように不器用だとあ> んまり美しいとなんとなく気が引けちゃって。美しいったって,コードの見通しがいいってだけのことですから,使う人は 何も考えずに定められたルールに則って実行すればいいだけですよ。(笑)> ただ拡張子で使い分けるとして、異なった拡張子のファイルが同> 一フォルダの中になきゃまずいんですよね? 異なった拡張子のフ> ァイルがそれぞれ異なったフォルダにあるっていうのじゃ同じこと> ですもんね(stk の拡張子のファイルが c:\stk の中だけにあり、> txt が拡張子のファイルが c:\txt の中だけにあるということ)。?? フォルダは関係ないですよ。どこのフォルダにあっても特定の拡張子であれ ば特定の削除対象語句ファイルに追加されるだけです。削除対象語句ファイル を pi で指示される特定のフォルダの拡張子別ファイルに作るのは,カレント ディレクトリがどこでも分散しないようにするためです。 でがらしさんの環境は,ディレクトリを絶対指定しないと,色々なところに 同一目的のファイルが散乱するようですので。> (4)シフト起動、うまくいきました。ありがとうございます。で、> やっぱり考えてみると、私の場合はこのシフト起動を普通の起動に> し、逆に今の通常起動をシフト起動にしてもらうと便利なんですけ> ど、この入れ替えは簡単にできますか?(ks&1)? を (ks&1)?? にするだけです。 (ks&1)?{ mb-, #< #b #> (lh)?{ #< &x(78) } >g } ;この行追加 ↓ (ks&1)??{ mb-, #< #b #> (lh)?{ #< &x(78) } >g } ;この行追加 VZ の条件分岐はちょっと特殊で,if 条件を評価して分岐した直後に評価し た値を逆転させるという特性があります。それで条件式を成立させています。 (条件)?{ 条件が真のとき実行 }?{ 条件が偽のとき実行 } (条件)??{ 条件が偽のとき実行 } ↑ { 条件が真のとき実行 } がすっぽり抜けていますので, 条件が真なら何も しません。これは最重要ですので,きちんと覚えておきましょう。
> (条件)?{ 条件が真のとき実行 }?{ 条件が偽のとき実行 }
>
> (条件)??{ 条件が偽のとき実行 }
> ↑
> { 条件が真のとき実行 } がすっぽり抜けていますので, 条件が真なら何も
> しません。これは最重要ですので,きちんと覚えておきましょう。
> 単語登録は今はこのファイルを開けて逐一手入力しています。VZ を使いながら,なんでそんなことに労力を使っているのか理解不能。 ぜひともマクロで不精者になって楽をしまくりましょう。> (1)起動すると文字列入力画面が出現する> (単語がブロックされていると、それを追加するというのもあるとよさそうです)これ,そのまんまですね。> (2)そこへ単語を入力すると、それを単語帳ファイルへ1論理行として追加する> (冒頭でも末尾でもかまわない)。これも,そのまんまですね。> この2つが基本です。実は KILLWORD.DEF の登録先ファイル名を> C:\A\TANGO.DEF に変えて試してみましたが、C:\NUL とかいう新し> いファイルへ単語が記録されて、 C:\A\TANGO.DEF への追加は失敗> しました。あー,やっちゃいましたか。(きっとやると思ってました。(^^;) 見てのとおり,フルパスで指定しちゃダメです。 &?("%s",pi) ;pi:defファイルの参照パス\つき "KILLWORD.RPL" ;※ファイル名と拡張子のみ pi は def ファイルを探すディレクトリで,末尾に \ も付きます。 例えば これが続けて出力されると,c:\vz\KILLWORD.RPL になるのです。明示的に 「※ファイル名と拡張子のみ」と書いておいたんですけどね。ファイル名部分 をフルパスで記述すると,c:\vz\C:\A\TANGO.DEF のようになってしまいます。 失敗してあたりまえということです。c:\nul は作業ファイルで,実行途中で 停止したため残ってしまったのでしょう。> 今はウェブで知らない単語を見つけることが多いので、それを自> 動で登録できると便利なんですけど、これはちょっとむずかしそう> ですね(窓のソフトでなら、こういうことできるのってあるんです> かね)。コンテキストメニューに入れることができれば可能でしょうけど,そういう 需要もないでしょうから,やっぱり VZ でやるのが楽でしょうね。特にマウス などで選択したものは改行が付かないので,1行1単語のファイルを作るなら 必ずひとつ改行を挿入しなければなりません。選択コピーしてから実行。 ----------^ CLBD2TNG.DEF ( date:2007-06-10 time:20:53 ) ----< cut here = clbd2tng = by H_ear #if 0 クリップボードの単語追加 #endif * mad for vz! 1 ^\ "" ?. &s #E &?("Clppst.exe /W tango.tmp") #m #[ mx[+, #O "tango.tmp" #m #> Je[=mi[-, #m Je], mi], ;必ず改行が必要 mb-, #A "tango.txt" #m (s)?'y' mr-, #C mx], :z ; ---- exit ---- &d #] . * [Variables] - [Buffers] - [History] 2007/06/10 0.10 初版 [Notes] カレントとか path に注意,Clppst が必要 ----------$ CLBD2TNG.DEF ( lines:21 ) ----------------------< cut here
> 累積時間を考えると、マクロがずっと速いんですけどね。
> ただ vz
> のフォルダの中に tango. txt というファイルがないのでうまくい
> かんかったんでしょう。
> pi を使って def のあるフォルダを指定することに意味があるん
> でしょうか? フォルダをパスで指定できると融通がききそうです
> が。
> とらじさんにも感謝です。画面の前で、ちゃんと柏手を打って頭を
> 下げました。
> とってもうれしい。こっちはフルパスで指定していいみたいですね。