3.1 キーワード |
insert
????;↓
|
????
に、
常に現在の日付を表す文字列が入るような、
そんな仕掛けを用意する必要があります。date
(日付)、time
(時刻)、
code
(カーソル位置の文字コード)等の
単語をマクロファイル中に書くことで参照します(*1)。date
キーワードは
"99/07/09(金)"
という形で日付を表します(*2)。
というわけで、
insert
date;↓
|
"yy/mm/dd(D)"
という形式で)
表す文字列をカーソルの位置に挿入することができるわけです。
文字列リテラルの場合と異なり、date
キーワードを
引用符で括っていないことに注意して下さい(後述参照)。
insert
date;↓
|
insert
コマンドで日付の部分が挿入され、
続いて2行目で日付と時刻の間にある半角空白が挿入され、
最後の3行目で時刻の部分が挿入されます。
というわけで、最終的に
「99/07/07(水) 14:32:05
」
という文字列(*3)が挿入されます。(*1) | どのようなキーワードが用意されているかについては マクロヘルプの 「式について」→「内部的な値を表現するキーワード」 を参照して下さい。 |
(*2) | 年号が2桁で表されているので、 2000年問題をちゃんと考慮してマクロを作りましょう(^^;。 |
(*3) |
本題から少し外れますが、
ここで insert コマンドを数回に分けても、
改行されずにそのまま続けて
文字が挿入されることに注意して下さい。
|
3.2 文字列連結演算子 |
insert
コマンドを3回使っていましたが、
これを1回で済ますことができるかどうか、を考えてみます。
すなわち、やるべきことはinsert
コマンドに引数として渡せばOK!のはずです。
insert "date time";↓
|
insert date" "time;↓
|
date
や time
の
キーワードは引用符で囲まれていませんから、
先程の様なことはないはずです。
が、今度は文字列が挿入されるどころか
「マクロエラー」になるはず(*1)です。
それは「insert
コマンドは文字列の引数を
1つだけ取る」というルールがあるからです(*2)。date
と " "
と
time
の間にこの記号を入れれば、
3つの文字列が1つになって万事OK!です。
insert date + " " + time;↓
|
insert "Hello world!";↓
|
Hello world!
」という文字列を挿入します。(*1) |
実際にやってみたところ、
この場合は何故か(^^;エラーになりませんでした。
しかも奇妙なことに時刻だけが挿入されます。 …このように、秀丸マクロの構文解析は いい加減というかおおらかな面があります(^^;。 まぁ正しく書けばちゃんと動作するのは間違いない(?)ですから、 あまりシリアスに考えないようにしましょう(^^;。 |
(*2) |
仮に2つの文字列の引数を取るとしても、
その場合は insert date, time; と
コンマで区切って書く必要があります。
|
(*3) | 「+」演算子はそれ自身で1つのトークンとみなされるため、 前後の区切り文字は 必ずしも必要ではありません。 |
3.3 内部処理について |
insert
コマンドが
同じ「Hello world!
」という文字列を挿入したわけですが、
これはすべての insert
コマンドの引数が
"Hello world!"
だったから、です。そうですね?
ということは、文字列の連結作業はコマンドに実際に渡される以前に
行われている、ということです。
つまりマクロを実行した時、
内部では以下の順序で処理が行われているわけです。insert "Hello " + "world!"; |
(文字列を連結する) | |
→ |
insert "Hello world!"; |
(連結された!) |
→ |
insert "Hello world!"; |
(コマンドに引数を渡す&実行) |
→ |
「Hello world!」 |
(カーソル位置に文字列を挿入) |
insert date + " " + time;
|
(キーワードを文字列に置き換える) | |
→ |
insert "99/07/07(水)" + " " + "14:32:05";
|
(置き換えられた!) |
→ |
insert "99/07/07(水)" + " " + "14:32:05";
|
(文字列を連結する) |
→ |
insert "99/07/07(水) 14:32:05";
|
(連結された!) |
→ |
insert "99/07/07(水) 14:32:05";
|
(コマンドに引数を渡す&実行) |
→ |
「99/07/07(水) 14:32:05」 |
(カーソル位置に文字列を挿入) |
(*1) | というわけで、前節の例で挿入された時刻は 厳密に言えばマクロ実行開始時の時刻ではないのですが、 その差はわずか(数〜数十ミリ秒程度)なので 気にする必要はないでしょう。 |
演習問題 |
message
コマンドを使うこと。