稚拙ですが、お願いします。No.01914
yamasan さん 01/03/28 18:45
 
山田です。こんばんは。

先日は、検索と置換のマクロでお世話になりました。
マクロについて、少し考えてみました。

意味の無い事かもしれないですが、
意図としては、現在のクリップボードにある文字列を
移動したカーソル位置の後ろに、上書きしたいというようなことです。
(検索・置換する文字列を指定するのでなくです。)

それで、まったく頓珍漢ですけれど、ヘルプを自分なりに見て、

beginclipboardread;
        #i = 0;
        $a[#i] = getclipboard;
        while( $a[#i] != "" ) {
            #i = #i + 1;
            $a[#i] = getclipboard;
        }
        overwriteswitch;
        overwrite $a;
        overwriteswitch;
        endmacro;

というように、記述をしてみたのです。
文字列の指定もおかしいのでしょうが、
兎に角、
    overwrite $a;
という行の $a が、悪いようです。

クリップボードからの文字列のデータを取得するのも、
間違っているのかどうか、分かりませんが、
どうにか、マクロの形に出来ないでしょうか?

とりあえず、クリップボードのデータは、1行と言う事でやっています。
お構いなければ、ご指導の程をお願いします。


[ ]
RE:01914 稚拙ですが、お願いします。No.01915
ひろ さん 01/03/28 19:37
 
  山田さん今日は、ひろです。
> 意味の無い事かもしれないですが、
> 意図としては、現在のクリップボードにある文字列を
> 移動したカーソル位置の後ろに、上書きしたいというようなことです。
 クリップ・ボード内の改行を考慮していませんが、
beginclipboardread;
while( 1 ){
  $tmp = getclipboard;
  if($tmp == "") break;
  overwrite $tmp;
}
で如何でしょうか?

[ ]
RE:01914 稚拙ですが、お願いします。No.01916
きいろいまふらあ さん 01/03/28 19:47
 
うまくいかないならば、どのようにうまくいかないのか、
自分はこうなると思ったのに、実際はこうなった、とか、
そーいうのがあると回答もつきやすいと思います。

> beginclipboardread;
>         #i = 0;
         $x = getclipboard;
         while( $x != "" ) {
>             #i = #i + 1;
             $a = $a + $x;
             $x = getclipboard;
>         }
>         overwrite $a;
>         endmacro;

としてみたらどうなるでしょ?

overwrite は、入力モードによらない(はずな)ので、
overwriteswitch で切り替えてやる必要もないと思います。

[ ]
RE:01915 稚拙ですが、お願いします。No.01920
ENCODINGSHIFTJIS さん 01/03/29 10:09
 
>> 意図としては、現在のクリップボードにある文字列を
>> 移動したカーソル位置の後ろに、上書きしたいというようなことです。

不明な点は、「上書きされる範囲」は現在クリップボードにある長さと
一致しているのかとか、カーソル位置からある条件の所までか?
手では、範囲選択して貼り付けがWinスタイルですが。
全角の列に半角の奇数文字をoverwriteすると半角の空白が付いたり
しますし(細かいこと)




[ ]
RE:01915 RE:稚拙ですが、お願いします。No.01922
yamasan さん 01/03/29 12:16
 
ひろ さん、こんにちは。山田です。有難うございました。

 |  クリップ・ボード内の改行を考慮していませんが、
 | beginclipboardread;
 | while( 1 ){
 |   $tmp = getclipboard;
 |   if($tmp == "") break;
 |   overwrite $tmp;
 | }
 | で如何でしょうか?

私の思った通りの動作をしてくれました。有難うございました。
マクロを理解できたような出来ないような、ですが、頑張ります。

改行を考慮されていない為でしょうが、
改行を含めて、コピー後マクロを実行すると、
半角白抜きのJが貼り付けられます。

そして、これをコピーし、貼り付けると
改行されますので、改行の意味だろうと思われますが、
これを出さないようにするのは、どういう記述が必要でしょう?
お構いなければ、続けてお願いします。

[ ]
RE:01916 RE:稚拙ですが、お願いします。No.01923
yamasan さん 01/03/29 12:17
 
きいろいまふらあ さん、有難うございました。山田です。

 | うまくいかないならば、どのようにうまくいかないのか、
 | 自分はこうなると思ったのに、実際はこうなった、とか、
 | そーいうのがあると回答もつきやすいと思います。

以後、そうします。どうも、すみません。

 | > beginclipboardread;
 | >         #i = 0;
 |          $x = getclipboard;
 |          while( $x != "" ) {
 | >             #i = #i + 1;
 |              $a = $a + $x;
 |              $x = getclipboard;
 | >         }
 | >         overwrite $a;
 | >         endmacro;
 |
 | としてみたらどうなるでしょ?

こちらの方も、私の思ったように、動作してくれました。
ひろ さんの記述方法[hidesoft.4:01915]とは、少し違うように私には見えますが、
お二方のマクロは、どちらも私の希望どおりになりました。

そして、同じ事をお二方に聞くのも失礼なのですが、

やはり、クリップボード内が改行を含むと、
半角白抜きのJが貼り付けられます。
これを取り除く、もしくは改行をしてもらうためには、
何を書き加えればいいのですか?すみませんが、お願いします。

'\x0D'だとか'\x0A'をどう加えるとどうなるのか、
とか興味があるのですが、不明事項です。

 | overwrite は、入力モードによらない(はずな)ので、
 | overwriteswitch で切り替えてやる必要もないと思います。

それは、わかりませんでした。書き加えないようにします。
どうも、有難うございました。

[ ]
RE:01922 RE:稚拙ですが、お願いします。No.01924
ひろ さん 01/03/29 17:17
 
 山田さん今日は、ひろです。
> そして、これをコピーし、貼り付けると
> 改行されますので、改行の意味だろうと思われますが、
> これを出さないようにするのは、どういう記述が必要でしょう?
 私も解らない(^^;。

[ ]
RE:01924 RE:稚拙ですが、お願いします。No.01925
TAKA さん 01/03/29 17:47
 
TAKA です。

>> そして、これをコピーし、貼り付けると
>> 改行されますので、改行の意味だろうと思われますが、
>> これを出さないようにするのは、どういう記述が必要でしょう?
> 私も解らない(^^;。

改行をのけるだけでいいのなら、以下のマクロでOKです。

// マクロ(ここから)
    beginclipboardread;
    while( 1 )
    {
        $Tmp = getclipboard;
        if( $Tmp == "" )
        { // データ終了
            break;
        }
        if( rightstr( $Tmp, 1 ) == "\n" )
        { // 改行で終わっている
            // 改行を取り除く
            $Tmp = leftstr( $Tmp, strlen( $Tmp ) - 1 );
        }
        overwrite $Tmp;
    }
    endmacro;
// マクロ(ここまで)

[ ]
RE:01925 RE:稚拙ですが、お願いします。No.01926
yamasan さん 01/03/29 19:07
 
山田です。どうもありがとうございました。

 | 改行をのけるだけでいいのなら、以下のマクロでOKです。
 |
 | // マクロ(ここから)
 |     beginclipboardread;
 |     while( 1 )
 |     {
 |         $Tmp = getclipboard;
 |         if( $Tmp == "" )
 |         { // データ終了
 |             break;
 |         }
 |         if( rightstr( $Tmp, 1 ) == "\n" )
 |         { // 改行で終わっている
 |             // 改行を取り除く
 |             $Tmp = leftstr( $Tmp, strlen( $Tmp ) - 1 );
 |         }
 |         overwrite $Tmp;
 |     }
 |     endmacro;
 | // マクロ(ここまで)

私の言った通りに、思った通りに動作するマクロになっています。
もう少し、いろいろ考えて、勉強します。
やはり、考えた事は、できるのですね。

もう少し、具体的に作りたいマクロが頭に浮かんだら、
そして、作成が自分自身で出来ない場合(殆ど出来ないと思うけど)は、
また、お願いします。考えても先に進まなかったものですから。

TAKA さん、どうも、有難うございました。感謝いたします。

[ ]
RE:01925 RE:稚拙ですが、お願いします。No.01930
ひろ さん 01/03/30 00:19
 
 TAKA さん今日は、ひろです。
>             $Tmp = leftstr( $Tmp, strlen( $Tmp ) - 1 );
「+ "\n"」を付けなければ問題ないんですね。
 ##overwrite で「\n」を指定すると改行にならない場合があるとは知らな
かった。

[ ]
RE:01930 RE:稚拙ですが、お願いします。No.01935
ひろ さん 01/03/30 20:25
 
 秀丸担当さん今日は、ひろです。
>  ##overwrite で「\n」を指定すると改行にならない場合があるとは知らな
と書いたのですが、上書きモード時の挿入系コマンドの「改行」と
overwrite "\n";
の動作が違うのは、ひょっとしてバグではありませんか?

[ ]
RE:01935 RE:稚拙ですが、お願いします。No.01942
秀丸担当 さん 01/04/04 18:23
 
>と書いたのですが、上書きモード時の挿入系コマンドの「改行」と
>overwrite "\n";
>の動作が違うのは、ひょっとしてバグではありませんか?

レスされていなくて申し訳ありません。
現状では仕様でありますが、バグもあるのでそれらの修正と一緒に
検討しておきます。
詳しくは、秀丸エディタ会議室の 08219 overwriteでの改行の扱い
に対するレスにも書いておきました。


[ ]
RE:01942 RE:稚拙ですが、お願いします。No.01944
ひろ さん 01/04/04 21:27
 
 秀丸担当さん今日は、ひろです。
> 詳しくは、秀丸エディタ会議室の 08219 overwriteでの改行の扱い
> に対するレスにも書いておきました。
 詳細な説明有り難うございました。
 実際に自分で使う場合は、insert 文と併用することにします。

[ ]