テキスト・ファイルに複数のデータを書き込む際には,タブ区切りやカンマ区切り,さらには独自のルールなど,いろいろな方法で書きこむケースがあります。このようなテキストをFlashムービーに読み込み,解析をする方法についてご紹介します。

クイズ問題をテキスト・ファイルから読み込むムービー

 図1は最近流行りの診断系クイズのムービーです。三択クイズの問題は,外部のテキスト・ファイルで読み込めるようにしてみました。

図1:テキスト・ファイルを読み込むムービー(クリックするとムービーを表示します。ファイル一式はこちらからダウンロードできます

 問題文用のテキスト・ファイルは,タブ区切り形式で記述してあります。実はこのファイル,Excelで問題文と回答を作成して,[ファイル]-[名前を付けて保存]で「テキスト(タブ区切り)(*.txt)」形式で保存したファイルなのです(図2)。

図2:ファイル構成

 問題文を管理しているExcelのシートは,図3のようになっています。

図3:問題文を管理しているExcelのシート(クリックすると拡大表示します)

 クイズ形式のコンテンツの問題文を作成するのには,表計算ソフトを使ったほうが見やすく,管理もしやすいですよね。ほとんどの表計算ソフトは,標準でタブ区切りやカンマ区切りのテキスト・ファイルに書き出す機能を備えていますので,これを読み込むことができれば,問題作りも非常に簡単です。他の人に問題作りを全部任せてしまうことだってできます。分業ばんざい!!

 さて,問題を作成しやすいのは良いのですが,ここで問題になってくるのが,タブ区切り,あるいはカンマ区切りなどのテキスト・ファイルを書き出したときに,Flashムービー側でそれをどう読み込み,意図したようなデータとして扱うのか,といった方法です。

 前回ご紹介した方法では,「変数名=値」という形式のテキスト・ファイルしか読み込んで利用することしかできませんでした。そこで今回は,読み込んだデータを自分で字句解析して利用する方法をご紹介します。

onDataイベントハンドラを利用する

 外部のテキスト・ファイルを読み込むには,LoadVarsクラスを利用する事は前回もご紹介しました。今回もやはり,このLoadVarsクラスを利用してテキスト・ファイルを読み込みます。

 前回とちょっと違うのは,「onLoadイベントハンドラ」を利用する代わりに「onDataイベントハンドラ」を利用するという点です(表1)。

表1:LoadVarsクラスのイベントハンドラ
イベント
ハンドラ
説明
onLoad読み込みが完了し,既定の解析が終わったときに実行したい処理を割り当てる
onData読み込み完了後,既定の解析処理を行わずに,自分でデータの解析処理を行いたいときに割り当てる
onHTTPStatus読み込み時にサーバーからHTTPステータスコードを受け取った際に実行したい処理を割り当てる

 基本的な流れとしては,

  1. LoadVarsクラスのインスタンスを生成
  2. 読み込んだあとの処理を作成(onDataイベントハンドラの設定)
  3. 読み込み
となります。

 コードで書いてみると,

var textReaderLV:LoadVars = new LoadVars;
textReaderLV.onData = function(data){
  //引数dataに渡されたテキストの解析処理
};
textReaderLV.load(テキスト・ファイルへのパス);
が基本的な流れとなります。onLoadイベントハンドラのときとよく似ていますね。

 ここで注目していただきたいのは,onDataイベントハンドラに割り当てられたイベントハンドラ・メソッドの引数です。実はonDataイベントハンドラは,引数として,読み込んだテキスト・ファイルの内容をそのまま渡します。この仕組みを利用して,自前の字句解析処理を作成すれば,タブ区切りやカンマ区切り等の形式のデータでも,自由自在に加工することができるというわけです。

タブ区切りのテキスト・ファイルを解析する

 では,実際にタブ区切りのテキスト・ファイルを読み込んで解析してみましょう。新規Flashドキュメントを作成し,任意のフォルダに名前を付けて保存します。同じフォルダ内にタブ区切りのテキスト・ファイル「data.txt」を作成します。