ティラノスクリプトで文字列の内容を調べる
ティラノで文字列の内容を調べる方法です。
星取表を作っていました。
相撲で勝敗を記録するあれです。文字列変数に勝負の終了ごとに○や●を加えていって、
f.hoshi=f.hoshi+'○'
f.hoshi=f.hoshi+'●'
という感じで試合を繰り返すと、f.hoshiの内容が'○●●○○○'となっていきます。
文字列変数ですから、星取表を表示するにはそのまま変数の内容を表示すればいいのですが、じゃあ何番目の取り組みが○なのか●なのか、みたいに、勝敗の内容を取り出すときには工夫がいります。
変数を別に用意する方法
試合ごとに数字の変数を用意して、勝ったら1、負けたら0、を変数に代入していく方法もあります。(for文でいじりやすいように配列変数を使う)
f.shiai[1]=1
;1試合目勝
f.shiai[2]=0
;2試合目負け
f.shiai[3]=0
;3試合目負け
これだと何試合目が勝ったか負けたかダイレクトに調べることができるのでわかりやすいですが、変数が増えてしまうのが面倒かもしれません。
文字列変数の内容を調べる方法
こちらが本題です。f.hoshiに入っている'○●●○○○'という文字列を直接調べます。
tyrano.wiki.fc2.comwikiから引用させていただきました。
[eval exp="f.itemname='うすよごれたコップ'"]
[if exp="f.itemname.indexOf('コップ')!=-1"]
コップなら持ってる。
[endif]
このように、調べたい変数の後ろに .indexOf('調べたい文字列')をつけると、
調べたい変数の「何文字目」に「調べたい文字列」があるかわかるのです。
上記に引用したサンプルでは、-1文字目以外に 'コップ' があれば、「コップなら持ってる。」のメッセージ表示となります。( !=-1で評価しているので、-1以外なら、となります)
つまり、うすよごれたコップでも、きれいなコップでも、「コップ」という文字列の含まれるアイテムを所有していれば「コップなら持ってる。」になります。
[eval exp="f.itemname='うすよごれたコップ'"]
[if exp="f.itemname.indexOf('コップ')==6"]
6文字目に「コップ」がある。(文字列の先頭は0なので0から数えて6文字目)
[endif]
ちょっと改造しました。調べたい変数のN文字目に「調べたい文字列」があるかどうか。の判定です。==6のところを7とか5にすると、何も起きません。6のときだけ、「6文字目に「コップ」がある。(文字列の先頭は0なので0から数えて6文字目)」という表示になります。
[eval exp="f.itemname='うすよごれたコップ'"]
[eval exp="f.n=f.itemname.indexOf('コップ')"]
文字列の先頭から[l]
[emb exp="f.n"][l]
文字目にコップがある。(文字列の先頭は0なので0から数えて)
また別な改造です。調べたい変数の「何文字目」に「調べたい文字列」があるか、を調べます。結果は、「文字列の先頭から6文字目にコップがある。(文字列の先頭は0なので0から数えて)」となります。
f.itemname='うすよごれたコップ'を、f.itemname='すごくうすよごれたコップ'にすると、「文字列の先頭から9文字目にコップがある。(文字列の先頭は0なので0から数えて)」となるかと思います。
以上の方法を使うと、「f.hoshiに入っている'○●●○○○'という文字列」の何番目が○で何番目が●なのか、を調べることができます。
こういった文字列に対する操作は、吉里吉里のサイトも参考にさせていただきました。