• ベストアンサー

外部テキスト読み込み

外部テキストを読み込んで そのテキストの中に、検索したい文字列が入っているかどうかが知りたいのですが、上手くいきません ソース System.useCodepage = true; my_lv = new LoadVars(); my_lv.onLoad = function() { find_num = my_lv.indexOF("検索したい文字列"); trace(find_num); }; my_lv.load("date.txt");

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

結論から書きますと、 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  //Shift-JISで読み込む  System.useCodepage = true;  //オブジェクトの生成と読み込み  my_lv = new LoadVars();  my_lv.load( "data.txt" );  //独自の解析ルーチンを実装  my_lv.onData = function( src )  {   //ダウンロードが成功した時のみ、   //指定の文字列があるかどうかを探す   if( src != undefined )   {    find_num = src.indexOf( "検索したい文字列" );    trace( find_num );   }  }; で、いかがでしょう。 ------------------------------------------------ ActionScript では基本的に、外部テキストファイルは変数として読み込みます。 例えば、data.txt の中身が  sample=あいうえお、カキクケコ、ABC、XYZ だとします。 これを読み込むと、sample という変数が定義され、その値が「あいうえお、・・・」という内容になります。 外部テキストファイルを読み込むには、loadVariables というアクションもあります。 loadVariables で読み込むと、最後の変数が読み込まれた時に data というイベントが発生します。 このイベントを利用するか、指定の変数が未定義あるいは変数が空かどうかなどで、読み込みの終了を検出できます。 loadVariables では、変数として読み込まないと読み込みの終了を検出できませんし、読み込んだテキストを利用する術がありません。 data.txt が 変数=値 の形式ではなく、  あいうえお、カキクケコ、ABC、XYZ このようにただ文字列が書かれていたとすると、loadVariables では、ファイルを開いて読み込むことはできても読み込んだものを参照する方法がなく、どうにもなりません。 Flash Player 6 から登場した LoadVars は同じく変数を読み込めるクラス( Flash MX ではオブジェクト)ですが、このあたりの事情が少し違います。 LoadVars は loadVariables とは違い、読み込み完了時には2段階でイベントが発生します。 ファイルを開いてそのデータを全てダウンロードした時点で、まず、onData で定義されている処理が呼び出されます。 普通は、onData イベント発生時に、読み込んだデータを”変数とその値”に分割し、変数として利用できるように加工する処理が自動的に呼び出されます。 この処理が終了した時点で、onLoad で定義した処理が行われます。 onLoad イベントが発生した時点では、読み込まれたテキストは変数とその値に分解されており、変数は読み込みを担当した LoadVars オブジェクトのものになっています。 data.txt の中身が  sample=あいうえお、カキクケコ、ABC、XYZ の場合は、onLoad イベントハンドラの中、またはそれ以外のところでも、  my_lv.sample このようにすれば参照できます。 data.txt が”変数とその値”の形で書かれていなかったら、loadVariables と同じでどうにもならないのかというと、実はそうではありません。 読み込まれた直後の文字列は、onData イベント発生時に呼び出される関数の引数(冒頭のスクリプトでは onData = function の仮引数 src )として渡されてきます。 つまり、data.txt が”変数とその値”の形式で書かれていなかったとしても、onData イベントで呼び出される関数の引数を利用すれば、読み込んだ文字列を取得して利用できるのです。 ちなみに、この引数が undefined になっている時は、ダウンロードが途中で失敗したものと判断できます。 ただし、onData を使って独自の処理を上書きした時は、本来は発生するはずの onLoad イベントが発生しなくなります。 また、読み込んだデータを onData で呼び出される関数以外で利用するには、LoadVars.toString で取得できないこともないのですが、末尾に余計な文字列が付くことがあり、ちょっと不便です。 後でも再利用したい場合は、  my_lv.onData = function( src )  {   //変数に保存   sample = src;  }; という具合に、予め別の変数に保存しておくといいでしょう。 もっとも、こんなことをするくらいなら、特に事情がない限りは data.txt に最初から  sample=あいうえお、カキクケコ、ABC、XYZ と、変数=値 の形式で書いておいた方が早いと思います。

teturouet
質問者

お礼

こんなに丁寧に教えて下さってありがとうございます とても参考になりました

その他の回答 (1)

  • perse
  • ベストアンサー率74% (113/152)
回答No.1

うまくいかないとはどういう状態でしょうか? ★方法1★ >find_num = my_lv.indexOF("検索したい文字列"); の部分を find_num = unescape(my_lv).indexOf("検索したい文字列"); としてはどうでしょう。unescapeでデコードしています。あとindexOfの「f」は小文字です。 ★方法2★ -外部テキストdate.txtに word="テストです" と書いている場合、 find_num = my_lv.word.indexOf("検索したい文字列"); でいけると思います。

teturouet
質問者

お礼

ありがとうございます

関連するQ&A

専門家に質問してみよう