文字列から文字列までを削除したいNo.38645
nobu1 さん 21/01/12 07:10
 
マクロを使用して、文字列から文字列までを削除したいです。複数のファイルで行う
ため、マクロでの書き方を教えてほしいです。

ファイルに、

<p><a href="

#いろいろな文章#

広告"></a></p>

があったとします。
「<p><a href="」から「広告"></a></p>」を指定することで、その間の文章を全部削
除できるようにしたいです。同時に、「<p><a href="」「広告"></a></p>」も削除で
きると、ありがたい。

1行ではなく、複数行にまたがる #いろいろな文章# を削除したいです。
削除ではなく、別の文字列に置換できるとさらに、ありがたい。

「<p><a href="」から「広告"></a></p>」までの文字列が、1ファイルに複数個あっ
た場合、全部処理できるとありがたい。

置換で不要な文字列を消す方法(正規表現) のページを見たけど、マクロで実行した
いのでマクロでの書き方を知りたい。

よろしくお願いします。





[ ]
RE:38645 文字列から文字列までを削除したNo.38647
秀丸担当 さん 21/01/12 10:20
 

まず、一連の操作を繰り返したりするのは、キー操作の記録と再生を使うと簡単です。
以下のようにして操作を記録できます。

1.キー操作の記録開始(標準でShift+F1)
2.検索ダイアログで「<p><a href="」を検索。
3.「選択開始」コマンド(標準でShift+F6)
4.検索ダイアログで「広告"></a></p>」を検索。
5.Delete
6.キー操作の記録終了(標準でShift+F1)

終わりの文字列のほうはカーソル右移動したり、あるいは正規表現とかで「(?<=広告
"></a></p>)」とかで終わりまでにしたほうがいいですが、ここでは簡潔にしています。
記録ができたら、キー操作の再生(標準でShift+F2)をすると、同じ操作ができます。

キー割り当て可能なコマンドの「キー操作のリピート再生...」を使って、「検索・
カーソル移動ができなくなるまで」で再生すると、マクロを作らなくてもできてしま
います。
キー操作のリピート再生は、[その他]→[キー割り当て...]で割り当てたり、[その
他]→[メニュー編集...]でマクロ(M)メニューに入れることもできます。

--------

次にマクロにする場合、[マクロ]→[キー操作の保存...]をすると、記録したものを
マクロとして保存することができます。
上記の操作では以下のようなマクロになります。

    setcompatiblemode 0x0F;
    searchdown2 "<p><a href=\"" , hilight;
    if( ! result )  beep;
    beginsel;
    searchdown2 "広告\"></a></p>" , hilight;
    if( ! result )  beep;
    delete;

繰り返し処理をするには、while(1){〜}で囲うと繰り返します。
繰り返しを抜けるにはbreak;を書くと抜けれますが、保存されたマクロは失敗時に
ビープ音を鳴らしているだけなので、beep;の部分をbreak;にするといいです。
繰り返しをして検索文字列が無かったら終わるには以下のような感じになります。

setcompatiblemode 0x2000F;
while(1){
    searchdown2 "<p><a href=\"" , hilight;
    if( ! result ) break;
    beginsel;
    searchdown2 "広告\"></a></p>" , hilight;
    if( ! result ) break;
    delete;
}

setcompatiblemodeというのは互換性の指示のためのもので、あっても無くてもいい
ですが、0x20000を加えて検索文字列が変化してしまわないようにしておくのがいい
と思います。
詳しくはヘルプを参照してください。
文字列に置き換えたりするには、最初のキー操作の記録で文字列を実際に挿入して記
録すると、そういうマクロができると思います。

[ ]
RE:38647 ありがとうございます。No.38652
nobu1 さん 21/01/12 19:47
 
10年以上前から使っていますが、このソフトを超えるものはないです。
特に、日本語と中国語とロシア語をまともに読んでくれて編集できるソフトがなくて、
秀丸だけが唯一できたので、重宝していました。今もずっと使い続けています。あり
がとうございました。

[ ]