- ベストアンサー
テキスト入力での文字の判定
現在簡単なクイズができるFLASHを作成しております。 文字や番号をテキスト入力で入力させ、kotaeという変数に問題の答えとなる文字列をtextファイルから読み取ります。 解答というボタンを押すことによって 変数kotaeと入力した文字を比較して答えが一緒である場合 正解のフレームへ 間違っているなら不正解のフレームへジャンプさせたいと考えております。 半角英数字や半角数字数字などは判定がうまくいくのですが どうも全角文字はうまく判定できません これの原因が分かる方おられませんか? 実際に見てみないと分からないと思いますので ソースを用意しておきますね。 今回は頭を削っておきますのでご了承ください。 ://page.freett.com/ajisiotarou/output.txt ://page.freett.com/ajisiotarou/tes.fla
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Flash ばかり怪しんでいても解決しませんよ。 回答が遅くなってすみません。 最近,太陽が出ている頃に回答ができないもので… 問題は,Flash ではありません。 今回はパスでも無いようです。 問題は,「output.txt」です。 ----------------------------------------- bangou=1&mondai=犬も歩けば○に当たる、○に入る文字を答えなさい& &mon1=人&mon2=缶& &mon3=棒&mon4=猫&kotae=棒& &mon5=猿&load_flag=1; ----------------------------------------- これでうまく行くと思います。 元の 「output.txt」 には, ちょうど, kotae=棒 の後に改行が入っていますね。 表示させるだけには,改行があっても良いのですが, 判定などさせる場合は "&" が必要になります。 厳密に言うと,元の 「output.txt」 は次のようになっています。 以下の 「↓」 は改行コードだと思ってください。 …&kotae=棒↓ &mon5=猿… これをPCが見ると, …&kotae=棒↓&mon5=猿… のように見えますね。 変数 kotae の値は,「棒」ではなく「棒↓」です。 ボタンのスクリプトの中ですが, if(kotae == _root.textclip.output){ これで,「棒↓ == 棒」 は false と判断されるので, else{ this.gotoAndStop("huse");} } に行ってしまうのです(しまうのだと思います)。 テキストに "&" を入れれば以下のようになります。 …&kotae=棒&↓ &mon5=猿… これをPCが見ると, …&kotae=棒&↓&mon5=猿… です。「↓」も読み込まれますが,無視されるので問題はなくなります。 ずっと以前は,外部テキストに改行を入れたい場合 みなさんだいたい, aa=ああ& &bb=いい& &cc=うう& &dd=… という形式にされていたと思います。 でも最近のFlashの素材屋さんなどのデータには, たいてい改行前の "&" がありませんよね。 if で判定をするにしても,しないにしても "&" は付けた方が良いと思います。 私は,逆に最初, "&" を絶対に付けなければならない物かと思いこんでいました。 それで最近,素材屋さんのテキストを見て,付けてなくてビックリした記憶があります。 絶対に付けなければならない物ではなくて, 付けなくても良い場合もありますが,付けなければならない場合もあるのですね。 ややこしいので, 改行する場合はいつも付けていた方が良いのかもしれません。
その他の回答 (5)
- yamadachan
- ベストアンサー率38% (18/47)
if(kotae==_root.textclip.output){ を if("あああ" eq _root.textclip.text){ みたいな感じにしてテキストボックスにあああと入力してみてください。
お礼
本当に何度も何度もご丁寧に回答してくださってありがとうございました。 問題は無事に解決いたしました。 if("あああ" eq _root.textclip.text){ にしたところ問題なく判定はされておりました、これによってやはりFLASH側ではなく読み込まれているテキストが原因なのが分かりますね。 このたびはどうも有難うございました
- yamadachan
- ベストアンサー率38% (18/47)
>if(kotae ne _root.textclip.text){ 何度も間違えてすみません^^; if(kotae eq _root.textclip.text){ でしたね>< 現在試せる環境がないので家に帰って忘れなければ試してみますね
- yamadachan
- ベストアンサー率38% (18/47)
間違えました。 >if(kotae==_root.textclip.output){ >を >if(kotae==_root.textclip.text){ >としてもダメですか? if(kotae==_root.textclip.output){ を if(kotae ne _root.textclip.text){ としてもダメですか? です。
補足
何度もどうもありがとうございます。 if(kotae ne _root.textclip.text){ の場合ですと正解のページにしか飛びませんでした。 if(kotae eq _root.textclip.text){ の場合不正解のページにしか飛びませんでした。 文字入力の判定をほかの手にしたほうがいいですかね? ほかの手があればの話ですが・・・
- yamadachan
- ベストアンサー率38% (18/47)
on (release) { trace("output="+_root.textclip.output); trace("kotae="+kotae); if(kotae eq _root.textclip.output){ this.gotoAndStop("sei"); } else{ this.gotoAndStop("huse");} } これでダメだったわけですよね・・・ textclipと言うのは解答を入力するインスタンス名ですよね? outputと言うものを使った事ないのですが if(kotae==_root.textclip.output){ を if(kotae==_root.textclip.text){ としてもダメですか?
補足
ifの判定を以下のようにしてみましたが無理でした if(kotae==_root.textclip.text){ yamadachanさんが言ってらしたとおり textclipと言うのは解答を入力するインスタンス名のことです。 それとoutputというのはtextclip内にあるtext入力の変数の名前です
- yamadachan
- ベストアンサー率38% (18/47)
実際のデータは見ていませんが 比較する時に=(イコール)を使っていませんか? 文字列の比較をする場合は=ではなくeq、逆の場合はneを使います。
補足
お答え頂きありがとうございました。 yamadachanさんがおっしゃっていた通り文字列を比較 する時に==を使っておりました 以下がソースです on (release) { trace("output="+_root.textclip.output); trace("kotae="+kotae); if(kotae==_root.textclip.output){ this.gotoAndStop("sei"); } else{ this.gotoAndStop("huse");} } 変数outputに入力したデータが入っております 変数kotaeには問題の答えが入っております これでは=で判定しているので無理なのですよね? そこで==の所をyamadachanさんがおっしゃっていた通りに くeqbなどを使用しましたがうまくいきません それに半角なら判定できているといっておりましたがそれも無理でした。 問題の答えはtextファイルから読み出してそのまま変数kotaeに入れており、trace("kotae="+kotae); で確認してみたところ値は入っておりました。 traceでkotaeとoutputの値が同じ文字列が出力されているのにifの判定ではどうもうまくいきません 何が原因なのでしょうか?
お礼
回答が遅くなって申し訳ないなんでとんでもないですよ・・ むしろこちらの御礼が遅くなって申し訳ないです 早速試させて頂いたところ無事に判定が出来ました、私はてっきりFLASH側の問題なんだと頭から思っておりました。 テキスト側が問題だったとは・・・・ これからは改行するたびに&を付けていきたいと思います。 この度は誠に有難うございました。