メタ操作・特殊関数†

33 個の関数。

EVAL†

書式†

EVAL( string )

引数†

Parameter Description
string YAYA スクリプトとして実行するテキスト文字列。式ひとつか、文の並び(Tc574-6 / Tc602-9以降)

戻り値†

解説†

引数の文字列を YAYA スクリプトとして実行します。式の展開や実行時の関数名合成などに使えます。

式ひとつ†

文字列が式ひとつなら、その式を評価した値を返します。代入の式は呼び出し元の変数に代入されます。

_x = EVAL('1 + 2')          // 3
EVAL('_name = "Emily"')     // 呼び出し元のローカル変数 _name に代入される
文の並び(Tc574-6 / Tc602-9以降)†

クォートの外に ;、{、}、改行のどれかがあるか、先頭の語が return if while for foreach switch void parallel のどれかであれば、文の並びとして実行します。関数の本体の { } の中に書くのと同じように書けます。

_r = EVAL('_a = 1; _b = _a + 2; _b')   // 3

_r = EVAL('if _hour < 12 { "おはよう" } else { "こんにちは" }')

_r = EVAL('_s = 0; foreach _list; _v { _s += _v }; _s')

ヒアドキュメントなどで改行を含む文字列を渡せば、辞書に書くのと同じ形で書けます。改行は ; と同じく文の区切りになり、// や /* */ のコメント、行末の / による行の結合も使えます。

_code = <<'
_s = 0
for _i = 1; _i <= 10; _i++ {
    _s += _i
}
_s
'>>
_r = EVAL(_code)   // 55

Tc574-8 / Tc603-1以降では、渡すコードの中にもヒアドキュメントを書けます。

返り値は関数の返り値と同じ規則で決まります。出力になる式が複数あればその中から選ばれ、-- で出力を連結でき、return を書けばそこで実行を終えてその値を返します。

文の並びは、呼び出し元の { } の中にブロックをひとつ書いたのと同じように実行されます。

Foo
{
    _count = 1
    _r = EVAL('_count += 10; _tmp = _count * 2; _tmp')
    // _r は 22、_count は 11、_tmp はここでは存在しない
}

関数の定義や #define などのプリプロセッサは書けません。関数を定義したいときは APPEND_RUNTIME_DIC を使います。

制御構造を含むコードの実行だけなら APPEND_RUNTIME_DIC でもできますが、EVAL のほうが高速です。APPEND_RUNTIME_DIC は関数テーブルへの登録を伴うのに対し、EVAL は実行用のブロックをひとつ作って実行するだけで済むためです。

クォートの中の ; { } や改行は区切りとして扱いません。EVAL('"a;b"') や、改行を含む文字列を " で囲んで埋め込み要素を展開する使い方は、これまでどおり式ひとつとして評価されます。

文字列に " や % を含めるとき†

EVAL に渡す文字列の中でダブルクォートを使うときは、CHR(34) を使う。たとえば、変数 i に "test" を代入するには、次のように書く(Tc569-8 以降は、"" と2つ続けて書く方法もある。値と変数)。

EVAL("i=%(CHR(34))test%(CHR(34))")

% の展開を EVAL の実行時に行いたいときも、% を CHR(37) にする。次の例は、"%(foo)" を実行する。

EVAL("%(CHR(34))%(CHR(37))(foo)%(CHR(34))")

EVAL の結果を文字列に変換する TOSTR(EVAL("formula")) と、埋め込み展開 "%(formula)" は、同じ結果をもたらす。

使用例†

EVAL("i=1")

EVAL("i=%(CHR(34))test%(CHR(34))")

EVAL("%(CHR(34))%(CHR(37))(foo)%(CHR(34))")

EVAL('_n = 0; while _n < 3 { _n++ }; _n')   // 3

互換性†

関連項目†


ISEVALUABLE†

書式†

ISEVALUABLE( string )

引数†

Parameter Description
string YAYAスクリプトとして実行する文字列

戻り値†

解説†

指定した文字列をYAYAスクリプトとしてEVAL関数で実行できるかどうかを検証する関数。

EVALで任意の文字列を実行する前にこの関数で事前検証することで、不正なコード文字列による実行時エラーを防ぐことができる。

文の並び(; や改行で区切った複数の文や、if/for などの制御文)も、EVALと同じ規則で判定して検証する(Tc574-6 / Tc602-9以降)。

ISEVALUABLE('1 + 2')                  // 1
ISEVALUABLE('_a = 1; if _a { 2 }')    // 1
ISEVALUABLE('_a = 1; if { 2')         // 0

互換性†

関連項目†


ERASEVAR†

書式†

ERASEVAR( name [, name ...] )

引数†

Parameter Description
name 削除する変数名(文字列で指定)。複数指定可能。

戻り値†

返り値はありません(VOID)。

解説†

変数を消去します。変数名は文字列として指定する必要があります。

ERASEVAR("i")          // 正しい例:変数 i を削除
ERASEVAR("i","j","k")  // 正しい例:複数の変数を一度に削除
ERASEVAR(i)            // 誤った例:変数名は文字列リテラルで指定すること

セーブデータに残す必要のないグローバル変数の消去などに利用できます。

互換性†

関連項目†


LETTONAME†

書式†

LETTONAME(name, val)

引数†

Parameter Description
name 代入先の変数名を表す文字列
val 代入する値

戻り値†

VOID(戻り値なし)

解説†

nameで指定された文字列の変数名に、valで指定された値を代入します。実行時に変数名を動的に決定して値を代入する際に使用します。変数名を実行時に合成したい場合などに用います(例: shiori3.dic の reference 変数など)。

使用例†

// ループを使った動的変数代入
for _i = 0 ; _i < 5 ; _i ++ {
    LETTONAME('var' + _i , _i + 100)
}
// var0〜var4にそれぞれ100〜104が代入される

// 配列の代入(正しい書き方)
LETTONAME(_varname, ('abc', 12))

// 配列変数を経由した代入(正しい書き方)
_array = ('abc', 12)
LETTONAME(_varname, _array)

// 誤った書き方(最初の値しか代入されない)
LETTONAME(_varname, 'abc', 12)

互換性†

関連項目†


LSO†

書式†

LSO
LSO()

引数†

なし

戻り値†

直前のセレクション操作で選択された位置を示す数値。

解説†

"last Selection Order" の略。最後に行われた選択の結果を、位置を表す数値で返す。

request
{
    _i = foo
    LSO
}

foo
{
    "earth"
    "moon"
    "sun"
}

_i に "sun" が代入された場合、LSO は 2 になる(0 始まり)。とにかく択一がされる場合すべてについて動作する。したがって、該当の処理が完了した直後に値を取得しないと意味がない。

取得する位置に注意†

次のコードは、ANY の選択結果を得ようとしているなら誤り。この位置にある LSO は、{ } の選択結果を取得する。したがって res は常に 0 になる。

request
{
    {
        "This is a " + ANY("pen", "pencil", "eraser") + "."
    }
    res = LSO
}

次のように修正すると、意図どおりに動作する。

request
{
    {
        "This is a " + ANY("pen", "pencil", "eraser") + "."
        res = LSO
    }
}
出力確定子がある場合†

出力確定子(--)がある場合、LSO はすべての取り得る組み合わせに対して動作する。

request
{
    {
        "1"
        "2"
        "3"
        --
        "A"
        "B"
    }
    _i = LSO
}

たとえば上の関数内の { } 部は、"1A" "2A" "3A" "1B" "2B" "3B" のいずれかを出力する。LSO の値の範囲もこれと一致し、0〜5 を取る。各値は上の並びと一致する。

互換性†

関連項目†


SAVEVAR†

書式†

SAVEVAR( [path] )

引数†

Parameter Description
path 保存先ファイル名(省略時はDLL名 + "_variable.cfg"、例: yaya_variable.cfg)

戻り値†

なし(VOID)

解説†

変数を保存します。unload時に行われる処理と同等です。

保存先ファイルを任意のパスに指定することもできます。

保存形式†

1行に1変数を、次の形式で書き出します。

変数名,値,"デリミタ",watcher|setter|destorier

値の書式は次のとおりです。

型 書式 例
整数 そのまま 5
実数 元の値に戻せる桁数の小数(指数は使わない)。無限大と NaN は inf -inf nan(Tc574-8 / Tc603-1以降) 2.5、0.0000001
文字列 "..."(" と制御文字はエスケープ) "abc"
汎用配列 要素を : で区切る。要素が1つなら末尾に :IARRAY、空なら IARRAY:IARRAY 1:"b":2.5
ハッシュ(Tc600-3以降) キー=値 を : で区切る。要素が1つなら末尾に :IHASH=IHASH、空なら IHASH=IHASH:IHASH=IHASH "a"=1:"b"="x"
要素・キー・値の VOID IVOID "v"=IVOID
入れ子の要素(Tc600-3以降) 配列・ハッシュの書式を IARRAY{...} / IHASH{...} で囲む "l"=IARRAY{1:2}

Tc600-3以降のハッシュや入れ子の例:

h,"a"=1:"l"=IARRAY{1:2}:"n"=IHASH{"x"=1:"y"="s"},",",
v,IHASH{"k"=1:IHASH=IHASH}:IARRAY,",",
e,"e"=IHASH{IHASH=IHASH:IHASH=IHASH}:"ea"=IARRAY{IARRAY:IARRAY},",",

入れ子の内側も同じ規則で書き出すので、何段入れ子にしても元の値に戻せます。

ハッシュや入れ子を含まない変数の書式は、Tc600-3 より前と同じです。Tc600-3以降で保存したファイルを古いバージョンで読むと、ハッシュや入れ子を含む変数だけが崩れます(600 での変更点)。

互換性†

関連項目†


RESTOREVAR†

書式†

RESTOREVAR( [ path ] )

引数†

Parameter Description
path (省略可)復元元のファイル名。省略時はデフォルトのファイル名(DLL名 + "_variable.cfg"、例: yaya_variable.cfg)が使用される

戻り値†

VOID(戻り値なし)

解説†

変数を(ファイルから)ロード(復元)します。処理はロード時に行われる処理と同等です。指定したファイルから変数を復元できます。

ファイルの形式は SAVEVAR を参照してください。Tc600-3以降はハッシュと入れ子の値も復元できます。Tc600-3 より前のバージョンで保存したファイルもそのまま読めます。

互換性†

関連項目†


SERIALIZEVAR†

書式†

SERIALIZEVAR( name )

引数†

Parameter Description
name 変数名の文字列。_ で始まればローカル変数、それ以外はグローバル変数

戻り値†

変数の値を、セーブファイルの値と同じ書式にした文字列。

変数が存在しない、値が VOID、または ERASEVAR で消した変数のときは、警告 W0012 を出して VOID を返します。

解説†

指定した変数の値を、SAVEVAR がセーブファイルに書くのと同じ書式の文字列にします。DESERIALIZEVAR に渡すと、同じ値を別の変数に復元できます。

セーブファイルの 1 行は 変数名,値,"デリミタ",watcher|setter|destorier ですが、この関数が返すのは値の部分だけです。変数名、デリミタ、watcher / setter / destorier、文字コードの指定は含みません。

JSON と違い、整数と実数、整数のキーと文字列のキー、VOID と空文字列などの区別を保ちます。入れ子の配列・ハッシュも IARRAY{...} / IHASH{...} の形でそのまま書き出します。

返す文字列は 1 行で、改行などの制御文字はエスケープされます。

使用例†

a = 5
b = "x,y"
c = (1, "x", 2.5)
d = IHASH("k", 1)

SERIALIZEVAR("a")   // 5
SERIALIZEVAR("b")   // "x,y"(ダブルクォートを含む)
SERIALIZEVAR("c")   // 1:"x":2.5
SERIALIZEVAR("d")   // "k"=1:IHASH=IHASH

ローカル変数も指定できます。

_x = IARRAY
_x[0] = IHASH("k", 1)
_x[1] = "s"
_s = SERIALIZEVAR("_x")   // IHASH{"k"=1:IHASH=IHASH}:"s"

互換性†

関連項目†


DESERIALIZEVAR†

書式†

DESERIALIZEVAR( name, text )

引数†

Parameter Description
name 復元先の変数名の文字列。_ で始まればローカル変数、それ以外はグローバル変数。存在しなければ作る
text SERIALIZEVAR が返す書式の文字列

戻り値†

復元できれば 1。text が書式として読めなかったときや、引数が不正なときは 0(変数には何もしません)。

解説†

text を、SAVEVAR がセーブファイルに書く値の書式として読み、name の変数に格納します。変数が元から持っていた値は置き換わり、型も text の内容で決まります(整数 / 実数 / 文字列 / 配列 / ハッシュ)。

LETTONAME と同じく、変数に設定された setter / watcher は呼びません。デリミタや setter / watcher / destorier の設定は変えません。

次の場合は警告を出して 0 を返し、変数を作りも変えもしません。

場合 警告
引数が足りない W0008
name か text が文字列でない W0009
name が空文字列 W0010
name が変数名として使えない(, を含む、システム関数や予約語と同名など) W0012
text が書式として読めない(空文字列、ダブルクォートのない文字列、: のない配列、IVOID だけの値など) W0026

使用例†

a = (1, "x", 2.5)
_s = SERIALIZEVAR("a")
_r = DESERIALIZEVAR("b", _s)   // b が (1, "x", 2.5) になる。_r は 1

DESERIALIZEVAR("n", "0.5")     // n が実数 0.5 になる
DESERIALIZEVAR("m", "abc")     // 0。警告 W0026

ローカル変数への復元:

_x = IARRAY
_x[0] = IHASH("k", 1)
_x[1] = "s"
_r = DESERIALIZEVAR("_y", SERIALIZEVAR("_x"))
// _y は _x と同じ入れ子の配列になる

互換性†

関連項目†


GETSETTING†

書式†

GETSETTING( string )

引数†

Parameter Description
string 取得したい情報の識別子(後述の文字列または基礎設定のエントリ名)

戻り値†

解説†

動作中の文に設定されている情報を返す関数。

stringには以下の識別子(文字列)または後方互換のための数値(0〜4)を指定できる。また、基礎設定のエントリ名を指定することも可能。

取得できる情報†

識別子 旧数値 取得されるデータ 例
coreinfo.version 0 YAYAのバージョン番号 "Tc522-1"
(数値1) 1 現在の文字コードID(0=Shift_JIS、1=UTF-8、127=OS のデフォルト) 0
coreinfo.path 2 ディレクトリの絶対パス "c:\hogehoge\"
coreinfo.name 3 DLL名 "YAYA"
coreinfo.author 4 DLL作者 "umeici/The Maintenance Shop"
coreinfo.savefile — セーブファイルのパス "d:/ghost/konno_yayame/..."
coreinfo.mode — 実行モード "normal" または "emergency"
coreinfo.locale — OSのユーザー設定の地域(数値や日付の書式)のロケール "ja-JP"
coreinfo.uilocale — OSのユーザー設定の表示言語のロケール "ja-JP"
coreinfo.timezone — OSのローカルタイムゾーンのIANAの名前 "Asia/Tokyo"

coreinfo.locale / coreinfo.uilocale は 言語-地域 の形式(BCP 47)の名前を返す。取得できないときは空文字列になる。

coreinfo.timezone は Asia/Tokyo のようなIANAのタイムゾーン名を返す。取得できないときは空文字列になる。

互換性†

関連項目†


SETSETTING†

書式†

SETSETTING( name , string )

引数†

Parameter Description
name 設定情報のエントリ名(文字列)。基本設定ファイルのエントリ名を指定
string 設定する値(文字列)

戻り値†

解説†

動作中の文の設定情報を変更します。GETSETTING と対になる関数です。

以下の設定エントリは初回ロード時にのみ意味を持つため、実行時に変更しても効果がありません:

互換性†

関連項目†


GETFUNCLIST†

書式†

GETFUNCLIST( [prefix] )

引数†

Parameter Description
prefix (省略可)この文字列で始まる関数名のみを返す。省略した場合はすべての関数を返す

戻り値†

解説†

現在読み込んでいる辞書の関数一覧を返す関数。

prefixを指定すると、その文字列で始まる関数名のみがフィルタリングされて返される。省略した場合はすべての関数が返される。

使用例†

指定した名前で始まる関数をすべて実行する関数と、正規表現にマッチする関数をすべて実行する関数の例。

CALLALLFUNCTIONBEGINAS {
    _L= GETFUNCLIST(_argv[0])
    foreach _L;_V {
        EVAL(_V)
    }
}

CALLALLFUNCTIONINRE {
    _L= GETFUNCLIST
    foreach _L;_V {
        if RE_GREP(_V,_argv[0])
            EVAL(_V)
    }
}

互換性†

関連項目†


GETFUNCINFO†

書式†

GETFUNCINFO( name )

引数†

Parameter Description
name 情報を取得したい関数名(必須)

戻り値†

解説†

現在読み込んでいる辞書の(ユーザー)関数の情報を取得する関数。

関数が定義されているファイルのパスと、その開始・終了行番号を取得できる。デバッグ用途で、ある関数がどのファイルのどこに定義されているかを動的に調べる際に有用。

使用例†

OnTextDrop で関数名を受け取り、その関数が定義されているファイルと行を表示する例(デバッグモード時)。

OnTextDrop{
    //...
    if DebugMode{
        _t=CUTSPACE(reference0)
        //...
        if ISFUNC(_t){
            _info=GETFUNCINFO(_t)
            _path=SPLITPATH(_info[0])
            if _path
                _path=_path[2]+_path[3]
            else
                _path=_info[0]
            "関数「%(_t)」は、\n/
            ファイル「\q[◇%(_path),OnOpenDirOrFile,%(_info[0])]」の%(_info[1])行目から始まります。\n/
            "
        }
        //...
    }
    //...
}

互換性†

関連項目†


GETVARLIST†

書式†

GETVARLIST( [ prefix ] )

引数†

Parameter Description
prefix (省略可)指定した文字列で始まる変数名のみを返す。省略時は全変数を返す

戻り値†

解説†

現在保持している変数のリストを返す。prefix を指定すると、その文字列で始まる変数名のみが返される。

使用例†

指定した名前で始まる変数をすべて消去する関数と、正規表現にマッチする変数をすべて消去する関数の例。

ERASEALLVARBEGINAS {
    _L= GETVARLIST(_argv[0])
    foreach _L;_V {
        ERASEVAR(_V)
    }
}

ERASEALLVARINRE {
    _L= GETVARLIST
    foreach _L;_V {
        if RE_GREP(_V,_argv[0])
            ERASEVAR(_V)
    }
}

互換性†

関連項目†


GETSYSTEMFUNCLIST†

書式†

GETSYSTEMFUNCLIST( [ prefix ] )

引数†

Parameter Description
prefix (省略可)指定した文字列で始まるシステム関数名のみを返す。省略時は全システム関数を返す

戻り値†

解説†

システム関数のリストを返す。prefix を指定すると、その文字列で始まるシステム関数名のみが返される。省略した場合は全システム関数のリストが返される。

互換性†

関連項目†


CHARSETTEXTTOID†

書式†

CHARSETTEXTTOID(string)

引数†

Parameter Description
string 文字コードを表す文字列

戻り値†

成功時:文字コードIDを表す整数 失敗時:-1(警告 W0012、GETLASTERROR は 12)

文字コードを表す文字列を文字コードIDに変換する。使える名前は 文字コードの名前 を参照。大文字小文字は区別しない。空文字列は 127(OSデフォルト)になる。

使用例†

CHARSETTEXTTOID('Shift_JIS')  // 0 を返す
CHARSETTEXTTOID('UTF-8')      // 1 を返す
CHARSETTEXTTOID('UTF8')       // 1 を返す
CHARSETTEXTTOID('UTF-16')     // -1 を返す(W0012)

互換性†

関連項目†


CHARSETIDTOTEXT†

書式†

CHARSETIDTOTEXT(id)

引数†

Parameter Description
id 文字コードIDを表す整数

戻り値†

成功時:文字コードを表す文字列 失敗時:"default" という文字列

解説†

文字コード ID を、文字コードを表す文字列に変換する。

使用例†

CHARSETIDTOTEXT(0) // "Shift_JIS" を返す
CHARSETIDTOTEXT(1) // "UTF-8" を返す

互換性†

関連項目†


EXECUTE†

書式†

EXECUTE( path [, option [, dir ]] )

引数†

Parameter Description
path 起動するファイルまたはアプリケーションのパス。相対パスは信頼性が低いため、絶対パスの使用を推奨。
option アプリケーションに渡す引数(省略可)。URLをブラウザで開く場合などに使用。
dir 起動するプロセスの作業ディレクトリ(省略可)。相対パスは FOPEN などと同じく DLL のロードディレクトリを基準とする。省略するか空文字列なら指定しない。YAYA や SSP のカレントディレクトリは変わらない。

戻り値†

解説†

コマンド文字列をコマンドプロセッサに引き渡して外部アプリケーションやファイルを起動します。C言語の system() 関数を改良したもので、アプリケーションの終了を待たずに処理を返します。

使用例†

_val = EXECUTE('IEXPLORE.EXE','http://www.yahoo.co.jp/')

Yahoo のホームページを Internet Explorer で開きます。

互換性†

関連項目†


EXECUTE_WAIT†

書式†

EXECUTE_WAIT( path [, option [, dir ]] )

引数†

Parameter Description
path 実行するファイルまたはアプリケーションのパス。相対パスは信頼性が低いため、絶対パスの使用を推奨。
option アプリケーションに渡す引数(省略可)。URLをブラウザで開く場合などに使用。
dir 起動するプロセスの作業ディレクトリ(省略可)。相対パスは FOPEN などと同じく DLL のロードディレクトリを基準とする。省略するか空文字列なら指定しない。YAYA や SSP のカレントディレクトリは変わらない。

戻り値†

解説†

コマンド文字列をOSのコマンドプロセッサに引き渡して外部アプリケーションやファイルを実行します。EXECUTE と異なり、アプリケーションの終了を待ってから処理を返します(同期実行)。C言語の system() 関数に相当します。

使用例†

_val = EXECUTE_WAIT('CL.EXE','HELLOWORLD.C')

C コンパイラで HELLOWORLD.C をコンパイルし、完了を待ちます。

THREADSTART で起動したスレッドから呼ぶと、外部アプリケーションの終了を待つ間も、SSP からの request や他のスレッドが止まりません。Windows では、スレッドが THREADSTOP や unload で中断を求められると、待つのをやめて -1 を返します(起動したアプリケーションはそのまま動き続けます)。POSIX では、終わるまで待ちます。

互換性†

関連項目†


EXECUTE_CAPTURE†

書式†

EXECUTE_CAPTURE( path [, option [, dir [, options ]]] )

引数†

Parameter Description
path 実行するファイルのパス。EXECUTE_WAIT と同じく、相対パスは信頼性が低いため、絶対パスの使用を推奨。PATH にあるコマンド名も指定できる
option プログラムに渡す引数(省略可)。EXECUTE_WAIT と同じ
dir 起動するプロセスの作業ディレクトリ(省略可)。EXECUTE_WAIT と同じ。省略するか空文字列なら指定しない
options 動作を指定するハッシュ(省略可)。IHASH で作る。下の表のキーを使う。キーを省いたものは既定の動作になる
options のキー†
キー 値 意味
stdin 文字列 プログラムの標準入力に渡す内容。省略すると、何も渡さずにすぐ入力の終わりになる(入力を待ち続けるプログラムも止まらない)
stderr "separate" / "merge" / "discard" 標準エラー出力の扱い。"separate"(既定)は標準出力とは別に取り込む。"merge" は標準出力に混ぜる(出力された順のまま stdout に入り、stderr は空)。"discard" は捨てる
timeout 整数(ミリ秒) この時間で終わらなければ、プログラムを終了させて戻る。0(既定)は無制限
maxsize 整数(バイト) stdout・stderr それぞれの上限。超えたらプログラムを終了させて戻る。既定は 16777216(16MiB)、指定できる最大は 1073741824
charset 文字コードの名前または数値 stdin の文字列を渡すとき、stdout・stderr を文字列にするときの文字コード(文字コードの名前)。省略または空文字列なら OS の既定(Windows は ANSI コードページ、POSIX は UTF-8)。path・option・dir には影響しない

値が VOID のキーは、指定していないものとして扱う。

戻り値†

次のキーを持つハッシュ。

キー 値
exitcode プログラムの終了コード。終了を確認できなかったとき("failed"、プログラムが終わる前の "timeout" / "canceled" / "truncated")は -1。POSIX 環境でシグナルにより終了したときも -1
stdout 標準出力の内容(文字列)
stderr 標準エラー出力の内容(文字列)。stderr オプションが "merge" / "discard" のときは空
status 終わり方。下の表を参照
status 意味
ok プログラムが終了した(終了コードが 0 でなくても "ok")
timeout timeout の時間で終わらなかったので終了させた
canceled THREADSTOP や unload でスレッドの中断を求められたので終了させた
truncated stdout か stderr が maxsize を超えたので終了させた。内容は maxsize までに切り詰める
failed 起動できなかった(実行ファイルが見つからない、作業ディレクトリがない、など)。引数やオプションが不正なときも "failed" を返す

timeout / canceled / truncated のときも、それまでに取り込んだ出力は stdout / stderr に入る。

解説†

外部のプログラムを起動し、終了を待って、標準出力・標準エラー出力を取り込みます。標準入力に文字列を渡すこともできます。ほかの言語の subprocess.run(Python)、Open3.capture3(Ruby)、execFileSync(Node.js)にあたる関数です。

_r = EXECUTE_CAPTURE('cmd.exe', '/c ver')
if _r['status'] == 'ok' && _r['exitcode'] == 0 {
    _r['stdout']
}

標準入力に渡して、結果を受け取る例です。

_in = 'b' + CHR(13,10) + 'a' + CHR(13,10)
_r = EXECUTE_CAPTURE('sort.exe', '', '', IHASH('stdin', _in))
_r['stdout']       // "a" と "b" が並ぶ

標準エラー出力を標準出力に混ぜ、10 秒で打ち切る例です。

_r = EXECUTE_CAPTURE('tool.exe', '--run', '', IHASH('stderr', 'merge', 'timeout', 10000))
EXECUTE_WAIT との違い†
待っている間の動き†
エラー†
状況 警告 GETLASTERROR
path がない W0008 8
path・dir・options・オプションの値の型が不正 W0009 9
stderr / timeout / maxsize / charset の値が不正 W0012 12
stdin を指定の文字コードに変換できない W0027 27
出力を文字列にできない(その出力は空になる) W0027 27
options に知らないキーがある(つづりの間違いに気づけるよう警告する。ほかのキーは有効で、実行は続ける) W0012 12

path などが不正で警告を出したときも、status が "failed" のハッシュを返します。

互換性†

関連項目†


LICENSE†

書式†

LICENSE()
LICENSE

引数†

なし

戻り値†

YAYAのライセンス文字列を格納した汎用配列。各エントリは改行で区切られる。

解説†

YAYAのライセンス文字列を返します。YAYA 本体に続けて、組み込んでいるライブラリ(MT19937、parson、TinyXML-2、SQLite)のライセンス文も含みます。

互換性†

関連項目†


APPEND_RUNTIME_DIC†

書式†

APPEND_RUNTIME_DIC(dic_content)

引数†

Parameter Description
dic_content 辞書ファイルの内容と同等の文字列。複数行や関数定義を含むことができる

戻り値†

成功時:0 失敗時:-1

解説†

_RUNTIME_DIC_ という辞書名のメモリ上の辞書に、dic_content の中身を書いたのと同じ効果をもたらす。動的に新たなユーザー関数の定義などができる。dic_content には複数行や関数定義を書け、ファイルから辞書を読んだのと同じ挙動になる。

THREADSTART で起動したスレッドが動いている間は、警告 W0032 を出して何も追加せず -1 を返す。

互換性†

関連項目†


OUTPUTNUM†

書式†

OUTPUTNUM(function_name)

引数†

Parameter Description
function_name 調べる対象の関数名(文字列)

戻り値†

対象関数が出力する選択候補数(整数)

解説†

指定した関数が出力する選択候補数を返します。対象関数を空の引数リストで呼び出すことで、出力候補数を取得します。関数の択一選択の仕組みについては関数の選択方式を参照してください。

互換性†

関連項目†


DICLOAD†

書式†

DICLOAD( filename [, code] )

引数†

Parameter Description
filename 読み込む辞書ファイル名
code 文字コードID、または文字コードの名前(文字コードの名前)。省略時、空文字列、default のときは基本設定ファイルの設定に従う。知らない名前なら警告 W0012 を出して何も読み込まずに 1 を返す

戻り値†

解説†

指定した辞書ファイルを動的に読み込みます。

注意事項:

互換性†

関連項目†


DICUNLOAD†

書式†

DICUNLOAD( filename )

引数†

Parameter Description
filename アンロードする辞書ファイル名

戻り値†

解説†

指定した辞書ファイルに含まれる関数および globaldefine グループをアンロードします。辞書ファイルに問題がある場合はエラーとなり何も起こりません。他の辞書から使われている関数を含む辞書はアンロードできません。

THREADSTART で起動したスレッドが動いている間は、警告 W0032 を出して何もせず 1 を返します。

互換性†

関連項目†


FUNCDECL_ERASE†

書式†

FUNCDECL_ERASE(variable_name, function_name)

引数†

Parameter Description
variable_name 監視対象の変数名
function_name 変数削除時に実行する関数名。空文字列('' または "")を指定すると登録解除

戻り値†

変数が削除されたとき、指定した関数が自動的に呼び出される。呼び出される関数の引数は以下の通り:

呼び出された関数の戻り値はシステムによって無視される。

変数がまだ無いときは、空の変数を作ってから登録する。

互換性†

関連項目†


FUNCDECL_READ†

書式†

FUNCDECL_READ(variable_name, function_name)

引数†

Parameter Description
variable_name 監視対象の変数名
function_name 変数読み取り時に実行する関数名。空文字列('')を指定すると登録解除

戻り値†

変数が読み取られるたびに、指定した関数が自動的に呼び出される。呼び出される関数の引数は以下の通り:

呼び出された関数は、実際に取得する値を返す必要がある(現在の値と異なる値を返すことも可能)。

値が汎用配列やハッシュのときは、_argv[1] が入れ子の配列やハッシュになる(_argv の要素数は 2 のまま)。Tc600-3 より前は、配列の値の先頭要素だけが _argv[1] に入っていた。

変数がまだ無いときは、空の変数を作ってから登録する。

互換性†

関連項目†


FUNCDECL_WRITE†

書式†

FUNCDECL_WRITE(variable_name, function_name)

引数†

Parameter Description
variable_name 監視対象の変数名
function_name 変数書き込み時に実行する関数名。空文字列("" または '')を指定すると登録解除

戻り値†

指定した変数に書き込みが行われるたびに、登録した関数が自動的に呼び出される。呼び出される関数の引数は以下の通り:

呼び出された関数は、変数に実際に書き込まれる値を返す必要がある(_argv[1] と異なる値を返すことも可能)。

値が汎用配列やハッシュのときは、_argv[1] _argv[2] の要素が入れ子の配列やハッシュになる(_argv の要素数は 3 のまま)。Tc600-3 より前は、配列の値が正しく渡らず(_argv[1] _argv[2] が空になる)、戻り値をそのまま返すと変数が空になっていた。

添字への代入(a[0] = v)では呼び出されない。

変数がまだ無いときは、空の変数を作ってから登録する(あとで代入したときに呼び出される)。

互換性†

関連項目†


UNDEFFUNC†

書式†

UNDEFFUNC( funcname )

引数†

Parameter Description
funcname 読み込み解除する関数名

戻り値†

解説†

指定した関数を読み込み解除する。

アンロードにより辞書ファイルに問題が生じる場合はエラーとなり、何も起こらない。また、既に他の箇所から参照されている関数はアンロードできない。

THREADSTART で起動したスレッドが動いている間は、警告 W0032 を出して何もせず 1 を返す。

互換性†

関連項目†


ISGLOBALDEFINE†

書式†

ISGLOBALDEFINE( define )

引数†

Parameter Description
define #globaldefine で定義されているか確認する名前

戻り値†

解説†

#globaldefine ディレクティブで定義された名前が存在するかどうかを確認する。

互換性†

関連項目†


PROCESSGLOBALDEFINE†

書式†

PROCESSGLOBALDEFINE(string)

引数†

Parameter Description
string プリプロセス処理を行いたい文字列

戻り値†

解説†

#globaldefine で定義したプリプロセス処理(文字列置き換え処理)と同様の処理を行います。プリプロセッサ機能の詳細については、プリプロセスを参照してください。

互換性†

関連項目†


SETGLOBALDEFINE†

書式†

SETGLOBALDEFINE( define_name , define_value )

引数†

Parameter Description
define_name #globaldefine で定義する名前
define_value #globaldefine で割り当てる値

戻り値†

解説†

メモリ上の _RUNTIME_DIC_ という名前の辞書に #globaldefine を記述したのと同等の効果をもたらします。

互換性†

関連項目†


UNDEFGLOBALDEFINE†

書式†

UNDEFGLOBALDEFINE( definename )

引数†

Parameter Description
definename #globaldefine で宣言したディレクティブ名

戻り値†

解説†

#globaldefine で宣言されたディレクティブを無効化・削除する。

#globaldefine で定義されたテキストを辞書ファイルに直接挿入することはできない。クォートで囲んでいてもプリプロセッサが適用されてしまうため、回避するには対象文字列を分割して記述する(例: "TEST_" + "DEF" のように連結する)。

互換性†

関連項目†