今回はFlashムービーで外部テキスト・ファイルを読み込み,テキスト・データ分割様々な処理をする方法について説明します。ActionScript 3.0では,テキスト・ファイルやXMLデータ,CGIからの戻り値等,外部のデータにアクセスする際には,「URLLoaderクラス」を使用します。また,外部データのURIや,データ送信の際に付加したいパラメータを管理するには,URLRequestクラスや,URLVariablesクラスを使用します。

 図1のムービーは,Flashムービーと同じディレクトリ内にあるテキスト・ファイル「textDdata.txt」を読み込み,その内容を表示しています。

図1●テキスト・ファイルを読み込むムービー
図1●テキスト・ファイルを読み込むムービー(こちらからサンプル・ファイルをダウンロードできます
[クリックすると別ウィンドウでムービーを表示します]

テキスト・ファイルを読み込む

 ActionScript3.0を使って,外部データにアクセスする場合には,「URLLoaderクラス」を使用します。また,ファイルを読み込む際には,読み込むファイルのURLを指定しますよね。このファイルのURLを指定するには,「URLRequestクラス」を使用します。これら2つのクラスの使い方を,具体的にテキスト・ファイルを読み込むコードを記述しながらご紹介します。

 まずは,読み込むテキスト・ファイルを用意します。今回は,図2のようなテキスト・ファイルを読み込んでみます。

図2●読み込むテキスト・ファイル
図2●読み込むテキスト・ファイル

 図2の表は,図3のようなExcelのデータを,テキストで書き出しているような状態と考えてください。いわゆる,「タブ区切り形式」のテキスト・ファイルというわけですね。

図3●Excelでのイメージ
図3●Excelでのイメージ

 なお,タブ区切り形式のテキスト・ファイルの作り方は,Excelがあれば,Excelで表を作成し,そのままコピーして,「メモ帳」等のテキストエディタに貼り付けるだけです。また,ActionScriptからテキスト・ファイルを扱いやすくするためには,テキスト・ファイルを保存する際に,文字コードを「UTF-8」にしておくと便利です(「メモ帳」であれば,[名前を付けて保存]ダイアログの[保存]ボタンの左に,文字コードを選択するボタンが用意されています)。

 では,このテキスト・ファイルを読み込むコードを記述してみましょう。新規Flashドキュメントを作成し,テキスト・ファイルと同じフォルダ内に任意の名前を付けて保存します。スクリプト用のレイヤーをひとつ用意し,次のようにコードを記述します。

//読み込むファイルのアドレス情報を作成
var request:URLRequest = new URLRequest("textData.txt");
//URLLoaderのインスタンスを作成
var loader:URLLoader = new URLLoader();
//読み込み完了後の処理を作成
loader.addEventListener(Event.COMPLETE,traceData);
function traceData(event:Event){
  trace(loader.data);
}
//読み込み失敗時の簡易処理を作成
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,trace);
loader.addEventListener(IOErrorEvent.IO_ERROR,trace);

//読み込みを開始
loader.load(request);

図4●テキスト・ファイルの内容を読み込んで表示
図4●テキスト・ファイルの内容を読み込んで表示

 ムービープレビューで結果を確認してみると,図4のようにテキスト・ファイルの内容が表示されますね。では,このコードの内容を見てみましょう。

 外部のデータにアクセスするには,まず,「そのデータをどこに取りに行くのか」という情報を,URLRequestクラスを使って作成します。ケータイで読み取れるQRコード作るような感じですね。URLRequestクラスは,コンストラクタ関数に,データのURLを文字列形式で渡して作成します。今回は,Flashムービーと同じディレクトリ内にある「textData.txt」を読み込みたいので,

var request:URLRequest = new URLRequest("textData.txt");

のようになりますね。

 どこに取りに行くかの指定ができた所で,今度はデータを送受信するためのURLLoaderクラスを準備します。これは,ケータイを手元に準備するような感じですね。

var loader:URLLoader = new URLLoader();