マクロの概要(入門用) 関数について(Ver9.34対応版)
関数について
秀丸マクロには、前述のキーワードとよく似た動作をする「関数」と呼ばれるものがあります。
関数は、秀丸エディタなどの状態を取得したり、マクロで使用されている変数の型を変換したり、文字列変数から一部の文字を抽出したり、画面にメッセージを表示したり、キーボードのキー入力を取得したりなどの働きがあります。
キーワードと違う点は「
パラメータ(引数)」と呼ばれるものを付加するところが違っています。何をどうするのかの「何」部分を指定するのがパラメータです。
前述のキーワードで使用した、来年の本日のファイル名を作成する場合を考えてみます(本日が2003/12/31とします)。作成するファイル名は、文字列としての「"20041231.txt"」です。
年度は「year」キーワードで取得できます。今年の状態をまず取得するため、「year」キーワードは、(2003)という数字をまず返してきます。
文字列となった年度(2003)は、一見数値のように見えますが、文字としての「2」「0」「0」「3」を組み合わせて表示されています("2" + "0" + "0" + "3"を組み合わせると"2003"となります)。
文字列では数学的な数値の加算ができません。来年の年度の「2004」を求めるには、文字列で取得できた「"2003"」を数値として加工できる数値型に変換してから「1」を加算し、
ファイル名として利用できる文字列としての「"2004"」に再度変換し直す必要があります。
では、文字列を数値に変換します。
この変換に使うのは「
val 」関数という関数です。val関数はパラメータで指定された文字列を数値に変換します。数値に変換できなければ、数値の「0」を返します。
パラメータで指定するのは「year」キーワードで文字列となった年度です。
例 |
例
#tmp_y = val(year);
これ↑がパラメータ
|
上記の記述では、#tmp_yには数値としての「2003」が代入されています。
数値ですので、数学的な四則演算が可能になります。
来年度の年度の数値は #tmp_y = #tmp_y + 1; で求めることができます。
たとえば、5年後ならば #tmp_y = #tmp_y + 5; で、昨年なら #tmp_y = #tmp_y - 1; で求められます。
来年度の数値「2004」が計算できましたので、ファイル名に利用するために文字列に再度変換します。
ここで使うのは「
str 」関数です。str関数はパラメータで指定された数値を文字列に変換します。パラメータで指定するのは、計算結果の #tmp_y(数値型変数)です。
例 |
$str_y = str(#tmp_y);
これ↑がパラメータ
|
上記の記述では、$str_yには文字列としての「"2004"」が代入されています。
来年の本日のファイル名「"20041231.txt"」は以下の記述で作成できます。
$file_name = $str_y + month + day + ".txt";
|
このように関数は与えられたパラメータを変換したり加工したりします。パラメータに指定する変数・キーワードなどは数値型なのか文字列型なのかを注意する必要があります。また、関数からの戻り値も数値型なのか文字列型なのかを注意する必要があります。
コンピュータは、変数に代入された数値や文字列、キーワードや関数なのどパラメータや演算結果をメモリ(記憶装置)に記憶します。
この時に数値型と文字列型ではメモリの使用方法が違います。ここでは詳しく説明しませんが、数値型と文字列型の型に厳格だということだけを知っておいてください。数値型と文字列型を間違えると誤動作(エラー)が発生します。
ヘルプ内ではパラメータをs1、n1というふうに記述しています。s1というのは文字列型(string)の1番目のパラメータという意味です。
同様にn1というのは数値型(numerical)の1番目のパラメータという意味です。秀丸エディタには有用な関数が多くあります。一部の使用方法を以下に説明します。
- leftstr(s1,n1)関数
-
s1の左側のn1文字を返します。全角文字は2文字として数えます。返す値は文字列型です。
例 |
$str = leftstr("ABCDEFG",3); //返す値は「ABC」です
$str = leftstr("秀丸エディタ",4); //返す値は「秀丸」です
|
- rightstr(s1,n1)関数
-
s1の右側のn1文字を返します。全角文字は2文字として数えます。返す値は文字列型です。
例 |
$str = rightstr("ABCDEFG",3); //返す値は「EFG」です
$str = rightstr("秀丸エディタ",4); //返す値は「ィタ」です
|
- midstr(s1,n1,n2)関数
-
s1の左側からn1番目のn2文字を返します。この位置はs1の先頭文字が0として計算されます。全角文字は2文字として数えます。返す値は文字列型です。
例 |
$str = midstr("ABCDEFG",2,3); //返す値は「CDE」です
$str = midstr("秀丸エディタ",4,2); //返す値は「エ」です
|
- strlen(s1)関数
-
s1の長さを返します。全角文字は2文字として数えます。返す値は数値型です。
例 |
#tmp = strlen("ABCDEFG"); //返す値は「7」です
#tmp = strlen("秀丸エディタ"); //返す値は「12」です
|
また、編集している秀丸エディタの画面にあるカーソル位置はパラメータとしてx座標をx1、y座標をy1と記述されています。
「gettext」関数は現在編集している秀丸エディタのx1、y1からx2、y2の範囲にある文字列を返します。
例 |
$str = gettext(x1,y1,x2,y2);
|
上記の関数は、変換するという動作をしていますが、次に説明する「
input 」関数は、入力用ダイアログボックスを表示し、使用者が入力した文字列をマクロに取り込みます。パラメータで指定したものは表示されるだけです。
たとえば、マクロの実行中に使用者から文字列をマクロに取り込む必要がある場合(保存するファイル名を入力する・検索語句を入力する際など)には「input」関数を利用し、
入力用ダイアログボックスを表示します。「input」関数を呼び出すときに、何を使用者に入力してもらうのかというメッセージ(文字列)をパラメータとして付加して使用する必要があります。
input(s1,s2)関数の使用方法
s1には説明文としてのメッセージを記入します。記入された文字列はダイアログボックスにそのまま表示されます。
s2は入力ボックスに最初から入力されているデフォルトの文字列(使用者が入力すると思われる文字列)を指定します。これは省略可能となっていますので、記入しなくても問題はありません。
返す値は文字列型となっていますので、必ず文字列型変数を指定する必要があります。
例 |
$str = input("検索文字列を入力してください","検索語句");
これ↑が s1(パラメータ) ↑s2(パラメータ)
s2を省略した形
$str = input("検索文字列を入力してください");
|
入力用ダイアログボックスで入力された文字列が「$str」に記憶されます。
ここでは変換関数と「input」関数だけを説明しましたが、秀丸マクロには多くの実用的な関数が用意されています。該当する関数のヘルプを参照すると、使用方法が書いてありますので参照してください。