範囲選択中の改行取り扱いNo.00519
にひら さん 99/04/28 18:04
 
マクロを勉強していてわからないことがあり、非常に困っています。
どうぞ御教示下さいませm(__)m

範囲選択してからマクロを実行します。
マクロ中では、クリップボードから文字列を取得し、加工します。
文字列は1行までとしています。

範囲選択で、1行のうちの一部分を選択した場合と、行選択を行ったことに
より改行が最後に含まれている場合とで条件分岐したいと思っています。
●以下のように書いてみました。

copy;
beginclipboardread;
$choose=getclipboard;

if ($choose == ".*\\x0A") {
改行があった場合の処理;
} else {
改行がなかった場合の処理;
}
endmacro;

どちらの場合もelseの方に処理が移ってしまいます。
if ($choose == ".*\\n") {
とか色々試してみたのですが・・。
正規表現もよくわかっていませんで・・・。
秀丸におけるパターンマッチをどのように行えばよいのかもよくわかり
ません・・・。

●もうひとつ、「改行があった場合は改行を削除してから同じ処理を行う」
 という方針も考えましたが、
replaceall "\\x0A","",regular,inselect;
 でもうまく動作しませんです・・。

すみません。ヘルプも一生懸命探したのですが・・・。

どうぞよろしくお願い致しますm(__)m

[ ]
RE:00519 範囲選択中の改行取り扱いNo.00520
番頭++ さん 99/04/28 18:31
 
>範囲選択で、1行のうちの一部分を選択した場合と、行選択を行ったことに
>より改行が最後に含まれている場合とで条件分岐したいと思っています。

//  こんな感じです ...
//  正規表現は、比較演算子では無効です 。。。

//R2    a1.mac
    if( ! selecting ){  endmacro;   }   //  範囲選択されていないです !
    $wk1 = gettext(seltopx,seltopy,selendx,selendy);
    message $wk1;
//R message char(ascii(rightstr($wk1,1)));
    if( ascii(rightstr($wk1,1)) == 0x0A || ascii(rightstr($wk1,1)) == 0x0D ){
        message "改行付きです !";
    } else {
        message "改行無しです !";
    }
endmacro;


[ ]
RE:00519 範囲選択中の改行取り扱いNo.00521
プックン さん 99/04/28 18:40
 
にひらさん、こんにちは。

>範囲選択で、1行のうちの一部分を選択した場合と、行選択を行ったことに
>より改行が最後に含まれている場合とで条件分岐したいと思っています。
>●以下のように書いてみました。

こんな感じではいかがでしょうか?。

copy;
beginclipboardread;
$choose=getclipboard;
        #i = strstr($choose,"\n");
        if(#i == -1){
            message "改行なしよ";
            //message "Not Found!";endmacro ;
        }
        else
            message "改行ありよ";
endmacro;


>●もうひとつ、「改行があった場合は改行を削除してから同じ処理を行う」
> という方針も考えましたが、
>replaceall "\\x0A","",regular,inselect;
> でもうまく動作しませんです・・。

replaceall "\n","",regular,inselect;
これでできるとおもいます。

がんばって、マクロを使いこなしてくださいね。

[ ]
RE:00521 範囲選択中の改行取り扱いNo.00522
番頭++ さん 99/04/28 18:55
 
>replaceall "\n","",regular,inselect;
>これでできるとおもいます。

これは、たぶんうまくいかないです。
inselect は \n の前後 (両方) に一文字以上が必要です。
selecting で gettext を行い、そのチェックを行うと完璧になります。

[ ]
RE:00520 範囲選択中の改行取り扱いNo.00523
にひら さん 99/04/28 19:47
 
番頭++様、ありがとうございます!!
すごいです!二日ほど悩んでいたのですが・・・あっさり・・f(^^;)。
内容を理解しようと頑張って読んでみました。わからないところを
質問させて下さいませ。お願い致します。

クリップボードを使わずgettextを使われていらっしゃるのは何か理由或いは
メリット等がございますのでしょうか?

コメント部分のRは、どういった意味ですか?

Rとされていた部分を実行してみたところ、改行無しの場合は一番右の文字が
表示され、改行ありの場合は空白が表示されました。rightstr関数は改行文字を
どう取り扱っているのでしょう・・??

\x0A、\x0Dではなく0x0A、0x0Dと表現するのですか!ヘルプを見てましたら
\x0Aと書いてあったのですが・・・?

私はgetclipboardを使っていました。その場合は秀丸マクロヘルプに
-------------------------------------------------------------------
クリップボードから1行分のデータを取り出し、それを返します。
'\x0D'は除去されますが、'\x0A'は行末についてきます。ただし、クリップ
ボードデータの最後の部分が改行で終わっていない場合は、'\x0A'無しでデータ
が返ってきます。
-------------------------------------------------------------------
とありますので、||を使って0x0A||0x0Dとしなくても、0x0Aのみでよいので
すよね??

どうぞ御教示下さいませm(__)m

[ ]
RE:00521 範囲選択中の改行取り扱いNo.00524
にひら さん 99/04/28 19:56
 
プックンさん、こんにちは。
どうもありがとうございます!
これまたあっさり動きました〜!
うーん・・・あれだけ悩んだのに・・・(^-^;)。
strstr関数ですか。こんな便利なものが用意されてただなんて・・。
すごい!
strstr関数使い倒そうと思います(笑)。

>replaceall "\n","",regular,inselect;
>これでできるとおもいます。

 こちらはどうもうまく動きませんでした。
 更に勉強したいと思います。

>がんばって、マクロを使いこなしてくださいね。

 ありがとうございます。とても楽しいです!

[ ]
RE:00523 範囲選択中の改行取り扱いNo.00525
番頭++ さん 99/04/28 19:59
 
> クリップボードを使わずgettextを使われていらっしゃるのは何か理由或いは
> メリット等がございますのでしょうか?

この場合、テストしても、同じですから ...

> コメント部分のRは、どういった意味ですか?

意味はありません ...

> Rとされていた部分を実行してみたところ、改行無しの場合は一番右の文字が
> 表示され、改行ありの場合は空白が表示されました。rightstr関数は改行文字を
> どう取り扱っているのでしょう・・??

単に、コード (文字) を処理しているだけだと思います ...

> とありますので、||を使って0x0A||0x0Dとしなくても、0x0Aのみでよいので
> すよね??

そうです、0x0A だけで OK です ...


[ ]
RE:00525 範囲選択中の改行取り扱いNo.00526
にひら さん 99/04/28 21:18
 
番頭++さん、御回答どうもありがとうございました。
もっともっと勉強したいと思います...

[ ]
RE:00522 範囲選択中の改行取り扱いNo.00528
プックン さん 99/04/29 15:12
 
番頭++さん、こんにちは。

>これは、たぶんうまくいかないです。
>inselect は \n の前後 (両方) に一文字以上が必要です。
>selecting で gettext を行い、そのチェックを行うと完璧になります。

確かにそうですね。ご指摘ありがとうございました。


[ ]