◆ メモ欄の取得方法
2009-07-08
VXの目玉機能の1つとして、メモ欄があると思います。このメモ欄、ただのメモとして使うだけでなく
スクリプトでその内容を読み込んで、いろいろな処理に役立てる事が出来ます。
さて、これらのメモ欄の内容は、どのように取得するのでしょう?
[関連] http://cacaosoft.web.fc2.com/tkool/lecture/rgss2/010.html
ヘルプで「メモ」と検索すれば出るんじゃないかな?
その中から、RPG::○○というのを探しましょう。
そこにデータベースの値を受け取る変数が書かれています。
データベースの値は、ここ見ればどこに入ってるかすぐ分かるんで、ここで調べてください。
3つくらいあったと思います。
とりあえず、ポーションで説明したいと思います。
$data_items[1].note
こんな感じで参照できます。これにキーワードが含まれているかで分岐すればいいのですが、
include? とか使う人がたまにいます。
競合しちゃうのでやめましょう。
include?って言うのは、その文字が含まれているかを調べるものなんで、
例えば、"AB"と"ABCD"というキーワードがメモ欄に書き込まれているとすると、
$data_items[1].note.include?("AB")
とすると、どちらにもマッチしてしまいます。ですので、メモ欄を調べたいときには、正規表現を使用します。
/AB/ =~ $data_items[1].note
これが先ほどと同じものを正規表現で記述しました。とりあえず、正規表現については
http://cacaosoft.web.fc2.com/tkool/lecture/rgss2/008.html
を見てください。
※ 説明が載っているわけではないので、青文字で書かれた部分をヘルプで探しいて見て下さい。
んで、これでは不十分なので、"先頭"という条件を付け加えます。
/^AB/ =~ $data_items[1].note
これで、"AB~"という文字だけにマッチするようになりました。"aAB"や" AB"があっても無視するわけですね。
これだけで、ずいぶん違いますが、文字の前に記号を入れたり
記号で囲んだりすれば、なお結構です。
レクトールでいう"*"ですね。
/^\*AB/ =~ $data_items[1].note
これで、同じ単語でも安心。*は、正規表現において特別な意味を持つので、
その文字が単なる文字である事をあらわすために*の直前に\を記述します。
バックスラッシュ記法といいます。詳しいことは調べてください。
お次は、数値を取得したいと思います。
"*ABC[12]"とメモ欄に記入されていた場合に、12 という数値を取得します。
/^\*ABC\[(\d+)\]/ =~ $data_items[1].note
p $1.to_i
じゃあ、青文字の説明を。p $1.to_i
\[\]というのは、[]の部分ですね。
[]という文字も、正規表現内では特殊な意味を持ちますので、
バックスラッシュ記法を用いて次の文字は、単なる文字であることを教えてあげます。
\dで、数値を表します。ただし、1文字です。0~9も数値ですね。
+が、直前も文字が1回以上繰り返させるという意味です。
つまり、数値が1回以上繰り返されている文字です。
1とか12とか123とか。この文字が[]で囲まれているとなります。
ですので、[1]や[2345]はOKですが、[a1]や[1e3]などはダメです。
()っていうのが、なんだろう?その部分を別に保持しておくみたいな感じでいいんじゃないかな?
とりあえずは。。。
$1というのが、この別に保持している文字が格納されている変数。
この値は、文字列なので to_i メソッドを使用して数値に変換してあげます。
まぁ、こんな感じ。
もっと詳しく知りたい場合は、正規表現のところを熟読するといいと思うよ。