while構文No.01834
ちづ さん 01/03/03 23:05
 
みなさん、こんにちは。

初心者の質問で申し訳ありませんが、
よろしくお願いいたします。

下のようなマクロを作って実行すると、
whileに続くreplaceallが実行されなくて、
画面でクリックすると、「マクロを中断しますか」
というメッセージが表示されます。
いろいろ試したのですが解決方法がわかりません。
ご教示いただければ幸いです。

gofiletop;  disableinvert;
    while( code != eof){
searchdown "★";
golinetop;
beginsel;
golineend;
delete;
    }
replaceall "^\\n", "", regular;  
enableinvert;

       ちづ

[ ]
RE:01834 while構文No.01835
TAKA さん 01/03/03 23:38
 
TAKA です。

>下のようなマクロを作って実行すると、
>whileに続くreplaceallが実行されなくて、
>画面でクリックすると、「マクロを中断しますか」
>というメッセージが表示されます。
>いろいろ試したのですが解決方法がわかりません。
>ご教示いただければ幸いです。
>
>gofiletop;  disableinvert;
>    while( code != eof){
>searchdown "★";
>golinetop;
>beginsel;
>golineend;
>delete;
>    }

「while( code != eof)」の意味は、カーソルがある位置が[EOF]で
ない間、ループするという意味です。
searchdownで見つからなかった場合は、カーソルが移動しませんの
で、カーソルが[EOF]の位置に来ませんし、
検索されて「delete」してもカーソルの位置はその行の改行の位置
なのでカーソルが[EOF]の位置に来ません。
マクロを中断して、カーソルの位置を確認してみて下さい。

原因は、そういうことですが、
「★」が含まれる行を削除するということでしたら、正規表現とい
う機能を利用して、
replaceall ".*★.*", "", regular;
で実現出来ます。
改行自体も消したい場合は、
replaceall ".*★.*\\n", "", regular;
です。

searchdownを使用したい場合は、

    searchdown "★";
    while( result )
    {
        golinetop;
        beginsel;
        golineend;
        delete;
        finddown;
    }

で、可能です。
「while( result )」で、「searchdown」もしくは、「finddown」
が成功する間はループするという意味です。

[ ]
RE:01835 while構文No.01836
ちづ さん 01/03/04 00:43
 
TAKAさん、こんにちは。

>「while( code != eof)」の意味は、カーソルがある位置が[EOF]で
>ない間、ループするという意味です。
>searchdownで見つからなかった場合は、カーソルが移動しませんの
>で、カーソルが[EOF]の位置に来ませんし、
>検索されて「delete」してもカーソルの位置はその行の改行の位置
>なのでカーソルが[EOF]の位置に来ません。

あ、わかりました!!
うまくいきました!!!
情けないのですが、プログラミングの基本がわかっていないと、
こういうところでつまずきます。
本当にありがとうございました。

     ちづ

[ ]