指定した行数を削除して改行を入れるマクNo.04368
のんびりさん さん 04/06/01 17:45
 
はじめて投稿させていただきます。
2行目、22行目、42行目・・・以外を削除して改行を入れようと思って
以下のようなマクロを書きました。

while(lineno<linecount2){
 if((lineno)%20 != 2){
  deleteline;
  insert "\n";
  }
 down;
}

!=のところを==に変えると綺麗に2行目、22行目、42行目…が
削除されるのですが、!=だと2の倍数以外の行が全部削除されてしまいます。(1行目、
3行目、5行目…というように)

簡単なところを見落としいるとは思うのですが、よくわかりません。
どなたか、ご教示願えないでしょうか。

[ ]
RE:04368 指定した行数を削除して改行を入No.04369
pinecone さん 04/06/01 20:03
 
"のんびりさん"さん、こんばんは。1ユーザのpineconeです。

if文の中の場合に改行されてるので、downが不要では?
(※説明の日本語↑が下手で、すみません。)
>
>while(lineno<linecount2){
> if((lineno)%20 != 2){
>  deleteline;
>  insert "\n";
>  }
> down;
>}
>

while(lineno<linecount2){
 if((lineno)%20 != 2){
  deleteline;
  insert "\n";
 }else{
  down;
 }
}

これでOKだと思います。
# 但し、自分はマクロ初心者なので、他にもっと良い方法があるかもしれません。
# フォローをお願いいたします。 > マクロ上級者な方

[ ]
RE:04368 指定した行数を削除して改行を入No.04370
きいろいまふらあ さん 04/06/01 20:07
 
こんばんは

>while(lineno<linecount2){
> if((lineno)%20 != 2){
>  deleteline;
>  insert "\n";
>  }
> down;
>}

insert "\n" すると、キャレット(カーソル)が次の行の先頭に行きますので、
さらに down; してしまうと、1行飛ばしてしまうことになりますね。

while(lineno<linecount2){
 if((lineno)%20 != 2){
  deleteline;
  insert "\n";
 }else{
  down;
 }
}

とでもすればなんとなくお望みの動作になるのでは?

折り返しとか高速化とか考慮するともう少し細かく手を入れた方がいいかもしれ
ませんけど、端折ります。

[ ]
RE:04369 指定した行数を削除して改行を入No.04372
山紫水明 さん 04/06/01 20:49
 
 のんびりさんさん,pineconeさん,こんばんは。

》while(lineno<linecount2){
》 if((lineno)%20 != 2){
》  deleteline;
》  insert "\n";
》 }else{
》  down;
》 }
》}

》これでOKだと思います。

 通常はこれでOKですが,deleteline は論理行ではなく,表示行を削除すると
いうことに気をつける必要があるでしょう。
 linecount2 や lineno は論理行を対象に,down は表示行を対象にしますので,
ちょっと首尾一貫しないうらみがあります。

 論理行を対象にするなら,次のような書き方もあります。

//---------------------------------------//
gofiletop;
while( lineno < linecount2 ) {
    if( ( lineno ) %20 != 2 ) deleteafter;
    movetolineno 1, lineno + 1;
}
endmacro;
//---------------------------------------//

行数が多ければ,最初に disabledraw; を加えたらいいでしょう。

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

[ ]