変数の使い方(Ver9.35対応版)
目次−
変数の使い方
秀丸マクロでは、文字列型と数値型の変数を使うことができます。文字列型の変数は文字列を記憶し、数値型の変数は数値を記憶します。
変数は、変数と変数名を管理する領域のサイズが合計で1MBくらいまで扱えます。(標準の場合。[その他]→[動作環境]→[環境]で上限を指定できます)
上限は、
getmaxinfoで知ることができます。
扱える変数の上限に関わらず、$a = "xxx...xxx"; というようにマクロファイル上に文字列を直接記述する場合は1MBの上限があります。(V9.19未満は128KB, V8.88未満は64KB, V8.66未満は4KB)
$a = $b + $c; というように連結して書くと大丈夫になります。
getclipboard関数には4KBの上限があります。
文字列にはNULL文字を含むことはできません。
数値型変数は4バイトの符号付きの値を記憶することができます。
数値は、32bit通常版では32bit、64bit通常版では64bitが扱えます。
浮動小数点数版では、setfloatmodeを呼ばないときは32bit版/64bit版に関わらず、数値は32bitになります。(
参照)
変数名には30文字程度までの適当な英数字を使用することができます。
文字列型変数は先頭が$で始まり、数値型変数は#で始まります。
変数名は大文字/小文字が区別されます。
変数名の例 |
#number
$top_string_1
#x100
|
変数に値を代入するには、=を使います。
値の代入例 |
#num = 100;
$str = "斉藤秀夫";
|
数値型変数に文字列を代入したり、文字列型変数に数値を代入しようとするとエラーになります。
エラーになる例 |
#num = "ABC";
$str = 100 / 4;
|
秀丸マクロでは、ユーザが関数のように
サブルーチンを作ることができるようになっています。
サブルーチンの中だけでローカルな変数を使いたい場合は、##または$$が先頭に付いた変数を使います。
#または$だけで始まる変数は、グローバルな変数として扱われます。
例 |
call Sub;
call Sub;
endmacro;
Sub:
message str(##a); //常に0
##a = 1;
message str(##a); //1
return;
|
変数の名前のうしろに角カッコで添え字を付けると、簡単に配列変数を作ることができます。
例 |
#a[0] = 1;
#a[1] = 2;
#a[ #b + 1 ] = 5;
#b = #a[2];
|
角カッコを連ねて添え字を増やせば、何次元の配列でも作ることができます。
例 |
#a[0][0] = 1;
#a[5][2] = 1;
|
まだ代入していない変数や、代入していない配列でも、参照してエラーになることはありません。
数値は0で、文字列は""になります。
例 |
message str(#a);
message str(#b[10]);
message $c;
message $d[20];
|
変数は、マクロが実行し続ける限りは、
newfile,openfileやsetactivehidemaruで実行対象の秀丸エディタが変わっても維持し続けます。
例 |
message str(#a); //常に0
#a = 1;
message str(#a); //1
newfile;
message str(#a); //実行対象が変わっても1
endmacro;
|
execmacroで別のマクロを実行する場合は、変数は共有されず、別の空間で扱われます。
test.mac |
#a = 1;
message str(#a); //1
execmacro "test2.mac";
message str(#a); //test2.macとは別の空間で1のまま
endmacro;
|
test2.mac |
#a = 2;
endmacro;
|
マクロが終了しても保持させたい場合は、
setstaticvariableで記憶し、
getstaticvariableで取り出す方法があります。
参照:
影響の及ぶ範囲(execmacro)
影響の及ぶ範囲(アクティブ切り替え)