nScript - 言語仕様 -- ■始めに C言語ライクな簡易スクリプトです。 構文はC言語に似ていますがC言語より機能や演算子などの種類が少ないです。 特徴として、引数のマッチする関数を実行できるためプログラムを修正することなく モジュールの追加が行えます。 ■型 型は基本的に整数型と文字列型のみです。 文字列は自動的に拡張されるので長さを気にする必要はありません。 ・整数 整数型は4バイトの数値が扱えます。 a = 1234; //10進数 a = -123; //負の数 a = 0123; //8進数 (10進数の 83 と等価) a = 0x12; //16進数 (10進数の 18 と等価) ・文字列 文字列は、2重引用符(")で括って表します。 文字列の足し算を行った場合は文字列の結合を行います。 str = "abc" + "def"; // "abcdef" 文字列中に %〜% を指定するとその部分は変数として展開されます。 i = 1 + 2; str = "1 + 2 = %i%"; // "1 + 2 = 3" エスケープ文字 -------+------------------ \n 改行 \r 複改 \t 水平タブ \b バックスペース \\ \ \" " %% % \ooo 8進数表記の1文字 \xhh 16進数表記の1文字 -------+------------------ ・配列 配列はハッシュテーブル(連想配列)とスカラー配列(ベクトル)のどちらとして も動作します a[0] = "abc"; a[1] = "def"; b["foo"] = 13; 添字を数値でアクセスすると配列のインデックスとしてアクセスします。 インデックスは 0 から始まり上限の制限はありません。 文字列でアクセスすると連想配列のキーとしてアクセスします。 配列の大きさは自動的に拡張されます。 a[100]; //101個の配列を用意 a["100"]; //キーが"100"の配列を1つ用意 多次元配列にするには、配列の各次元毎の後ろに他の[キー]を付加します。 a[1][0] = f; //2次元 a["foo"][2] = f; //数値添字と連想添字を混用できます 添字を空にすると配列そのもの(配列型)を表し配列の代入や連結を行えます。 [] も省略すると普通の変数として扱います。 a[] = b[]; //bの配列をaにコピー a[] = b[] + c[]; //bとcの配列を連結してaにコピー 配列の初期化を行うには {値1,値2,値3} を代入します。 a[] = {1,2,3}; // a[0] = 1;a[1] = 2;a[2] = 3; と等価 a[] = {a = 10, b = 20}; //a["a"] = 10;a["b"] = 20; と等価 a[] = {1,2,{10,20,{"a","b","c"}},3}; //多次元の初期化 変数や定数の全てが配列になることができるため 100[10] という記述は エラーになりません。 それを利用して配列の初期化が行えます。 a[] = 0; //a[] = 0[] と等価、配列の内容が空になる。 b = {"A", "B", "C"}[1]; // b に "B" が入る 文字列中で連想配列を使う場合は、(") を (\") で表してください。 str = "%hoge[\"ab\" + i]%"; ■変数 変数は使用した時点で自動的に確保され整数の 0 で初期化されます。 関数内で使用した変数はローカル変数となり関数を抜けると解放されます。 関数外で使用した変数はグローバル変数となり終了まで解放されません。 既にグローバル変数として使われた変数は関数内でもグローバル変数として扱われ ます。 グローバル変数と同じ名前でローカル変数として使用する場合には var を使って 明示的な宣言を行います。 var i, j = 100; 関数内でも {〜} 内で確保された変数は処理を抜けるときに解放されます。 Function func() { { x = 100; } y = x; //xの値は 0 } 変数名に使える文字は英数字と _ です。ただし先頭に数値は使えません。 変数名の大文字小文字は同一視して扱われます。 ■式 変数、定数の計算や比較の条件などを式で表します。 全ての式は実行した結果は値として返されます。 演算子のほとんどは整数同士で使われます。 文字列や配列の引き算や掛け算は行えません。 str = "abc" - 3; //エラー 文字列と整数を計算した場合は整数が文字列に変換されます。 str = "abc" + "def"; //"abcdef" str = "abc" + 1; //"abc1" str = 1 + 2 + "abc"; //"3abc" str = "" + 1 + 2 + "abc"; //"12abc" 配列型と配列型でないものを計算した場合は配列型でないものを配列として扱い 計算します。 a = b[]; // a[] = b[] と等価 a[] = b; // a[] = b[] と等価 a[] = 100; // a[] = 100[] と等価 ・代数演算子 -------+-----+--------------------- a + b 加算 a と b の合計 a - b 減算 a から b を引いた残り a * b 乗算 a と b の積 a / b 割算 a と b の商 a % b 剰余 a を b で割った余り -------+-----+--------------------- ・単項演算子 ----+---------------------------------------------- +a 正の値 -a 負の値 a++ a に 1 を足す (後置) a-- a から 1 を引く (後置) ++a a に 1 を足す --a a から 1 を引く !a a が 0 なら 1 にして 0 ではない場合に 1 にする ~a a のビットごとの補数をとる ----+---------------------------------------------- a++ と a-- は式の終了時に実行されます。 a = 1; b = a++; //ここの時点で b は 1 で a は 2 になる ・代入演算子 左オペランドに右オペランドの式の値を設定します。 a = (b = 4) + 5; // a は 9 になり、b は 4 になります。 文字列に対して代入を行うと正規表現を使って展開されます。 展開する変数名を正規表現中に %〜% を使って記述することができます。 %〜% を指定すると直前の () にマッチする文字列が %〜% 内に指定された 変数に代入されます。 "([ABC]+)%i%" = "123ABCCBA456"; //i は "ABCCBA" になる グループを指定しない場合の変数は、先頭もしくは中間では (.*?) と等しく なり終端では (.*) と等しくなる。 したがって "%i% %j%" は "(.*?)%i% (.*)%j%" と同じ意味になる。 ・ビット演算子 -------+------------+--------------------------------------------------------------------------- a & b 論理積 a および b の両方にセットされているビット a | b 論理和 a または b のどちらかにセットされているビット a ^ b 排他的論理和 a または b にセットされており、両方にセットされていないビット a << b 左シフト a のビットを左に b ビットシフト(各シフトは "2をかける"ことを意味します) a >> b 右シフト a のビットを右に b ビットシフト(各シフトは "2で割る"ことを意味します) -------+------------+--------------------------------------------------------------------------- ※ シフトは論理シフトになります。 ・比較演算子 比較を行い 1 か 0 を返します。 -------+------------------+----------------------------------------- a == b 等しい a が b に等しい時に 1 a =~ b 等しい a が b の正規表現文字列にマッチした時に 1 a != b 等しくない a が b に等しくない場合に 1 a < b より少ない a が b より少ない時に 1 a > b より多い a が b より多い時に 1 a <= b より少ないか等しい a が b より少ないか等しい時に 1 a >= b より多いか等しい a が b より多いか等しい時に 1 -------+------------------+----------------------------------------- ・論理演算子 ------+------+------------------------------------------ a && b 論理積 a および b が共に 0 ではない場合に 1 a || b 論理和 a または b のどちらかが 0 ではない場合に 1 ------+------+------------------------------------------ ・演算子の優先順位 高 () [] ! ~ + - ++ -- (単項演算子) * / % + - << >> < > <= >= == =~ != & | ^ && || = , 低 ■制御構造 ・if if文は条件により文の実行を制御します。 if(式) 文; 式の結果が 0 ではない場合に文を実行し、0 の場合は文を実行しません。 式の結果が文字列の "" の場合も文を実行しません。 if(a > b) b = a; // a が b より大きい場合に b に a を代入 複数の文を実行させたい場合は文をブロック化します。 if(a > b){ b = a; a = 0; } ・else if文で条件式が 0 になり文が実行されない場合の文を指定します。 if文で文が実行された場合は else に続く文はは実行されません。 if(a > b){ b = a; }else{ a = b; } else の後に if を続けることで複数の条件式で文を制御することができます。 if(a == 0){ b = 0; }else if(b == 0){ a = 0; }else if(a > b){ b = a; }else{ a = b; } ・while while文は条件式によりループを行います。 while(式) 文; 式の結果が 0 ではない間文を実行し続けます。 i = 1; while(i <= 10){ j = j + i; i = i + 1; } ・do..while while文の条件式のチェックがループの終端で行われます。 ループで最低1回の文の実行が保証されます。 do{ 文; }while(式); ・for for文は初期化と再初期化を指定できるループです。 for(式1; 式2; 式3) 文; ループに入る前に式1を実行し、式2が 0 でない間ループします。 1回のループの終わりに式3を実行します。 for(i = 1; i <= 10; i++){ j = j + i; } 式1と式2と式3は省略可能です。 式2を省略した場合は永久ループになります。 for(;;){ //永久ループ } ・break break文は現在のループから抜け出します。 break に数値を指定するとその分だけループを抜けます。 ループの数より多い break を指定した場合は関数から抜けます。 値を指定しない場合は break 0; と同じ意味になります。 while(){ while(){ break 1; //1番目のwhileから抜ける } } ・continue continue文はループの残りの処理をスキップして条件式のチェックを行います。 for文の場合は再初期化を実行してから条件式のチェックを行います。 ・switch 式にマッチする位置から文を実行します。 if文を並べた場合と似た処理を行います。 switch(式) { case 値1: 文1; break; case 値2: case 値3: 文2; break; default: 文3; break; } case により式と値がマッチするとbreak文が来るかブロックが終わるまで処理 を行います。 default文はどのcaseにもマッチしない場合に実行されます。 ■関数 関数は次のような構文で定義されます。 //通常の関数 Function 関数名(引数1, [引数2, ...]) { 本文; } //引数検索対象の関数 ArgMatch 関数名("正規表現文字列") { 本文; } 関数を呼び出す形式は次のようになります。 関数名(引数1, [引数2, ...]); 関数は下にあっても上にあっても呼び出すことができます。 関数名の大文字小文字は同一視して扱われます。 戻り値は常に 0 を返しますが return; で値を返すこともできます。 関数定義は関数名の前に Function か ArgMatch を指定する必要があります。 //足し算を行う関数 Function sum(arg_1, arg_2){ return arg_1 + arg_2; } 引数の変数名の頭に & を付けると参照渡しになります。 引数は配列を含めてコピーされるため大きい配列を渡す場合は参照渡しにしたほう が効率が良いです。 Function func(&a) { a = 100; } func(i); //i が100になる 引数の数は関数定義により決まります。 関数定義より少ない引数で関数を呼ぶとエラーになります。 しかし関数定義より多い引数を渡してもエラーにはなりません。 関数側は多すぎる引数を arg[] でアクセスできます。 arg[] は全て参照渡しになっているため変更には注意が必要です。 Function func(a, b) //引数は最低2つは必要 { i = a; j = b; } Function func() //引数はいくつでも良い { i = arg[0]; j = arg[1]; } 省略可能な引数で省略された場合の初期値を設定したい場合は、引数に代入を行い ます。 Function func(a, b = 100) //2番目の引数が省略された場合は 100 を代入する { } 引数に文字列定数を指定すると正規表現として展開されます。 Function func("%a%,%b%") { i = a; // "123" j = b; // "456" } func("123,456"); 関数名を ? で呼び出すと引数の1番目が正規表現でマッチする関数を検索し実行 します。 マッチングを行う関数は、ArgMatch で定義された関数のみです。 ArgMatch で定義された関数は必ず1番目の引数が正規表現の文字列になるように して、2番目以降の引数は省略可能にする必要があります。 ArgMatch func("%a%,%b%") { i = a; j = b; } ?("123,456"); マッチする関数を全て実行しますが、関数内で exit; を行うと検索を終了します。 ? で実行した場合の戻り値はマッチした回数になります。 exit は return と同じように扱え値を返すことができるため、名前での関数呼び 出しでは exit の値が戻り値になります。 ArgMatch func1("%a%,%b%") //実行される { i = a; j = b; exit; //検索終了 } ArgMatch func2("%a%,%b%") //実行されない { i = a; j = b; } cnt = ?("123,456"); //cnt はマッチした回数 関数を呼び出すときに関数名の頭に & を付けると新しいスレッドで関数が実行さ れます。 & を付け起動した関数の戻り値は取得できません。 引数に & を付けても参照渡しにはなりません。 &Func("hoge"); &?("hoge"); 他のスクリプトの関数を呼ぶ場合は、関数名の前にスクリプト名を指定します。 他のスクリプト内のグローバル変数も同様の方法でアクセスできます。 script.func(); script.?(); &script.func(); script.i = 0; //変数 全てのスクリプトを対象に引数検索で関数を呼び出したい場合は all.? で呼び出 します。 all.?("hoge"); 引数検索の検索順序はスクリプト内の上にある関数順になります。 all.? の場合は、インポートしたスクリプト順に検索されます。 ■正規表現 使用可能な正規表現演算子 \ 直後のメタキャラクターをクォートします ^ 行の先頭にマッチします . 任意のキャラクター(改行を含む)にマッチします $ 行の終端にマッチします | 選択 () グループ化 [] キャラクタークラス %〜% 変数 * ゼロ回以上の繰り返しにマッチします + 一回以上の繰り返しにマッチします ? ゼロ回もしくは一回の繰り返しにマッチします {n} n回の繰り返しにマッチします {n,} 少なくともn回ある繰り返しにマッチします {n,m} n回からm回の間の繰り返しにマッチします *? ゼロ回以上の繰り返しにマッチします (non-greedy) +? 一回以上の繰り返しにマッチします (non-greedy) ?? ゼロ回もしくは一回の繰り返しにマッチします (non-greedy) {n,}? 少なくともn回ある繰り返しにマッチします (non-greedy) {n,m}? n回からm回の間の繰り返しにマッチします (non-greedy) \t タブ (TAB) \n 改行 (LF) \r リターン (CR) \xhh 16進キャラクター \w “単語”キャラクター(アルファベット、数字、“_”)にマッチします \W 単語キャラクターでないものにマッチします \s 空白(whitespace)キャラクターにマッチします \S 非空白キャラクターにマッチします \d 数字にマッチします \D 非数字にマッチします 変数への代入を行うには、変数の前に () でグループを指定しておきます。 "([ABC]+)%i%" = "123ABCCBA456"; とやると i は "ABCCBA" になります。 グループを指定しない場合の変数は、先頭もしくは中間では (.*?) と等しくなり 終端では (.*) と等しくなります。 したがって "%i% %j%" は "(.*?)%i% (.*)%j%" と同じ意味になります。 あまり大きい文字列を扱うとスタックが溢れてしまう場合があります。 大きな文字列を扱う場合は行で分割するなどするといいです。 a = "aaa\r\nbbb\r\nccc"; RegMatchAll(".*$", a, b[]); // b[0] - aaa // b[1] - bbb // b[2] - ccc ■プリプロセッサ スクリプト読み込み時に処理されます。 記述する場所はスクリプト内のどこにあっても全体で有効になります。 #option(explicit) 明示的に変数の宣言を強制します。 この記述があるスクリプトのみで有効になります。 #import(ファイル名) 別のスクリプトファイルを取り込みます。 #import(ディレクトリ名\*.ns) とやると複数のファイルを取り込むことができます。 例えば、 #import(script\*.ns) all.?("hoge"); とするとscriptフォルダにあるスクリプト(*.ns)で引数検索をしま す。この場合スクリプトの追加や削除はscriptフォルダの中のファ イルを変更するのみで可能になります。 引数検索対象はインポートしたスクリプトの順番になります。 取り込んだスクリプトにアクセスするには、関数名や変数名の前に スクリプト名を指定します。 script.func(); //関数 script.i; //変数 #library(ファイル名) ライブラリファイルを取り込みます。 ■その他 コメントは // 〜 行末 と /* 〜 */ です。 関数の再帰は可能ですが、スタックが溢れると本体が強制終了するので注意が 必要です。 ■リファレンス □システム関数 Error(buf) [説明] エラー出力 [引数] buf - エラーメッセージ [戻り値] 0 IsType(val) [説明] 型の取得 [引数] val - 型を調べる変数 [戻り値] 0 - 整数 1 - 文字列 Int(str) [説明] 文字列型を整数型に変換 [引数] str - 整数型に変換する文字列 [戻り値] 変換後の整数値 UIntStr(i) [説明] 符号無しの整数の文字列に変換 [引数] i - 変換する整数値 [戻り値] 符号無しの整数にした文字列 GetLocale() [説明] 現在のスレッドの言語IDを取得 [引数] なし [戻り値] 言語ID CHINESE - 0x04 ENGLISH - 0x09 FRENCH - 0x0c GERMAN - 0x07 ITALIAN - 0x10 JAPANESE - 0x11 KOREAN - 0x12 RUSSIAN - 0x19 SPANISH - 0x0a SWEDISH - 0x1d THAI - 0x1e SetLocale(langID) [説明] 現在のスレッドの言語IDを設定 [引数] langID - 言語ID [戻り値] 成功 0, エラー -1 Sleep(time) [説明] 指定秒待機 [引数] time - 待機秒数 [戻り値] 0 □時刻 GetSystemTime() [説明] システムの現在の日付と時刻を取得 [引数] なし [戻り値] 現在時刻を表す連想配列 t = GetSystemTime() t["year"] - 年 t["month"] - 月 t["week"] - 週 (日 = 0、 月 = 1、 ...) t["day"] - 日 t["hour"] - 時 t["minute"] - 分 t["second"] - 秒 t["milliseconds"] - ミリ秒 SetSystemTime(t) [説明] システムの現在の日付と時刻を設定 [引数] t - 時刻を表す連想配列 [戻り値] 成功 0, エラー -1 GetLocalTime() [説明] 現在のローカル日付とローカル時刻を取得 [引数] なし [戻り値] 現在時刻を表す連想配列 SetLocalTime(t) [説明] 現在のローカル日付とローカル時刻を設定 [引数] t - 時刻を表す連想配列 [戻り値] 成功 0, エラー -1 DiffTime(t1, t2) [説明] 2つの時刻の差分を取得 [引数] t1 - 時刻を表す連想配列 t2 - 時刻を表す連想配列 [戻り値] 差分(t1 - t2)を秒数で返す GetDateString(format, t) [説明] 日付文字列を取得 SetLocale()で取得言語を変更可 [引数] format - 日付形式 ("yyyy/MM/dd") d - 先頭0なしの日 dd - 先頭0付きの日 ddd - 省略形の曜日 dddd - 曜日 M - 先頭0なしの月 MM - 先頭0付きの月 MMM - 文字列で表す省略形の月 MMMM - 文字列で表す月 y - 先頭0なしの2桁の年 yy - 2桁の年 yyyy - 4桁の年 gg - 年号 t - 時刻を表す連想配列、省略時は現在日付 [戻り値] 日付文字列 GetTimeString(format, t) [説明] 時間文字列を取得 SetLocale()で取得言語を変更可 [引数] format - 時間形式 ("HH:mm:ss") h - 先頭0なしの時 (12時間制) hh - 先頭0付きの時 (12時間制) H - 先頭0なしの時 (24時間制) HH - 先頭0付きの時 (24時間制) m - 先頭0なしの分 mm - 先頭0付きの分 s - 先頭0なしの秒 ss - 先頭0付きの秒 t - 時刻マーカー (A, P) tt - 時刻マーカー (AM, PM) t - 時刻を表す連想配列、省略時は現在時刻 [戻り値] 時間文字列 □文字列関数 Chr(i) [説明] 整数を文字コードに変換 [引数] i - 変換する整数値 [戻り値] 文字に変換した1文字 Asc(buf) [説明] 文字列の先頭文字の文字コードを整数に変換 [引数] buf - 変換する文字列 [戻り値] 変換した整数値 String(cnt, char) [説明] 任意の文字を指定個分並べる [引数] cnt - 並べる個数 char - 並べる文字 [戻り値] 生成した文字列 Trim(buf) [説明] 文字列の前後の空白を除去した文字列の取得 [引数] buf - 空白を除去する文字列 [戻り値] 空白を除去した文字列 Len(buf) [説明] 文字列の長さを取得 [引数] buf - 長さを取得する文字列 [戻り値] 文字列の長さ StrCmp(str1, str2, len = -1) [説明] 文字列の比較 [引数] str1 - 比較する文字列 str2 - 比較する文字列 len - 長さ, 省略時は最後まで [戻り値] 0 - 等しい 負 - str1が小さい 正 - str1が大きい StrMatch(str1, str2) [説明] ワイルドカードを使った文字列のマッチング [引数] str1 - 比較する文字列 str2 - ワイルドカードを含む文字列 [戻り値] 1 - マッチする 0 - マッチしない Left(buf, len) [説明] 左からlenの長さ分の文字列を抽出 [引数] buf - 抽出する文字列 len - 長さ [戻り値] 抽出した文字列 Right(buf, len) [説明] 右からlenの長さ分の文字列を抽出 [引数] buf - 抽出する文字列 len - 長さ [戻り値] 抽出した文字列 Mid(buf, index, len = -1) [説明] 指定位置からlenの長さ分の文字列を抽出 [引数] buf - 抽出する文字列 index - 抽出開始位置 len - 長さ, 省略時は最後まで [戻り値] 抽出した文字列 InStr(buf, str, start = 0, op = 0) [説明] buf内のstrが存在する位置を取得 [引数] buf - 対象文字列 str - 検索文字列 start - 検索開始位置 op - 1 を指定すると大文字小文字無視 [戻り値] 見つかった位置、見つからない場合は -1 を返す ToLower(buf) [説明] 文字列中の英大文字を小文字に変換 [引数] buf - 変換文字列 [戻り値] 変換後の文字列 ToUpper(buf) [説明] 文字列中の英小文字を大文字に変換 [引数] buf - 変換文字列 [戻り値] 変換後の文字列 □ハッシュ関数 GetHashCount(hash[]) [説明] 連想配列の項目数を取得 [引数] hash[] - 連想配列 [戻り値] 項目数 SetHashCount(&hash[], len) [説明] 連想配列の項目数の設定 [引数] hash[] - 連想配列 len - 項目数 [戻り値] 0 GetHashKey(hash[], n) [説明] 連想配列のキー名を取得 hash[] の3番目のキーは GetHashKey(hash[], 3) [引数] hash[] - 連想配列 n - インデックス [戻り値] キー名 SetHashKey(&hash[], n, name) [説明] 連想配列のキー名を設定 hash[] の3番目のキーは SetHashKey(hash[], 3, "name") [引数] hash[] - 連想配列 n - インデックス(整数型)かキー名(文字列型) name - 設定する名前 [戻り値] 0 IsHashKey(hash[], key) [説明] 指定のキーが連想配列に存在するかチェック [引数] hash[] - 連想配列 key - キー名 [戻り値] 存在する場合はその位置、存在しない場合は -1 HashInsert(&hash[], n, val) [説明] 連想配列の項目の挿入 n の前の位置に挿入される。 [引数] hash[] - 連想配列 n - インデックス(整数型)かキー名(文字列型) val - 挿入する値 [戻り値] 0 HashDelete(&hash[], n) [説明] 連想配列の項目の削除 [引数] hash[] - 連想配列 n - インデックス(整数型)かキー名(文字列型) [戻り値] 0 HashFind(hash[], val) [説明] 連想配列の内容を検索しインデックスを返す [引数] hash[] - 連想配列 val - 検索する値 [戻り値] 見つかったキーのインデックス、見つからない場合は -1 を返す HashKeySort(&hash[], order = 0, icase = 0) [説明] 連想配列のキーでソートを行う [引数] hash[] - ソートを行う連想配列 order - 0 昇順, 1 降順 icase - 0 大文字小文字を区別する, 1 大文字小文字を区別しない [戻り値] 0 HashSort(&hash[], order = 0, icase = 0) [説明] 連想配列の内容でソートを行う [引数] hash[] - ソートを行う連想配列 order - 0 昇順, 1 降順 icase - 0 大文字小文字を区別する, 1 大文字小文字を区別しない [戻り値] 0 HashCopy(hash[], start = 0, len = -1) [説明] 連想配列のコピーを作成する [引数] hash[] - 連想配列 start - コピー開始位置 len - 長さ, 省略時最後まで [戻り値] コピーした連想配列 HashMerge(hash1[], hash2[], hash3[]...) [説明] 複数の連想配列をマージする 同じ名前のキーが存在する場合は後から出現したキーの値が有効になる [引数] hash1,2,3...[] - マージする連想配列 (1つ以上) [戻り値] マージした連想配列 HashToString(hash[]) [説明] 連想配列を文字列に変換 連想配列の内容はバイト配列でないと正しく変換されない [引数] hash[] - 連想配列 [戻り値] 変換後の文字列 StringToHash(buf) [説明] 文字列を連想配列に展開 展開後の連想配列はバイト配列になる [引数] buf - 展開する文字列 [戻り値] 展開したバイト配列 □正規表現関数 RegMatch("reg", buf, &hash[] = 0, op = "") [説明] 文字列を検索 1回のマッチで検索を終了する hash[0] にはマッチした全体の文字列が入る hash[1〜n] は括弧の数に対応 [引数] "reg" - 正規表現文字列 buf - 検索文字列 hash[] - 結果を格納する配列 op - "i" を指定すると大文字小文字無視 [戻り値] マッチする場合は 1 、マッチしない場合は 0 RegMatchAll("reg", buf, &hash[] = 0, op = "") [説明] 文字列を検索しマッチする文字列を全て抽出 hash[] にはマッチした部分を格納していく [引数] "reg" - 正規表現文字列 buf - 検索文字列 hash[] - 結果を格納する配列 op - "i" を指定すると大文字小文字無視 [戻り値] マッチした回数 RegReplace("reg", to, buf, op = "") [説明] 文字列を置換 [引数] "reg" - 正規表現文字列 to - 置換文字列、\\1 \\2 \\3 ... \\9 は括弧に対応して置換文字列を変換する buf - 対象文字列 op - "i" を指定すると大文字小文字無視 [戻り値] 置換後の文字列 □文字コード関数 IsLeadChar(buf) [説明] 1文字目が全角の1バイト目かチェックする [引数] buf - チェックする文字列 [戻り値] 全角の1バイト目の場合は 1 、それ以外は 0 GetCodeType(buf) [説明] 漢字コードの種類を取得する [引数] buf - チェックする文字列 [戻り値] 0 - ASCII 1 - SJIS 2 - JIS 3 - EUC SjisToJis(buf) [説明] SJISをJISに変換 [引数] buf - 変換文字列 [戻り値] 変換後の文字列 JisToSjis(buf) [説明] JISをSJISに変換 [引数] buf - 変換文字列 [戻り値] 変換後の文字列 SjisToEuc(buf) [説明] SJISをEUCに変換 [引数] buf - 変換文字列 [戻り値] 変換後の文字列 EucToSjis(buf) [説明] EUCをSJISに変換 [引数] buf - 変換文字列 [戻り値] 変換後の文字列 Base64Decode(buf) [説明] BASE64デコード [引数] buf - 変換文字列 [戻り値] 変換後の文字列 Base64DecodeHash(buf, &hash[]) [説明] BASE64デコードして連想配列に設定 [引数] buf - 変換文字列 hash[] - 変換したバイト配列 [戻り値] 0 Base64Encode(buf) [説明] BASE64エンコード [引数] buf - 変換文字列 [戻り値] 変換後の文字列 Base64EncodeHash(hash[]) [説明] 連想配列の内容をBASE64エンコード [引数] hash[] - 変換するバイト配列 [戻り値] 変換後の文字列 □ファイル関数 CreateDirectory(dir) [説明] ディレクトリの作成 [引数] dir - ディレクトリ名 [戻り値] 成功 0, エラー -1 RemoveDirectory(dir) [説明] ディレクトリの削除 [引数] dir - ディレクトリ名 [戻り値] 成功 0, エラー -1 GetCurrentDirectory() [説明] カレントディレクトリの取得 [引数] なし [戻り値] カレントディレクトリのパス SetCurrentDirectory(dir) [説明] カレントディレクトリの設定 [引数] dir - ディレクトリ名 [戻り値] 成功 0, エラー -1 CopyFile(from, to) [説明] ファイルのコピー [引数] from - コピー元ファイル名 to - コピー先ファイル名 [戻り値] 成功 0, エラー -1 MoveFile(from, to) [説明] ファイルの移動 [引数] from - 移動元ファイル名 to - 移動先ファイル名 [戻り値] 成功 0, エラー -1 DeleteFile(file) [説明] ファイルの削除 [引数] file - ファイル名 [戻り値] 成功 0, エラー -1 FileOpen(type, file) [説明] ファイルを開く [引数] type - "read", "write", "new" のいずれか file - ファイル名 [戻り値] ファイル識別子、エラー -1 FileClose(f) [説明] ファイルを閉じる [引数] f - ファイル識別子 [戻り値] 0 GetFileSize(f) [説明] ファイルサイズの取得 [引数] f - ファイル識別子 [戻り値] ファイルサイズ、エラー -1 SetFilePointer(f, size, type = 0) [説明] ファイルポインタを移動 [引数] f - ファイル識別子 size - 移動させるバイト数 type - 0-先頭から、1-現在位置から、2-終点から [戻り値] 新しいファイルポインタの位置、エラー -1 FileRead(f, &buf, len) [説明] ファイルを文字列に読み込む [引数] f - ファイル識別子 buf - 読み込んだ文字列を格納する変数 len - 読み込む長さ (省略時全て) [戻り値] 読み込んだバイト数、エラー -1 FileReadHash(f, &hash[], len) [説明] ファイルを連想配列に読み込む [引数] f - ファイル識別子 hash[] - 読み込んだバイト配列を格納する変数 len - 読み込む長さ (省略時全て) [戻り値] 読み込んだバイト数、エラー -1 FileWrite(f, buf, len = 0) [説明] 文字列をファイルに書き込む [引数] f - ファイル識別子 buf - 書き込む文字列 len - 書き込む長さ (0 の場合は全て) [戻り値] 成功 0, エラー -1 FileWriteHash(f, hash[], len = 0) [説明] 連想配列をファイルに書き込む [引数] f - ファイル識別子 hash[] - 書き込むバイト配列 len - 書き込む長さ (0 の場合は全て) [戻り値] 成功 0, エラー -1 FileFindInit(file) [説明] ファイル検索の初期化 [引数] file - ファイル名 (ワイルドカード使用可(*および?)) [戻り値] 成功 検索ハンドル, エラー 0 FileFindNext(hFind) [説明] 次のファイル検索 [引数] hFind - FileFindInit() で取得した検索ハンドル [戻り値] ファイルが見つかった場合 1, 見つからない場合 0 FileFindClose(hFind) [説明] ファイル検索の終了 [引数] hFind - FileFindInit() で取得した検索ハンドル [戻り値] 0 FileFindAttributes(hFind) [説明] 検索ファイルの属性取得 [引数] hFind - FileFindInit() で取得した検索ハンドル [戻り値] ファイル属性の組み合わせ 0x001 - 読み取り専用 0x002 - 隠しファイル 0x004 - システムファイル 0x010 - ディレクトリ 0x020 - アーカイブファイル 0x080 - ノーマル 0x100 - 一時ファイル FileFindName(hFind) [説明] 検索ファイルのファイル名取得 [引数] hFind - FileFindInit() で取得した検索ハンドル [戻り値] ファイル名 FileFindSize(hFind) [説明] 検索ファイルのサイズ取得 [引数] hFind - FileFindInit() で取得した検索ハンドル [戻り値] ファイルサイズ FileFindTime(hFind, type) [説明] 検索ファイルの時間取得 [引数] hFind - FileFindInit() で取得した検索ハンドル type - 0 - 最終書き込み時間 1 - 最終アクセス時間 2 - 作成時間 省略時は 0 と同じ意味になる [戻り値] 時刻を表す連想配列 (GetSystemTime()参照) Shell(file, param = "", dir = "", style = 1) [説明] 指定ファイルの実行を行う [引数] file - 実行するファイル名 param - 引数 dir - 作業ディレクトリ style - 実行時の大きさ 0 - 非表示 1 - 元のサイズと位置に表示 2 - 最小化して表示 3 - 最大化して表示 [戻り値] 成功 0, エラー -1 ExecScript(path, file, param[]) [説明] スクリプトを現在のスレッドで実行 [引数] path - スクリプトファイルのパス file - ファイル名 param[] - 引数 [戻り値] スクリプトが返す値 読み込み時のエラーは -1 を返す □ネットワーク関数 gethostname() [説明] 自ホスト名の取得 [引数] なし [戻り値] ホスト名の文字列 gethostbyname(server) [説明] ホスト名からIPアドレスを取得 [引数] server - ホスト名の文字列 [戻り値] IPアドレス, エラーの時は空文字を返す gethostbyaddr(ip_addr, type = 2) [説明] IPアドレスからホスト名を取得 [引数] ip_addr - IPアドレスの文字列 type - Address family 2 - AF_INET [戻り値] ホスト名, エラーの時は空文字を返す getsockname(soc, &ip_addr) [説明] ソケットのIPアドレスとポート番号を取得 [引数] soc - ソケット ip_addr - IPアドレスを受け取るバッファ [戻り値] ポート番号, エラー -1 getpeername(soc, &ip_addr) [説明] 接続先のIPアドレスとポート番号を取得 [引数] soc - ソケット ip_addr - IPアドレスを受け取るバッファ [戻り値] ポート番号, エラー -1 socket(af = 2, type = 1, protocol = 0) [説明] ソケットの作成 [引数] af - Address family 0 - AF_UNSPEC 1 - AF_UNIX 2 - AF_INET type - ソケットタイプ 1 - SOCK_STREAM (TCP) 2 - SOCK_DGRAM (UDP) protocol - プロトコル [戻り値] ソケット, エラー -1 closesocket(soc) [説明] ソケットを閉じる [引数] soc - ソケット [戻り値] 0 connect(soc, host, port) [説明] 接続 [引数] soc - ソケット host - ホスト名かIPアドレス port - ポート番号 [戻り値] 接続完了 0, エラー -1 bind(soc, host, port) [説明] bind [引数] soc - ソケット host - ホスト名かIPアドレス port - ポート番号 [戻り値] 接続完了 0, エラー -1 listen(soc, backlog) [説明] listen [引数] soc - ソケット backlog [戻り値] 成功 0, エラー -1 accept(soc) [説明] 受理 [引数] soc - ソケット [戻り値] 新しいソケット, エラー -1 select(soc, time) [説明] 受信バッファの確認 [引数] soc - ソケット time - タイムアウト秒数 [戻り値] 受信可能 1, タイムアウト 0, エラー -1 recv(soc, &buf, len = 256, flags = 0) [説明] 受信 [引数] soc - ソケット buf - 受信文字列を格納する変数 len - 受信バイト数 flags - フラグの組み合わせ MSG_OOB - 0x1 MSG_PEEK - 0x2 [戻り値] 受信したバイト数, 切断 0, エラー -1 RecvHash(soc, &hash[], len = 256, flags = 0) [説明] 受信して連想配列に設定 [引数] soc - ソケット hash[] - 受信したバイト配列を格納する変数 len - 受信バイト数 flags - フラグの組み合わせ MSG_OOB - 0x1 MSG_PEEK - 0x2 [戻り値] 受信したバイト数, 切断 0, エラー -1 send(soc, buf, len = 0, flags = 0) [説明] 送信 [引数] soc - ソケット buf - 送信文字列 len - 送信バイト数 (0 の場合は全て) flags - フラグの組み合わせ MSG_OOB - 0x1 MSG_DONTROUTE - 0x4 [戻り値] 送信完了 0, エラー -1 SendHash(soc, hash[], len = 0, flags = 0) [説明] 連想配列の内容を送信 [引数] soc - ソケット hash[] - 送信するバイト配列 len - 送信バイト数 (0 の場合は全て) flags - フラグの組み合わせ MSG_OOB - 0x1 MSG_DONTROUTE - 0x4 [戻り値] 送信完了 0, エラー -1 □入出力関数 puts(buf) [説明] 文字列の表示 [引数] buf - 出力文字列 [戻り値] 0 gets(len) [説明] 文字列の入力 [引数] 読み取る文字数 [戻り値] 入力文字列 getchar() [説明] 1文字入力 [引数] なし [戻り値] 入力文字 SetEchoMode(n) [説明] echo設定 (0-echo off, 1-echo on) [引数] n - 0 = echo off, 1 = echo on [戻り値] 0 -- Copyright (C) 1996-2002 by Tomoaki Nakashima. All rights reserved. WEB SITE: http://www.nakka.com/ E-MAIL: nakka@nakka.com