自分の通っていた小学校のあるある

秀丸エディタのマクロを使って以下の処理を行おうとしました。

1.検索した文字の一行下の行をコピーし、
  そのコピーした行末にコピーしたデータを貼り付ける。
2.最初に検索した文字に該当する次の文字の一行下の行をコピーし、
  そのコピーした行末にコピーしたデータを貼り付ける。
  (繰り返し。)
3.文末(EOF)まで2.の処理を繰り返す。

以下のマクロを作ってみました。

while(code != eof){
setcompatiblemode 15;
searchdown "検索文字" , hilight;
down 1;
copyline;
paste;
finddown;

すると、2.の処理まで正常に実行されるのですが、
検索文字がなくなった時点で2の処理がストップされる事がなく、
それ以降の行のすべてが文末(EOF)まで、コピー&ペーストの処理が
繰り返されます。

例:______________________________________________________
(元の文)
○○
×××
△△
■■■
○○
□□□□
☆☆

(検索する文字)
○○

(マクロ実行後の文)
○○
×××
×××
△△
■■■
○○
□□□□
□□□□
☆☆
☆☆
______________________________________________________

上記の例でいうと、(元の文)の☆☆の部分が、(マクロ実行後の文)で
☆☆
☆☆
となってしまってます。
この部分を
☆☆
のままにしたいのです。

マクロをどのように組めば実現できるのでしょうか。
よろしくお願いします。

A 回答 (2件)

以下のようにしてください


----------------------------------------------------
setcompatiblemode 15;
//ファイルの先頭へ移動(カーソルがどこにあっても良いようにするため)
gofiletop
searchdown "検索文字" , hilight;
while(1){
if (result == 0) { break;}
//行頭へ移動(しないと正しくコピーできない)
golinetop;
down 1;
copyline;
paste;
finddown;
}
------------------------------------
不明点は、聞いてください。動作確認済みです。
    • good
    • 1
この回答へのお礼

助かりました!ありがとうございます!\(^o^)/

お礼日時:2007/12/29 10:56

searchdownの実行のあとの行で、検索対象が見つかったかどうかを


チェックすればよいのでは?

マクロヘルプから

成功したかしなかったかによって結果コードを返します。結果コードはresultキーワードで参照することができます。
 成功した場合は1(TRUE)になり、失敗した場合は0(FALSE)になります。

この回答への補足

マクロの文の組み方がわかりません。
今回の場合、どのような文になるのでしょうか。

因みに先ほどの文で記載間違いがあったので訂正させていただきます。

finddown;の後の
}
が入ります。

以上、よろしくお願いします。 

補足日時:2007/12/28 15:18
    • good
    • 0
この回答へのお礼

マクロヘルプを見て以下に書き換えてみましたが上手くいきません。
while文を使うのでしょうか。どのような文になるのでしょうか。

searchdown "検索文字/" , hilight;
down 1;
copyline;
paste;
finddown;
if( result == 0 ) {
endmacro;
}

お礼日時:2007/12/28 19:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報