|
これは、[HMM0014A]から、飛べるようにして欲しい内容です。
#「知っていると便利な秀丸の機能」に入れてもらえるのかな?
時間がなかったため、きいろいまふらあ さんから指摘された部分
が直っていません。(以前と同一)
必要であれば、どなたかに直して頂けると助かります。
●マクロ内での「\」の使い方
【0】ここに書いてあること
【1】「\」の意味
【2】「\」の使用例
【3】最後に
【0】ここに書いてあること
マクロを組み始めた方で、「\」の使い方がよく分からないという
方を対象に、「\」の使い方とその理由を説明しています。
自分は知っているという方は、「【2】「\」の使用例」の一番最
後の「改行検索を行うマクロ」を見て下さい。(今まで間違った使
い方をしている人がいるかもしれませんので)
最後まで読めば、今後「\」で悩まされることがなくなるかもしれ
ません。
【1】「\」の意味
マクロ内での「\」(これ以降、コメント内で使用する「\」は除く
ものとします)は、例外なく特殊文字として扱われます。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
「\」が出てくると、その次の文字が何であるかを調べて、それに
見合った処理(16進コードに置き換え)を行っています。
「\」を使う場合として、次のものが挙げられます。
「\\」 :「\」自身(16進数の「5C」、10進数の「92」)
「\"」 :「"」自身(16進数の「22」、10進数の「34」)
「\t」 : タブ (16進数の「09」、10進数の「9」)
「\n」 : 改行 (16進数の「0A」、10進数の「10」)
「\x??」:16進数 (例えば「\x41」で、16進数の「41」、10
進数の「65」)
試しに、以下のマクロを実行して見てください。
順に、「92」、「34」、「9」、「10」、「65」と表示されます。
//---- 「\」の扱いを調べるテストマクロ ---------------------
$str = "\\\"\t\n\x41";
#len = strlen( $str );
#i = 0;
while( #i < #len )
{
message str( ascii ( midstr( $str, #i, 1 ) ) );
#i = #i + 1;
}
endmacro;
//---- ここまで --------------------------------------------
どうでしょう。これだけでもかなり理解できたのではないでしょう
か?
【2】「\」の使用例
では、実際に「\」が出てくるマクロをいくつか書いてみましょう。
但し、テストの為に書いてあるマクロですので、エラーチェック等
は一切行っていません。
ファイル「c:\test.txt」をオープンするマクロは、どう書けばい
いのでしょう。
//---- ファイルをオープンするテストマクロ ------------------
openfile "c:\\test.txt";
endmacro;
//---- ここまで --------------------------------------------
ファイル名に「\」を使いたい訳ですから、「\」自身を表す「\\」
を使用するようになります。
改行を挿入するマクロは、どう書けばいいのでしょう。
//---- 改行を挿入するテストマクロ --------------------------
insert "改行する文章\n改行した後の文章";
endmacro;
//---- ここまで --------------------------------------------
改行を表現したい時は、「\n」でしたね。
正規表現による改行検索を行うマクロは、どう書けばいいのでしょ
う。
//---- 改行検索を行うテストマクロ(その1) ----------------
searchdown "\\n", regular;
endmacro;
//---- ここまで --------------------------------------------
このマクロを見て、「あれっ、改行って確か「\n」だから、
「searchdown "\n", regular;」じゃないの。試しに動かしたら、
ちゃんと検索したぞー」と言う人がいるかもしれません。
実は、これが最初に陥りやすい(陥る)罠なのです。では、何が罠
なのかを順番に説明していきます。
改行の後に「test」を入れた、次のような文章を用意して下さい。
//---- 改行検索を行うテスト文章 ----------------------------
test
test
test
//---- ここまで --------------------------------------------
例が、悪いかもしれませんが、(あくまでもテストをするというこ
とで)改行とそれに続く「test」を検索する場合を考えてみましょ
う。罠に落ちた人は、次のようなマクロを書くと思います。
//---- 改行検索を行うテストマクロ(その2−誤) ------------
searchdown "\ntest", regular;
endmacro;
//---- ここまで --------------------------------------------
どうです。動きましたか?
悲しいかな、このマクロでは動きません。
では、次のようなマクロでテストして見てください。
//---- 改行検索を行うテストマクロ(その2−正) ------------
searchdown "\\ntest", regular;
endmacro;
//---- ここまで --------------------------------------------
今度は、ちゃんと動きましたね。
これは、どういうことなのでしょうか。
種明かしは非常に簡単です。通常の検索ダイアログで、正規表現を
使って改行を検索する場合を考えて下さい。検索文字列には、「\n」
を入力しますよね。ここまで言えば、もうお分かりですね。「\n」
という文字列をマクロ内で指定したい訳ですから、「\\n」として
やればいいことになります。
「\n」だと16進数で「0A」になる(通常の文字と異なる)ため、
うまく検索出来ない場合(正しい使い方でないため)があるのです。
【3】最後に
「\」の使い方を大体は理解して頂けたと思いますが、完璧に理解
するためには実践で鍛えるのが手っ取り早いかもしれません。実践
で躓いた時にでも、もう一度読み直してみて下さい。ある日突然、
目の前が明るくなるでしょう。
|
|