辞書操作¶
辞書操作コマンド共通事項¶
辞書操作コマンドのうち、単語・文字列セット/追加/挿入コマンド、get、getcode、clearコマンドは、共通してエントリを配列として扱う機能がある。これらのコマンドでは、エントリ名を書く場所で、次のように書くことが出来る。
- 「エントリ1」と書いた場合、エントリ1全体を指す。
- 「エントリ1[0]」と書いた場合、エントリ1の1番目の単語を指す。
- 「エントリ1[0..3]」と書いた場合、エントリ1の1番目から4番目の単語を指す。
- 「エントリ1[-1]」と書いた場合、エントリ1の末尾の単語を指す。
- 「エントリ1[-2..-4」と書いた場合、エントリ1の末尾から2番目から、末尾から4番目の単語を指す。
[ ]内はエントリ配列呼び出し同様、0オリジンであることに注意。また、[ ]内で存在しない添え字を指定した場合、無視する。なお、上記機能はエントリ配列呼び出しと見た目・機能が似ているが、まったく無関係の機能であることに注意。
使用例¶
word : "one" , "two" , "three" , "four" , "five" , "six" , "seven"
=kis
setstr word[4] "5th element";
# wordエントリ5番目の単語を「5th element」で置き換える
setstr word2[0..5] "初期値";
# word2エントリに6個の「初期値」という文字列をセットする
clear word[1];
# wordエントリの2番目の単語(two)を削除
get word;
# 「onethreefour5th elementsixseven」を返す
get word[100];
# wordエントリには6個しか単語がないので、何も返さない
=end
set¶
書式¶
$(set エントリ1 単語1)
戻り値¶
なし
解説¶
エントリ1の内容を削除してから、単語1を登録する。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
dummy : 1
angry : 怒ってるゾ!
=kis
set mode 1;
# modeエントリの内容は「1」だけになる
set mody ${dummy};
# modeエントリの内容は${dummy}=「1」になる
set emotion "${angry}";
# emotionエントリの内容は単語「${angry}」になる
echo ${emotion};
# 「怒ってるゾ!」を返す
=end
setstr¶
書式¶
$(setstr エントリ1 文字列1)
戻り値¶
なし
解説¶
エントリ1の内容を削除してから、文字列1を登録する。setとの違いは、追加したものが必ず置換ブロックではなく、文字列になる点である。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
dummy : 1
angry : 怒ってるゾ!
=kis
setstr mode 1;
# modeエントリの内容は「1」だけになる
setstr mody ${dummy};
# modeエントリの内容は${dummy}=「1」になる
setstr emotion "${angry}";
# emotionエントリの内容は文字列「${angry}」になる
echo ${emotion};
# 「${angry}」を返す
=end
adddict¶
書式¶
$(adddict エントリ1 単語1)
戻り値¶
なし
解説¶
エントリ1に単語1を追加する。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
=kis
# npwエントリに「田中真紀子」を追加
adddict npw 田中真紀子;
# nameエントリにnpwエントリ中の単語を追加
adddict name ${npw}
# Actエントリに単語「${normal}」を追加
adddict Act "${normal}";
# 次の行を実行すると、normalエントリの中を単語を呼び出す
echo ${Act};
=end
adddictstr¶
書式¶
$(adddictstr エントリ1 文字列1)
戻り値¶
なし
解説¶
エントリ1に文字列1を追加する。adddictとの違いは、追加したものが必ず置換ブロックではなく、文字列になる点である。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
=kis
# npwエントリに「田中真紀子」を追加
adddictstr npw 田中真紀子;
# nameエントリにnpwエントリ中の単語を追加
adddictstr name ${npw}
# Actエントリに文字列「${normal}」を追加
adddictstr Act "${normal}";
# 次の行を実行すると、「${normal}」を返す。
echo ${Act};
=end
push¶
書式¶
$(push エントリ1 単語1)
戻り値¶
なし
解説¶
エントリ1の末尾に単語1を追加する。adddictと同義。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
=kis
# npwエントリに「田中真紀子」を追加
push npw 田中真紀子;
# nameエントリにnpwエントリ中の単語を追加
push name ${npw}
# Actエントリに単語「${normal}」を追加
push Act "${normal}";
# 次の行を実行すると、normalエントリの中を単語を呼び出す
echo ${Act};
=end
pushstr¶
書式¶
$(pushstr エントリ1 文字列1)
戻り値¶
なし
解説¶
エントリ1の末尾に文字列1を追加する。adddictstrと同義。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
=kis
# npwエントリに「田中真紀子」を追加
pushstr npw 田中真紀子;
# nameエントリにnpwエントリ中の単語を追加
pushstr name ${npw}
# Actエントリに文字列「${normal}」を追加
pushstr Act "${normal}";
# 次の行を実行すると、「${normal}」を返す。
echo ${Act};
=end
unshift¶
書式¶
$(unshift エントリ1 単語1)
戻り値¶
なし
解説¶
エントリ1の先頭に単語1を挿入する。
使用例¶
ghosts : まゆら,理夢,毒子,白子,美耳,陽子
任意 : さくら
=kis
get ghosts;
# 「まゆら理夢毒子白子美耳陽子」を返す
unshift ghosts "${任意}";
get ghosts;
# 「さくらまゆら理夢毒子白子美耳陽子」を返す
=end
unshiftstr¶
書式¶
$(unshiftstr エントリ1 文字列1)
戻り値¶
なし
解説¶
エントリ1の先頭に文字列1を挿入する。unshiftとの違いは、追加したものが必ず置換ブロックではなく、文字列になる点である。
使用例¶
ghosts : まゆら,理夢,毒子,白子,美耳,陽子
任意 : さくら
=kis
get ghosts;
# 「まゆら理夢毒子白子美耳陽子」を返す
unshift ghosts "${任意}";
get ghosts;
# 「${任意}まゆら理夢毒子白子美耳陽子」を返す
=end
insert¶
書式¶
$(insert エントリ1[インデックス1] 単語1)
戻り値¶
なし
解説¶
エントリ1の「インデックス1+1」番目の単語の直前に、単語1を挿入する。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
word : 1 , 2 , 3 , 4 , 5 , 6 , 7
key : AAA
=kis
get word;
# 「1234567」が返る
insert word[3] "${key}";
get word;
# 「123AAA4567」が返る
=end
insertstr¶
書式¶
$(insertstr エントリ1[インデックス1] 文字列1)
戻り値¶
なし
解説¶
エントリ1の「インデックス1+1」番目の単語の直前に、文字列1を挿入する。insertとの違いは、追加したものが必ず置換ブロックではなく、文字列になる点である。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
word : 1 , 2 , 3 , 4 , 5 , 6 , 7
key : AAA
=kis
get word;
# 「1234567」が返る
insertstr word[3] "${key}";
get word;
# 「123${key}4567」が返る
=end
get¶
書式¶
$(get エントリ1)
戻り値¶
エントリ1の指定範囲の単語を全て評価した結果
解説¶
エントリ1の指定範囲の単語を、添え字昇順で全て評価し、結果を結合して返す。指定範囲を省略した場合、エントリ1の全単語が対象となる。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
word1 : あ , い , う , え , お
word2 : $(date %y) , $(date %M) , $(date %d)
=kis
get word1;
# 「あいうえお」を返す
get word2;
# 「20020425」の形式で今日の日付を返す
=end
getcode¶
書式¶
$(getcode エントリ1)
戻り値¶
エントリ1の指定範囲の単語を全て評価前の形式で結合した結果
解説¶
エントリ1の指定範囲の単語を、添え字昇順で全て評価せずに参照し、結果を結合して返す。指定範囲を省略した場合、エントリ1の全単語が対象となる。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
word1 : あ , い , う , え , お
word2 : $(date %y) , $(date %M) , $(date %d)
=kis
get word1;
# 「"あ""い""う""え""お"」を返す
get word2;
# 「$(date %y)$(date %M)$(date %d)」を返す
=end
getrandom¶
書式¶
$(getrandom エントリ1 単語1)
戻り値¶
エントリ1の単語のいずれか、または単語1
解説¶
エントリ1の単語をランダムに1つ選択し、評価結果を返す。エントリ1に単語が無かった場合、単語1を返す。機能はentryとまったく同じである。
使用例¶
=kis
getrandom "npw";
# ${npw}と同じ
getrandom "message."$(rand 3);
# ${message.0}から${message.2}のどれかと同じ
getrandom "System.OtherGhost" ${myname};
# ${System.OtherGhost}と同じ
# 結果が空の場合は、${myname}の戻り値が返る
=end
pop¶
書式¶
$(pop エントリ1)
戻り値¶
エントリ1の末尾の単語
解説¶
エントリ1の末尾にある単語を削除し、それを返す。エントリ1に単語が無ければ、空文字列を返す。
使用例¶
PASOPIA : パソピア7
oldmachine : PC9801,X68k,MSX2,PC8801,X1,PC8001,${PASOPIA}
=kis
foreach @pc oldmachine $(echo " "${@pc});
# 「 PC9801 X68k MSX2 PC8801 X1 PC8001 パソピア7」を返す
pop oldmachine;
# 「パソピア7」を返す
foreach @pc oldmachine $(echo " "${@pc});
# 「 PC9801 X68k MSX2 PC8801 X1 PC8001」を返す
=end
popcode¶
書式¶
$(popcode エントリ1)
戻り値¶
エントリ1の末尾の単語の評価前の形式
解説¶
エントリ1の末尾にある単語を削除し、評価前の形式で返す。エントリ1に単語が無ければ、空文字列を返す。
使用例¶
PASOPIA : パソピア7
oldmachine : PC9801,X68k,MSX2,PC8801,X1,PC8001,${PASOPIA}
=kis
foreach @pc oldmachine $(echo " "${@pc});
# 「 PC9801 X68k MSX2 PC8801 X1 PC8001 パソピア7」を返す
popcode oldmachine;
# 「${PASOPIA}」を返す
foreach @pc oldmachine $(echo " "${@pc});
# 「 PC9801 X68k MSX2 PC8801 X1 PC8001」を返す
=end
shift¶
書式¶
$(shift エントリ1)
戻り値¶
エントリ1の先頭にある単語
解説¶
エントリ1の先頭にある単語を一つ削除し、それを返す。エントリ1に単語が無ければ、空文字列を返す。
使用例¶
counter : 1, 2, 3, 4, 5
sentence : \hこの文が呼ばれるのは$(shift counter)回目だね。\e
shiftcode¶
書式¶
$(shiftcode エントリ1)
戻り値¶
エントリ1の先頭にある単語の評価前の形式
解説¶
エントリ1の先頭にある単語を一つ削除し、評価前の形式で返す。エントリ1に単語が無ければ、空文字列を返す。
使用例¶
counter : 1, 2, 3, 4, 5
sentence : \hこの文が呼ばれるのは$(shiftcode counter)回目だね。\e
clear¶
書式¶
$(clear エントリ1)
戻り値¶
なし
解説¶
エントリ1から単語を削除する。
エントリ名の指定には、辞書操作コマンド共通の書式を利用できる。
使用例¶
test1 : word1, word2, word3
=kis
foreach @word test1 $(echo ${@word})
# 「word1word2word3」を返す
clear test1;
# test1エントリの内容を全て消去
foreach @word test1 $(echo ${@word})
# 何も返さない
=end
cleartree¶
書式¶
$(cleartree エントリ1)
戻り値¶
なし
解説¶
「エントリ1.」で名前が始まるエントリの内容を全て削除する。例えば「エントリ1.a」、「エントリ1.b」というエントリがあったとすると、これらの内容が削除される。
使用例¶
ghost1.name : まゆら
ghost1.shiori : 華和梨
ghost1.shiori.phase : 7.3.1
ghost1.author : 夢蛍
ghost1.shell : サンタ,着せ替え,白,夏服
=kis
cleartree ghost1;
=end
# 上記エントリの内容は全て削除される
size¶
書式¶
$(size エントリ1)
戻り値¶
単語数
解説¶
エントリ1中の単語数を返す。
使用例¶
理夢 : 理夢
ninni.angels,famous.ghosts : 奈留, せりこ, まゆら, ${理夢}
dark.sisters,famous.ghosts : 毒子, 花ちゃん, サンバーレイン, ${理夢}
=kis
size dark.sisters;
# 4が返る
size famous.ghosts;
# 8が返る
=end
find¶
書式¶
$(find エントリ1 単語1)
$(find エントリ1 単語1 インデックス)
戻り値¶
単語1の位置。見つからなかった場合"-1"。
解説¶
エントリ1内で、単語1が現れる最初の位置を返す。インデックスが指定された場合、そのインデックス以降で、最後に現れる位置を返す。インデックスは整数でなければならない。
使用例¶
地名: ここ, ${人名}の家, 三丁目, ここ, ${人名}の仕事場
候補: ${人名}の家
=kis
find 地名 ここ;
# "0"が返る。
find 地名 ここ 1;
# "3"が返る。
find 地名 "${人名}"の家;
# "1"が返る。
find 地名 $(getcode 候補[0]);
# "1"が返る。
=end
rfind¶
書式¶
$(rfind エントリ1 単語1)
$(rfind エントリ1 単語1 インデックス)
戻り値¶
単語1の位置。見つからなかった場合"-1"。
解説¶
エントリ1内で、単語1が現れる最後の位置を返す。インデックスが指定された場合、そのインデックス以前で、最後に現れる位置を返す。インデックスは整数でなければならない。
使用例¶
地名: ここ, ${人名}の家, 三丁目, ここ, ${人名}の仕事場
候補: ${人名}の家
=kis
rfind 地名 ここ;
# "3"が返る。
rind 地名 ここ 2;
# "0"が返る。
rfind 地名 "${人名}"の家;
# "1"が返る。
rfind 地名 $(getcode 候補[0]);
# "1"が返る。
=end
copy¶
書式¶
$(copy エントリ1 エントリ2)
戻り値¶
なし
解説¶
エントリ1の内容を、すべてエントリ2にコピーする。エントリ2の以前の内容はそのまま残り、エントリ1の内容をエントリ2に追加する。
使用例¶
ghost1 : さくら , まゆら , 奈留 , 理夢 , ${ghost2}
ghost2 : サンバーレイン , 毒子 , 花ちゃん
=kis
copy ghost1 ghost3;
getcode ghost3;
# 「"さくら""まゆら""奈留""理夢"${ghost2}」が返る
size ghost1;
# 5が返る
=end
copytree¶
書式¶
$(copytree エントリ1 エントリ2)
戻り値¶
なし
解説¶
「エントリ1.」で名前が始まるエントリの構造を、エントリ2にコピーする。例えば「エントリ1.a」、「エントリ1.b」というエントリがあったとすると、それぞれの内容を「エントリ2.a」、「エントリ2.b」エントリにコピーする。
使用例¶
ghost1.name : まゆら
ghost1.shiori : 華和梨
ghost1.shiori.phase : 7.3.1
ghost1.author : 夢蛍
ghost1.shell : サンタ,着せ替え,白,夏服
=kis
copytree ghost1 ghost2;
=end
# 「ghost2.」で始まるエントリの内容が、次のようになる
# ghost2.name : まゆら
# ghost2.shiori : 華和梨
# ghost2.shiori.phase : 7.3.1
# ghost2.author : 夢蛍
# ghost2.shell : サンタ,着せ替え,白,夏服
move¶
書式¶
$(move エントリ1 エントリ2)
戻り値¶
なし
解説¶
エントリ1の内容を、すべてエントリ2に移す。実行後、エントリ1の内容は削除される。エントリ2の以前の内容はそのまま残り、エントリ1の内容をエントリ2に追加する。
使用例¶
ghost1 : さくら , まゆら , 奈留 , 理夢 , ${ghost2}
ghost2 : サンバーレイン , 毒子 , 花ちゃん
=kis
move ghost1 ghost3;
getcode ghost3;
# 「"さくら""まゆら""奈留""理夢"${ghost2}」が返る
size ghost1;
# 0が返る
=end
movetree¶
書式¶
$(movetree エントリ1 エントリ2)
戻り値¶
なし
解説¶
「エントリ1.」で名前が始まるエントリの構造を、エントリ2に移す。例えば「エントリ1.a」、「エントリ1.b」というエントリがあったとすると、それぞれの内容を「エントリ2.a」、「エントリ2.b」エントリにコピーする。その後エントリ1.a、エントリ1.b等を削除する。
使用例¶
ghost1.name : まゆら
ghost1.shiori : 華和梨
ghost1.shiori.phase : 7.3.1
ghost1.author : 夢蛍
ghost1.shell : サンタ,着せ替え,白,夏服
=kis
movetree ghost1 ghost2;
=end
# 「ghost2.」で始まるエントリの内容が、次のようになる
# ghost2.name : まゆら
# ghost2.shiori : 華和梨
# ghost2.shiori.phase : 7.3.1
# ghost2.author : 夢蛍
# ghost2.shell : サンタ,着せ替え,白,夏服
listsub¶
書式¶
$(listsub エントリ1 エントリ2)
戻り値¶
なし
解説¶
「エントリ2.」で名前が始まり、それ以上「.」が含まれないエントリ名の一覧を、エントリ1に追加する。エントリ2に「.」を指定すると、最上位(「.」を全く含まない)エントリ名の一覧が得られる。
使用例¶
ghost1.name : まゆら
ghost1.shiori : 華和梨
ghost1.shiori.phase : 7.3.1
ghost1.author : 夢蛍
ghost1.shell : サンタ,着せ替え,白,夏服
=kis
listsub 一覧 ghost1;
getcode 一覧;
# "ghost1.name""ghost1.shiori""ghost1.author""ghsot1.shell"が返る。
listtree¶
書式¶
$(listtree エントリ1 エントリ2)
戻り値¶
なし
解説¶
「エントリ2.」で名前が始まるエントリ名一覧を、エントリ1に追加する。エントリ2に「.」を指定すると、全エントリ名一覧を取得できる。
使用例¶
=kis
listtree SHIORI System.Request;
# SHIORIエントリに、本体からのリクエストヘッダ一覧を追加する
listree Entries .;
# 全エントリ名をEntriesエントリに追加。主に今は亡き対GET Status用
writeprotect¶
書式¶
$(writeprotect エントリ1)
戻り値¶
なし
解説¶
エントリ1を(起動中)書き込み不可にする。従来resource.homeurlなどはシステム側でプロテクトしていたが、Phase 8では重要情報がどこに書かれるか分からないため、ユーザやミドルウェアが自分でプロテクトをかけられるようにした。プロテクトを外すコマンドは存在しない。プロテクトされたエントリに書き込もうとした場合、Errorレベルのログが出力される。
使用例¶
username : ご主人様
=kis
writeprotect username;
=end