AYA as SAORI里々向け簡易解説
基本的に里々の内部関数やssu.dllできないこと、できるけど手間がかかることをやれる関数だけ書いてます。
ここでは里々向けに説明していますが、他のSHIORIでもSAORIが使えるSHIORIなら使えます。
AYAの関数は文屋のシステム関数を参考にしてください。
ここ見れば理解できるという人はこのページを見る必要はないです。
AYAの作者のumeiciさんとAYA as SAORIの作者の摂理さんに感謝。
メニュー
前準備
1. AYA as SAORIの
aya5.dll
aya5.txt
ayasaori.aym
builtins.aym
をsaoriフォルダにいれる。
2. satori_conf.txtの「@SAORI」の下に
aya,saori/aya5.dll
を追加。
まぁ普通のSAORIの使い方と同じです。自分の使いやすいように設定してください。
よく使う関数は「fmove,saori/aya5.dll,FMOVE」みたいに引数付きで定義すれば(fmove,test.txt,..\)…とssu.dllと同じ感覚で使えるように。
注意事項
関数は大文字でも小文字でも大丈夫。
ここでは(aya,GETMEMINFO)と書いてますが、(aya,getmeminfo)と書いても良いです。
ファイル操作関連関数でのパスは特に指定していない限り相対パスと絶対パス(フルパス)どちらも使えます。
相対パスはaya5.dllが置いてある階層を基準とします。
(相対パス・絶対パスの意味がわからない人は検索して調べてください)
必ず戻値を返す関数で戻値をバルーンに表示させたくない場合は(nop,(aya,FDEL,test.txt))のようにnopでくくってください。
他のssu.dll以外のSAORIと同様、Mac(偽林檎)では使えません。
このSAORIが動作しないと成り立たないゴーストは「Macでは動かないゴースト」となります。
ファイル操作系関数使用時は良識の範囲内で。
ファイルを削除する
- かきかた
-
(aya,FDEL,削除するファイルのパス)
- 辞書例
-
*
:(aya,FDEL,test.txt)
- バルーンでの表示(成功した時。失敗すると0)
-
1
この例ではaya.dllと同じ階層においてある「test.txt」を削除。
ゴミ箱に入ったりしないで跡形も無く消えてしまうので使う時は要注意です。
ファイルをコピーする
- かきかた
-
(aya,FCOPY,コピー元ファイルパス,コピー先ディレクトリ)
- 辞書例
- *
:(aya,FCOPY,test.txt,..\)
- バルーンでの表示(成功した時。失敗すると0)
-
1
この例ではaya.dllと同じ階層においてある「test.txt」を
一つ上の階層にコピーします。
同じ階層にコピーしたいなら「別階層にコピー → リネーム → 元の階層に移動」で。
ファイルを移動する
- かきかた
-
(aya,FMOVE,移動元ファイルパス,移動先ディレクトリ)
- 辞書例
- *
:(aya,FMOVE,test.txt,..\)
- バルーンでの表示(成功した時。失敗すると0)
-
1
この例ではaya.dllと同じ階層においてある「test.txt」を
一つ上の階層に移動します。
ファイル名を変更する
- かきかた
-
(aya,FRENAME,元のファイルパス,変更するファイルパス)
- 辞書例
-
*
:(aya,FRENAME,dat\001.txt,dat\002.txt)
- バルーンでの表示(成功した時。失敗すると0)
-
1
違うパスを指定するとそこに移動。
ファイルの属性取得
(2006.10.4以降修正版で使用可)
- かきかた
-
(aya,FATTRIB,ファイルパス)
(S0)
(S1)
…
- 辞書例
-
*
(aya,FATTRIB,aya5.dll)
:\_q\b[2]aya5.dllの属性です。
アーカイブファイル、またはアーカイブディレクトリ。
(S0)
圧縮ファイル、または圧縮ディレクトリ。
(S1)
ディレクトリ。
(S2)
隠しファイルまたは隠しディレクトリ。
(S3)
属性なし。
(S4)
このファイルのデータは、今すぐは利用不能。
(S5)
読み取り専用ファイル。
(S6)
Windowsが使用するファイル。
(S7)
一時ファイル。
(S8)\_q
- バルーンでの表示(aya5.dllが存在する場合)
-
aya5.dllの属性です。
アーカイブファイル、またはアーカイブディレクトリ。
1
圧縮ファイル、または圧縮ディレクトリ。
0
ディレクトリ。
0
隠しファイルまたは隠しディレクトリ。
0
属性なし。
0
このファイルのデータは、今すぐは利用不能。
0
読み取り専用ファイル。
0
Windowsが使用するファイル。
0
一時ファイル。
0
それぞれ該当すれば「1」、該当しなければ「0」が返ります。
ファイルが存在しない場合(S0)に「-1」が帰り(S1)以降は何も返しません。
ファイルのバイト数取得
- かきかた
-
(aya,FSIZE,ファイルパス)
- 辞書例
-
*
:「test.txt」は(aya,FSIZE,test.txt)byteです。
- バルーンでの表示(一例)
-
「test.txt」は3202byteです。
失敗すると「-1」が返ります。
指定位置のファイル、ディレクトリ名列挙
- かきかた
-
(aya,FENUM,ディレクトリパス)
- 辞書例
-
*
:\_!(aya,FENUM,D:\ukagaka\ghost\test\ghost\master)\_!
- バルーンでの表示(一例)
-
descript.txt,\saori,satori.dll,\profile,replace.txt,satori_conf.txt,replace_after.txt,satori_savedata.txt,dic.txt
カンマで区切られたファイル名とディレクトリ名が返ります。
ディレクトリ名は先頭に"\"が付きます
ドロップされたフォルダに入ってるファイルを調べたい時とか。
他のゴーストにあのファイルが入ってるかどうか確かめる時とか。
ディレクトリ作成
- かきかた
-
(aya,MKDIR,ディレクトリパス)
- 辞書例
-
*
:(aya,MKDIR,test)
- バルーンでの表示(成功した時。失敗すると0)
-
1
この例ではaya5.dllのある階層の一つ下に「test」というディレクトリを作ってます。(もう既にある場合は失敗)
ディレクトリ削除
- かきかた
-
(aya,RMDIR,ディレクトリパス)
- 辞書例
-
*
:(aya,RMDIR,test)
- バルーンでの表示(成功した時。失敗すると0)
-
1
この例ではaya5.dllのある階層の一つ下にある「test」というディレクトリを削除してます。
中身が空の時しか削除できないので使うなら中に入ってるファイルを全て移動か削除してから。
テキストファイルを読み取る
- かきかた
-
・ファイルを読み取りモードで開く開く
(aya,FOPEN,読み取るファイルのパス,r)
・開いたファイルのテキストを一行だけ読み取る
もう一度実行すると次の行を読み取る(これを必要な回数だけ繰り返す)
(aya,FREAD,読み取るファイルのパス)
・ファイルを閉じる(一度開いたら必ず最後に実行)
(aya,FCLOSE,読み取るファイルのパス)
- 辞書例
-
*
$filepath【タブ】..\descript.txt
$loop【タブ】0
>FOPEN失敗【タブ】!(aya,FOPEN,(filepath),r)
>read
*read
$txt【タブ】(aya,FREAD,(filepath))
>end【タブ】!(変数「txt」の存在)||(loop)>50
:(txt)
$loop=(loop)+1
>read
*end
(aya,FCLOSE,(filepath))
*FOPEN失敗
:ファイルのオープンに失敗しました。
- バルーンでの表示(成功した場合の一例)
-
type,ghost
name,ゴースト名
sakura.name,メインキャラ名
kero.name,サブキャラ名
shiori,satori.dll
この例ではaya5.dllの一つ上の階層にあるdescript.txtの中身をバルーンに表示しています。(50行程度以上読み取らないよう制限を付けています。里々は100回位ループすると落ちるらしいのでループさせる時はループ回数に制限を付けた方が無難です)
FOPENの戻値は
0 失敗
1 成功
2 既にオープンしている。
テキストファイルに書き込む
(2006.10.4以降修正版で使用可)
- かきかた
-
・ファイルを書き込みモードで開く
(aya,FOPEN,読み取るファイルのパス,w)
・書き込みモードで開いているファイルに文字列を改行コード付きで書き込む
(aya,FWRITE,読み取るファイルのパス)
・書き込みモードで開いているファイルに文字列を書き込む
(aya,FWRITE2,読み取るファイルのパス)
・ファイルを閉じる(一度開いたら必ず最後に実行)
(aya,FCLOSE,読み取るファイルのパス)
- 辞書例
-
*
$filepath【タブ】test.txt
>FOPEN失敗【タブ】!(aya,FOPEN,(filepath),w)
(aya,FWRITE2,(filepath),書き込みテスト1)
(aya,FWRITE,(filepath),書き込みテスト2)
(aya,FCLOSE,(filepath))
:書き込みました。
*FOPEN失敗
:ファイルのオープンに失敗しました。
- 結果(成功した場合)
-
aya5.dllと同階層にあるtest.txtの中身がクリアされ
書き込みテスト1書き込みテスト2
と書き込まれる。
(aya,FOPEN,読み取るファイルのパス,w)を実行した時点でテキストファイルに書かれた文章が全て消えるので要注意。
元のファイルに書かれている文章を編集したい場合は
一度読み取りモードで読み込んで変数に保存し、それを編集したものを書き込みモードで書き込む…しかないと思います。
(どちらもsplitとループを使用)
テキストファイルに追記する
(2006.10.4以降修正版で使用可)
- かきかた
-
・ファイルを追加モードで開く
(aya,FOPEN,書き込むファイルのパス,a)
・追加モードで開いているファイルに文字列を改行コード付きで追加
(aya,FWRITE,読み取るファイルのパス)
・追加モードで開いているファイルに文字列を追加
(aya,FWRITE2,読み取るファイルのパス)
・ファイルを閉じる(一度開いたら必ず最後に実行)
(aya,FCLOSE,書き込むファイルのパス)
- 辞書例
-
*
$filepath【タブ】test.txt
>FOPEN失敗【タブ】!(aya,FOPEN,(filepath),a)
(aya,FWRITE2,(filepath),書き込みテスト1)
(aya,FWRITE,(filepath),書き込みテスト2)
(aya,FCLOSE,(filepath))
:追記しました。
*FOPEN失敗
:ファイルのオープンに失敗しました。
- 結果(成功した場合)
-
aya5.dllと同階層にあるtest.txtに書かれた文章の一番下に
書き込みテスト1書き込みテスト2
が追加される。
ファイルパスを分割
- かきかた
-
(aya,SPLITPATH,ファイルの絶対パス)
- 辞書例
-
*
(nop,(aya,SPLITPATH,D:\ukagaka\ghost\test\ghost\master\test.txt))
:ドライブ名 (S0)
パス \_!(S1)\_!
主ファイル名 (S2)
拡張子 (S3)
- バルーンでの表示
-
ドライブ名 D:
パス \ukagaka\ghost\test\ghost\master\
主ファイル名 test
拡張子 .txt
一応ssuのsplitでもやれるにはやれるけどこっちの方が楽。
文字列のバイト数取得
- かきかた
-
(aya,GETSTRBYTES,文字列)
- 辞書例
- *
:(aya,GETSTRBYTES,てすと)
- バルーンでの表示
-
6
半角は一文字1バイト。全角は一文字2バイト。
文字がバルーンにおさまるように文字数ではなく文字の長さを調べたい時とか。
メモリ情報取得
(2006.10.4以降修正版で使用可)
- 辞書例
- *
(aya,GETMEMINFO)
:物理メモリの使用率 (S0)%
物理メモリ量 (S1) byte
空き物理メモリ量 (S2) byte
仮想+物理メモリ量 (S3) byte
仮想+物理空きメモリ量 (S4) byte
- バルーンでの表示(一例)
-
物理メモリの使用率 100%
物理メモリ量 654909944 byte
空き物理メモリ量 499712 byte
仮想+物理メモリ量 2143289344 byte
仮想+物理空きメモリ量 2098266112 byte
AYA情報取得
(2006.10.4以降修正版で使用可)
- 辞書例
- *
:\_qAYA情報
□ バージョン番号 (aya,GETSETTING,0)
□ 文字コード (switch,(aya,GETSETTING,1),
0,Shift_JIS,
1,UTF-8,
127,OSのデフォルトの文字コード
)
□ 文がカレントとして認識するディレクトリ絶対パス
\_!(aya,GETSETTING,2)\_!
\_q
- バルーンでの表示(一例)
-
AYA情報
□ バージョン番号 5.8.0.240
□ 文字コード Shift_JIS
□ 文がカレントとして認識するディレクトリ絶対パス
D:\ukagaka\ghost\test\ghost\master\saori\
『文がカレントとして認識するディレクトリ絶対パス』はaya5.dllがある階層のパスのこと。
これを元にゴーストの絶対パスも取得できる。
文字列を挿入
(2006.10.4以降修正版で使用可)
- かきかた
-
(aya,INSERT,対象文字列,挿入する文字位置,挿入する文字列)
- 辞書例
- *
:(aya,INSERT,☆☆☆☆,2,★)
- バルーンでの表示
-
☆☆★☆☆
文字列左右端の空白を削除
- かきかた
-
(aya,CUTSPACE,文字列)
- 辞書例
-
*
:『(aya,CUTSPACE, て す と )』
- バルーンでの表示
-
『て す と』
文字列左右端に空白文字やタブ文字がある場合除去する。
英小文字・大文字変換
- かきかた
-
・文字列中の英小文字を全て大文字にする
(aya,TOUPPER,文字列)
・文字列中の英大文字を全て小文字にする
(aya,TOLOWER,文字列)
- 辞書例
- *
:(aya,TOUPPER,AbCdEf)
(aya,TOLOWER,AbCdEf)
- バルーンでの表示
-
ABCDEF
abcdef
半角文字にしか効果はないです。
整数/実数かどうか調べる
- かきかた
-
整数として解釈可能なら1。そうでなければ0。
(aya,ISINTSTR,数字)
実数として解釈可能なら1。そうでなければ0。
(aya,ISREALSTR,数字)
- 辞書例
- *
:整数?
1 → (aya,ISINTSTR,1)
1.5 → (aya,ISINTSTR,1.5)
test → (aya,ISINTSTR,test)
実数?
1 → (aya,ISREALSTR,1)
1.5 → (aya,ISREALSTR,1.5)
test → (aya,ISREALSTR,test)
- バルーンでの表示
-
整数?
1 → 1
1.5 → 0
test → 0
実数?
1 → 1
1.5 → 1
test → 0
実数の小数点以下桁を四捨五入
(2006.10.4以降修正版で使用可)
- かきかた
-
(aya,ROUND,実数)
- 辞書例
- *
:1.3 → (aya,ROUND,1.3)
1.4 → (aya,ROUND,1.4)
1.5 → (aya,ROUND,1.5)
1.6 → (aya,ROUND,1.6)
- バルーンでの表示
-
1.3 → 1.0
1.4 → 1.0
1.5 → 2.0
1.6 → 2.0
実数の小数点以下を切り上げる
(2006.10.4以降修正版で使用可)
- かきかた
-
(aya,CEIL,実数)
- 辞書例
- *
:0.8 → (aya,CEIL,0.8)
0.9 → (aya,CEIL,0.9)
1.0 → (aya,CEIL,1.0)
1.1 → (aya,CEIL,1.1)
1.2 → (aya,CEIL,1.2)
- バルーンでの表示
-
0.8 → 1.0
0.9 → 1.0
1.0 → 1.0
1.1 → 2.0
1.2 → 2.0
配列
配列をつくるときは
$変数名【タブ】要素1,要素2,要素3
こんなかんじで。
学習した単語群とか、持ってるアイテムリストとか、曲リストとか、そういったものに使われると思います。
区切り字は「,」でなくてもよいですがその場合SAORIの方の区切り字も同じ字に揃えてください。
(SAORIの区切り字は好きなものを追加できます(里々Wiki参照))
配列にどんな文字が入るかわからない時はなるべく被りにくい字が良いかと。一番被りにくいのはバイト文字ですね。
要素数を数える
- かきかた
-
(aya,ARRAYSIZE,配列)
- 辞書例
-
*
$配列【タブ】あか,あお,きいろ
:「配列」に何個入ってる?→(aya,ARRAYSIZE,(配列))
- バルーンでの表示
-
「配列」に何個入ってる?→3
ssuの(split、(配列)、,)と同じ。
要素をランダムに一つ選ぶ
- かきかた
-
(aya,ANY,配列)
- 辞書例
-
*
$配列【タブ】あか,あお,きいろ
:(aya,ANY,(配列))
- バルーンでの表示(一例)
-
あお
ssuの(choice,(配列))と同じ。
値をひとつ検索する
- かきかた
-
(aya,ASEARCH,検索したい値,配列)
- 辞書例
-
*
$配列【タブ】あか,あお,きいろ,あお,みどり
:「配列」に1番目の「あお」のあるところ→(aya,ASEARCH,あお,(配列))
- バルーンでの表示
-
「配列」に1番目の「あお」のあるところ→1
最初に見つかった要素の序数が返ります。
0から数えているのに注意。
上の例だと「あか」は「0」、「あお」は「1」、「きいろ」は「2」です。
値を全て検索する
- かきかた
-
(aya,ASEARCHEX,検索したい値,配列)
- 辞書例
-
*
$配列【タブ】あか,あお,きいろ,あお,みどり
:「配列」に「あお」はいくつ?→(aya,ASEARCHEX,あお,(配列))
1番目の「あお」のある位置→(S0)
2番目の「あお」のある位置→(S1)
3番目の「あお」のある位置→(S2)
- バルーンでの表示
-
「配列」に「あお」はいくつ?→2
1番目の「あお」のある位置→1
2番目の「あお」のある位置→3
3番目の「あお」のある位置→(S2)
(S0)、(S1)...に見付かった順番に要素の序数が返ります。
0から数えているのに注意。
正規表現
正規表現を使うと普通の検索ではできないような、特殊な検索ができるようにります。
例えばテキストからHTMLタグやURLを抽出したりできます。
記述の仕方を知りたい人はGoogle等で調べてみてください。
こういったページも参考にできると思います。
正規表現サンプル集
正規表現とマッチする箇所があるか調べる
あれば1、なければ0。
- かきかた
-
(aya,RE_SEARCH,対象文字列,正規表現)
- 辞書例
-
*
:
- バルーンでの表示
-
正規表現で文字列を検索
見つかった数を返す。
- かきかた
-
(aya,RE_GREP,対象文字列,正規表現)
- 辞書例
-
*
- バルーンでの表示
-
正規表現と完全にマッチするか調べる
マッチすれば1、しなければ0。
- かきかた
-
(aya,RE_MATCH,対象文字列,正規表現)
- 辞書例
-
*
:
- バルーンでの表示
-
正規表現で文字列を置き換え
- かきかた
-
(aya,RE_REPLACE,対象文字列,正規表現,置換後文字列)
- 辞書例
-
*
:
- バルーンでの表示
-
正規表現で文字列を分割
- かきかた
-
(aya,RE_SPLIT,対象文字列,正規表現)
- 辞書例
-
*
:
- バルーンでの表示
-
使えない、使う意味のない関数
- CVINT
- CVREAL
- CVSTR
- GETDELIM
- IARRAY
- LSO
- TOINT
- TOREAL
- TOSTR
- RE_GETSTR 列挙された数しか返らない(列挙された部分文字列はRE_GREP等実行時にValue*で返るのでそれで代用する)
- RE_GETPOS 列挙された数しか返らない(使いたい人は追加モジュールを作るのを推奨)
- RE_GETLEN 列挙された数しか返らない(使いたい人は追加モジュールを作るのを推奨)
他
YAYA as SAORIはこれより更に使用できる関数が追加されています。
AYAでスクリプトのほうも書きたい人は追加モジュールを作りましょう。(AYA as SAORI同梱readme参照)