コンテンツにスキップ

辞書操作

辞書操作コマンド共通事項

辞書操作コマンドのうち、単語・文字列セット/追加/挿入コマンド、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