変換リストによる連続置換 のマクロから連No.03984
kendo さん 03/11/29 11:40
 
 表題の『変換リストによる連続置換 Ver2.00』は山紫水明様がアップ中の便利な置
換マクロです。
 このマクロで使用する変換リストから、勝手に連想しました(すみません!)。そし
てそういうマクロは可能でしょうか。

 たとえば英語か何かのテキストを読んでいます。自分用のメモを作ります。
memo.txtとかします。内容はたとえば

huddle^ごたごた集める。
hue^色
caries^虫歯
......

といったものです。つまり
文字列1^文字列2 を並べたファイルです。(^は取りあえずの区切りの印です。)
これをどんどん書いていって、ソートすればalphabet順になり、ちょっとした私用の
辞書になります。さらに

 文字列1と文字列2を一括して入れ替えれますと、

私用の和英辞典ができます。
こうしたこと可能でしょうか。

 これはもともとむかしむかし『VZエディタ』のマクロで syoさんという方が作ら
れた「stool」というマクロの機能の一部分です。この部分だけでもとても便利なの
で連想しました。
(すでにライブラリにこうしたマクロはあるのでしょうか。ありましたらお教えくだ
さい。)

 なお、このstoolはWZエディタ用のマクロに変身していまでもあるようですが、
ちょっと秀丸のマクロの中には同種のものはないみたいです。
 ご参考に、stoolマクロの機能を簡単に紹介します。(syoさんのstool.txcの使用説
明書からの引用です。)
---------------------引用
  A 行頭からキーワード直前まで削除
  B 行頭からキーワード含み削除
  C キーワード直後から行末まで削除
  D キーワード含んで行末まで削除
  E キーワード含む行を削除
(......)
 ◆注意
 ・実行前に、確認の警告だしますので、処理寸前で取りやめることができます。
---------------------引用終わり
 VZではこのほかに文字列入れ替えが付いていました。

 私の場合、VZ版のD的機能が便利でした。
 まるで口述筆記みたいにだらだらと、とにかく文章を書いていって、読み直して
「文」の途中でなにかめずらしい文字列を埋め込んで、その部分以降は捨てて文章を
推敲できました。いま考えると、「行」よりも文の終わりまででもいいように思いま
す。
(上のマクロでは「行」というのはエディタ的な意味の「行」ですので、改行するま
でということだと思います。)

 ごたごたしました。記事の趣旨をまとめます。

次のようなマクロは可能でしょうか:
1. 文字列1^文字列2 をリストにして並べたテキストファイルで、
   文字列1を文字列2一括して入れ替える

2. テキストファイルである文字列を埋め込んで、その文字列以降、その文字列を
含む文(または論理行)の最後までを削除

よろしくアドバイスお願いいたします。

[ ]
RE:03984 変換リストによる連続置換 のマNo.03990
山紫水明 さん 03/11/30 10:15
 
 kendoさん,こんにちは。

》 これはもともとむかしむかし『VZエディタ』のマクロで syoさんという方
》が作られた「stool」というマクロの機能の一部分です。この部分だけでもと
》ても便利なので連想しました。
》 (すでにライブラリにこうしたマクロはあるのでしょうか。ありましたらお
》教えください。)

 Vzエディタは私も前に愛用していました。そこそこのマクロも作ったのです
が,今はもう眠っています。
 ライブラリにはすでに類似のものがあるかもわかりませんが,以下のようなも
のを作ってみました。

     では, (^^)/~
                                        山紫水明

//-------- DealLine.mac --------------------------------------//
//  行の各種操作

$kd1 = "#";//指定文字初期値:変更できます
$tail = "。?.?";//文末記号:変更できます
if( selecting ) {
    #topy = seltopy;
    #endy = selendy;
    #select = 1;
    escape;
    moveto 0, #topy;
}
$k = input( "指定する文字は?", $kd1 );
if( $k == "" ) endmacro;
menu "&A 指定文字前後の入れ替え",
     "&B 指定文字から行末までを削除",
     "&C 指定文字から文末までを削除",
     "&D 行頭から指定文字までを削除",
     "&E 指定文字を含む行を削除";
#r = result;
if( !#r ) endmacro;
disabledraw;
if( !#select ) gofiletop;
if( #r == 1 ) call Change;
else if( #r == 2 ) call DeleteAfterLine;
else if( #r == 3 ) call DeleteAfterSentence;
else if( #r == 4 ) call DeleteFront;
else call DeleteLine;
endmacro;

Change: //  指定文字前後の入れ換え
while( code != eof ) {
    if( #select && y >= #endy ) break;
    #bx = x; #by = y;
    golineend2;
    #ex = x; #ey = y;
    $s = gettext( #bx, #by, #ex, #ey );
    #str = strstr( $s, $k );
    if( #str < 0 ) {
        ##line = lineno;
        movetolineno 1, lineno + 1;
        if( ##line == lineno ) break;
        continue;
    }
    $s1 = leftstr( $s, #str );
    $s2 = midstr( $s, #str + strlen( $k ) ,999 );
    selectline;
    delete;
    golinetop2;
    insert $s2 + $k + $s1 + "\n";
}
return;

DeleteAfterLine: //  指定文字から行末までを削除する
while( 1 ) {
    searchdown $k;
    if( !result ) break;
    if( #select && y >= #endy ) break;
    deleteafter;
}
return;

DeleteAfterSentence: //  指定文字から文末までを削除する
while( 1 ) {
    searchdown $k;
    if( !result ) break;
    if( #select && y >= #endy ) break;
    #line = lineno;
    beginsel;
    searchdown "[" + $tail + "]", regular;
    if( ( #line != lineno) || ( result == 0 ) ) {
        escape;
        movetolineno 1, #line + 1;
        continue;
    }
    right;
    delete;
}
return;

DeleteFront:  // 行頭から指定文字までを削除する
while( 1 ) {
    searchdown $k;
    if( !result ) break;
    if( #select && y >= #endy ) break;
    right;
    beginsel;
    golinetop2;
    delete;
}
return;

DeleteLine:// 指定文字を含む行を削除する
moveto 0, #endy;
#eline = lineno;
moveto 0, #topy;
while( 1 ) {
    searchdown $k;
    if( !result ) break;
    if( #select && lineno >= #eline ) break;
    selectline;
    delete;
    #eline = #eline - 1;
}
return;
//----------------------------------------------//


[ ]
RE:03990 変換リストによる連続置換 のマNo.03991
kendo さん 03/11/30 10:54
 
山紫水明様、
 kendoです。関東地方に住んでいまして、かなり雨が降っていて、起きたときとて
も気持ちが重かったのですが、この素晴らしいマクロを拝見してぱっと気持ちが明る
くなりました。
 スゴイです。うれしいです。感激!です。ありがとう、ありがとうございます。
#の前後の入れ替えも、かなり長い文字列やスペース区切りの文形式の文字列で試し
てみましたが、問題ありませんでした。

目印となる記号が任意に選べる点、また、文、行(論理行)のどちらでも選択して処理
できることなど、とにかくとてもとても使い勝手がよいです。

 いかに山紫水明様がマクロの達人とは言え、10分かそこいらで作成といういう訳
にはいかないと思います(でも本当はそのくらいでできてしまうのかも。)。
 貴重なお時間をさいて頂き、ありがとうございます。ずっと長く愛用していきます。
 ぜひ、ほかの方も愛用して欲しいと思います。そして感想を聞かせて欲しいです。
 この一つ前の「抜き出し・追い出しマクロ」(自分で勝手に名前をつけました)も
さっそく重宝しています。
 

> Vzエディタは私も前に愛用していました。そこそこのマクロも作ったのです
>が,今はもう眠っています。
> ライブラリにはすでに類似のものがあるかもわかりませんが,以下のようなも
>のを作ってみました。
>
>
>//-------- DealLine.mac --------------------------------------//
>//  行の各種操作
(以下省略しました。)

[ ]