[AS3] ActionScript 3.0で外部テキストファイルを読込む [Edit]

ActionScript 3.0では、外部テキストファイルを読込むLoadVarsクラスがなくなります[*1]。その替わりに用意されたのが、flash.net.URLLoaderクラスです[*2]。URLLoaderクラスを使った外部テキストファイルの読込みについてご紹介します。

URLLoaderクラスを使った外部テキストファイルロードの流れ

URLLoaderクラスを使うには、まずインスタンスを作成し、URLLoader.load()メソッドで外部テキストファイルをロードします。この手順は、基本的にLoadVarsクラスを使った場合と同じです。

ただし、ActionScript 3.0で外部ファイルを読込む際には、2.0のように単純にそのファイルのURLをロードのメソッドに渡すのではありません。外部ファイルの基本情報を備えたflash.net.URLRequestインスタンスを作成して、それを指定する必要があります。もちろん、URLRequestインスタンスの情報のうちもっとも重要なのは、外部ファイルのURLになります。

一般に外部ファイルを読込んで処理する場合、そのロード待ちをしなければならないことが通常です。URLLoaderインスタンスの場合は、flash.events.EventクラスのEvent.COMPLETEイベントが読込み終了時に発生します。したがって、そのイベントリスナーを登録します。

URLLoaderインスタンスには、デフォルトでは外部テキストがそのままURLLoader.dataプロパティにロードされます。ですから、そのテキストを「変数=値」のかたちに変換(デコード)しなければなりません。そのためのクラスがflash.net.URLVariablesです。URLVariablesインスタンスを生成するとき、外部ファイルから読込んだテキストを引数に指定すると、コンストラクタが自動的にこのデコードを行ってくれます。

「変数=値」のかたちに変換されたデータは、URLVariablesインスタンスのプロパティ(変数)として格納されます。その値の取出し方は、LoadVarsインスタンスの場合と基本的に変わりません。

URLLoaderクラスを使った外部テキストファイルロードのサンプル

では、実際にURLLoaderクラスを使ってみましょう。以下のような外部テキストファイルを用意して、その変数をロードするサンプルスクリプトです(スクリプト001)。テキストファイルはtest.txtという名前で、SWF(およびそれを埋込んだHTML)ファイルと同階層にあるものとします。

    sName=Fumio+Nonaka&sHobby=Bug+Fix

スクリプト001■URLLoaderを使った外部テキストファイルのロード
// フレームアクション
// [1] 使用するクラスのインポート
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.events.Event;
// [2] URLLoaderとURLRequestインスタンスの生成
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest("test.txt");
// [3] ロード完了時の処理をイベントリスナーに登録
myLoader.addEventListener(Event.COMPLETE, onComplete);
// [4] 外部テキストファイルのロード実行
myLoader.load(myRequest);
// [5] リスナー関数の定義
function onComplete (eventObject:Event) {
  var my_str:String = eventObject.target.data
  var myVars:URLVariables = new URLVariables(my_str);
  for (var name_str:String in myVars){
    trace([name_str, myVars[name_str]]);
  }
}

[1] インポートするクラスは、flash.netパッケージからURLLoaderとURLRequest、URLVariablesの3つ、それにflash.events.Eventになります。

[2] 外部テキストファイルを読込むためには、まずURLLoaderとURLRequestクラスのインスタンスを生成します。URLRequestクラスのコンストラクタ関数には、ロードする外部ファイルの情報として、文字列のURLを渡します。

[3] URLLoaderインスタンスには、外部テキストファイルがロードし終わったときのイベントEvent.COMPLETEに対して、イベントリスナー関数を登録します。

[4] イベントリスナーを登録した後、URLRequestインスタンスを引数として、URLLoader.load()メソッドの呼出しを行います。

[5] イベントリスナー関数を定義して、外部テキストファイルの処理を記述します。

イベントリスナー関数には、一般に引数としてイベントの情報を格納したオブジェクトが渡されます(Event.COMPLETEイベントの場合は、Event型)。イベントオブジェクトはEvent.targetプロパティをもち、その値としてイベントの発生したターゲットインスタンスへの参照が格納されます。このサンプルスクリプトでは、外部テキストファイルをロードしたURLLoaderインスタンスが納められます。

ロードされた外部ファイルのテキストは、URLLoader.dataプロパティにそのまま文字列として設定されます。「変数=値」のかたちに変換するためには、この文字列を引数としてURLVariablesコンストラクタに渡し、インスタンスを生成すればよいでしょう[*3]

URLVariablesインスタンスからの変数値の取出しは、LoadVarsインスタンスの場合と基本的に同じです。このサンプルでは、for..inステートメントを使って、すべての変数とその値をtrace()ステートメントで出力しています。外部テキストファイルが上述の内容であれば、[Output]パネルにはつぎのように表示されます。

    sName,Fumio Nonaka
    sHobby,Bug Fix

[*1] LoadVarsクラスを用いた外部テキストファイルのロードについては、「LoadVarsオブジェクトを使った外部テキストファイルの読込み」をご参照ください。

[*2] URLLoaderクラスについては、akihiro kamijo「URLLoaderクラス」をご参照ください。

[*3] ActionScript 3.0 Sample「外部テキストを変数に読み込む(フレーム内)」は、URLLoader.dataFormatプロパティを使って、URLLoader.dataにロードされたテキストを直接「変数=値」のかたちに変換しています。

その他の記事