« 9.1 イメージファイルの読み込み(1) | メイン | p23 »

10.1 外部テキストファイルの読み込み

■外部テキストファイルの読み込み
外部テキストファイルの読み込みにはURLLoaderクラスを使用します。基本的な手順は外部イメージファイルの読み込みと同じですが、Loaderインスタンスが表示オブジェクトなのに対し、URLLoaderクラスのインスタンスは表示オブジェクトではありません。URLLoaderクラスでダウンロードしたテキストを表示するには、ステージに表示されているダイナミックテキストフィールドやTextAreaコンポーネントにテキストを入れる必要があります。なお、Loaderクラスでイメージを読み込む場合と同様にSWFと外部テキストファイルが同じドメインにない場合はセキュリティエラーになります。これを解決するにはクロスドメインポリシーファイルを相手側サーバーに置き、アクセスが許可されているかどうかをチェックするする必要があります。(ポリシーファイルのチェック→p.??)
次のTextdataLoaderクラスでは、外部のテキストファイルを読み込み、そのテキストをステージに作ってあるTextAreaコンポーネントのインスタンスに表示します。

[:NOTE:]
変数の読み込み、PerlやPHPなどのサーバーサイドスクリプトとのやり取りにもURLLoaderクラスを使います。AS2.0のLoadVarsクラスはAS3.0ではURLLoaderクラスに置き換えられました。なお、SWFファイルおよびイメージファイルをロードするにはLoaderクラスを使用します(Loaderクラス→p.??)。

fig10-01-01 外部テキストファイルから読み込んだテキストをTextAreaに表示します。


[:sample:] TextdataLoader.as
例:外部テキストファイルを読み込むTextdataLoaderクラス
package {
	import fl.controls.TextArea;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.system.System;
	import flash.events.Event;
	import flash.text.TextFormat;

	public class TextdataLoader {
		var txtArea:TextArea;
		
		//コンストラクタ
		function TextdataLoader(ta:TextArea, url:String, shiftJIS:Boolean) {
			txtArea = ta;
			var format:TextFormat = new TextFormat();
			format.size = 18;
			txtArea.setStyle("textFormat",format);
			//URLLoader作成
			var txtLoader:URLLoader = new URLLoader();
			txtLoader.dataFormat = URLLoaderDataFormat.TEXT;
			txtLoader.addEventListener(Event.COMPLETE, onLoaded);
			//URL
			var urlReq:URLRequest = new URLRequest(url);
			//Shift-JISならばtrue
			System.useCodePage = shiftJIS;
			//読み込み開始
			txtLoader.load(urlReq);
		}
		//読み込んだテキストを表示する
		function onLoaded(event:Event):void {
			txtArea.text = txtLoader.data;
		}
	}
}

TextdataLoaderクラスを試すには、TextAreaコンポーネントのインスタンスreport_txtを作り、メインのタイムラインのフレームアクションに次のスクリプトを書きます。この例ではSWFファイルと同じ階層にあるtextdataフォルダの中のテキストファイルchigasaki.txtを読み込みます。テキストファイルの文字コードはUnicodeでもShift-JISでも構いません。このサンプルではShift-JISで保存してあります。

fig10-01-02 ステージはTextAreaコンポーネントのインスタンスreport_txtを作ります。

[:sample:] textdataLoader_test.fla
例:メインのタイムラインのフレームアクション
import TextdataLoader;
var url:String = "textdata/chigasaki.txt";
var shiftJIS:Boolean = true;
var imgLoaderObj:TextdataLoader = new TextdataLoader(report_txt, url, shiftJIS);

外部テキストファイルの読み込みはURLLoaderクラスを使います。URLLoaderクラスではテキストだけでなくバイナリーやURLエンコード形式の変数を受信できるので、テキストを読み込む場合にはURLLoaderクラスのインスタンスのdataFormatの値をURLLoaderDataFormat.TEXT("text")にします。ただ、dataFormatの初期値はURLLoaderDataFormat.TEXTなので設定しなくても構いません。

[:note:]
dataFormatの値はバイナリを読み込む場合はURLLoaderDataFormat.BINARY、URLエンコード形式の変数を読み込む場合はURLLoaderDataFormat.VARIABLESにします。

例:URLLoader作成
var txtLoader:URLLoader = new URLLoader();
txtLoader.dataFormat = URLLoaderDataFormat.TEXT;

読み込むテキストのURLはLoaderクラスと同様にURLRequestオブジェクトにし、txtLoader.load(urlReq)のようにして読み込みを開始します。ここで、読み込むテキストの文字コードの初期値がUnicodeである点に注意が必要です。Shift-JISで保存してあるテキストを読み込む場合にはSystem.useCodePageの値をtrueに設定します。

例:Shift-JISで読み込み開始
//URL
var urlReq:URLRequest = new URLRequest(url);
//Shift-JISならばtrue
System.useCodePage = shiftJIS;
//読み込み開始
txtLoader.load(urlReq);

読み込んだテキストデータはURLLoaderのインスタンスのdataプロパティに格納されます。そこで、読み込み完了のEvent.COMPLETEイベントを受けたならば、txtLoader.dataからテキストデータを取り出して表示します。

例:読み込んだテキストを表示する
function onLoaded(event:Event):void {
	txtArea.text = txtLoader.data;
}

TextAreaコンポーネントの書式はTextFormatクラスのオブジェクトformatを作ってプロパティを設定し、setStyle("textFormat",format)で設定します。

例:TextAreaコンポーネントの書式設定
var format:TextFormat = new TextFormat();
format.size = 18;
txtArea.setStyle("textFormat",format);

About

2007年8月10日 10:40に投稿されたエントリーのページです。

ひとつ前の投稿は「9.1 イメージファイルの読み込み(1)」です。

次の投稿は「p23」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。