fc2ブログ

replaceを変数値で使い分ける

4/19拍手より

>replaceという単語の置き換えが出来るのがありますが…
>この置き換えを特定条件でのみ発生させる…というものを作りたいのです。
>例えば…変数で3が入っているとき限定で置き換わる、と言った感じのを。
>これは可能なのでしょうか?

replaceにはreplace.txtとssu.dllの中の関数(saori)の二つの意味が
ありますが、単語を機械的に置き換えてしまうreplace.txtの方は、
残念ながら条件での置き換えはできません。

関数のreplaceの方で、テンポラリという変数に3が入っているときだけ、
「あたりですよ」という文章中の
「あたり」という文章を「はずれ」にするという例を示します。
(以下、【タブ】はTabキーを押すことに注意して下さい)

#-------------------------------------------ここから
*OnKeyPress
>(R0)が押された



*aが押された
$喋る文章=あたりですよ
$テンポラリ=3
>真だったら【タブ】(テンポラリ)==3
:テンポラリは3以外でした。
(喋る文章)


*真だったら
:テンポラリは3でした。
(replace,(喋る文章),あたり,はずれ)

#--------------------------------------------ここまで
をどこかに付け加えて下さい。

それからsatori_conf.txtに

@SAORI
nswitch,saori/ssu.dll,nswitch
replace,saori/ssu.dll,replace

と、replaceを関数(SAORI)として使うということを宣言して下さい。


ここまで準備したら、「a」キーを押してみて下さい。

テンポラリは3でした。
はずれですよ

と喋ると思います。

順に見ていきます。

*OnKeyPress
>(R0)が押された

は今回の本筋には関係ないです。単にテスト用につけたもので、
キーが押された時に発生するイベントです。
押されたキーは(R0)に格納されています。

*aが押された
$喋る文章=あたりですよ
$テンポラリ=3
>真だったら【タブ】(テンポラリ)==3
:テンポラリは3以外でした。
(喋る文章)

テストのために「a」キーを押すと、ここに飛びます。
実際に使う場合は「喋る文章」、「テンポラリ」という二つの変数には
あらかじめなんらかの値が入っていると思いますが、ここでは、この位置で
代入しました。

>真だったら【タブ】(テンポラリ)==3

は条件つきジャンプです。「テンポラリ」の内容が3だった場合、
「*真だったら」に飛びます。もしも3じゃなかった場合はそのままその下の、

テンポラリは3以外でした。
あたりですよ

と喋ります。ここではテンポラリは3なので、

*真だったら
:テンポラリは3でした。
(replace,(喋る文章),あたり,はずれ)

に飛びます。ここでreplaceが出てきますが、replaceは、
(replace,文字列,検索語,置換する語)
という構文で「文字列」内にある「検索語」を"全て"「置換する語」に
置換します。
なので、aキーを押すと、

テンポラリは3でした。
はずれですよ

としゃべります。

「*aが押された」で「$テンポラリ=2」とするとどうなるか、
試してみて下さい。
****************************************************
#応用例

*OnKeyPress
>(R0)が押された


*aが押された
$喋る文章=今日のラッキーカラーはどどめ色です。
$テンポラリ=(乱数1~3)
>赤がラッキー【タブ】(テンポラリ)==1
>青がラッキー【タブ】(テンポラリ)==2
:(replace,(喋る文章),どどめ,緑)


*赤がラッキー
:(replace,(喋る文章),どどめ,赤)

*青がラッキー
:(replace,(喋る文章),どどめ,青)


****************************************************

もしも、しゃべった結果全体に適用したい、つまり
replace_after.txtのように使いたい場合は
*OnTranslate
を使います。
*OnTranslateでは、里々の全部の処理の終わった文章が(R0)に入っています。
例えば
かせいじんのおやこでテンポラリが3のとき、「父ちゃん」を
「父さん」と呼ぶようにしたい場合は

*OnTranslate
$テンポラリ=3
>真だったら (テンポラリ)==3
(R0)

*真だったら
(replace,(R0),父ちゃん,父さん)

とすると、常に「父さん」と呼びかけるようになります。$テンポラリ=1(3以外なら何でも)
とすれば「父ちゃん」のままです。

以上、簡便な条件つきジャンプ命令を使いましたが、if関数(SAORI)と組み合わせる
方法もあると思います。
リンク
web拍手
プロフィール

深瀬

Author:深瀬
FC2ブログへようこそ!

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード