ActionScript3にてCSVファイルを読込む方法
以前の記事で、AS3でのCSVのパースができました〜みたいな記事(こちら)があったのですが、
実際に利用できるソースが載せてありませんでした。(俺のバカ)
ぼちぼちアクセスもあり、ないと思っていた需要が少しはありそう(?)なので
CSVUtilsを利用したCSVの取込みについてまとめました。
目次
- CSVUtilsのライブラリの配置
- CsvParserクラスの作成
- CsvParserクラスの利用方法
CSVUtilsのプロジェクトの配置
CSVUtilsは、sparkプロジェクトの以下ページよりダウンロードします。
http://www.libspark.org/wiki/kujirahand/CSVUtils
ページ内にも書かれていますが、プロジェクト内のcom/kujirahand に
ダウンロードしたCSVUtils.asを配置することで利用可能になります。
ファイルの取込みは、URLLoaderを利用しています。
URLLoaderは、ファイルの読み込みが非同期になり、読み込み終了時に
flash.events.EventクラスのEvent.COMPLETEイベントが発生します。
CsvParserクラスもこれに合わせたかったので、EventDispatcherクラスを継承し、
正常終了時にCOMPLETEイベント、エラー時にはERRORイベントを送出します。
(ついでに、開始時にSTARTイベントを送出します。)
ファイルの読み込み終了時処理(onCompleteExecute関数)にて、CSVファイルの中身(stream)を
CSVUtilsを利用して配列に変換し、ローカル変数のresultに保持します。
これにより、呼び出し元のコールバック関数にてCSV解析結果(result)を参照できるようにしてます。
CsvParserクラス(プログラムソース)
以下、CsvParserクラスのソースです。
package { import com.kijimura.CSVUtils; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLRequest; public class CsvParser extends EventDispatcher { /* CSVファイルパス */ protected var _filePath:String; /* CSVのパース結果 */ public var result:Array; public static const START:String = "start"; public static const COMPLETE:String = "complete"; public static const ERROR:String = "error"; /** * CSVサービスのコンストラクタ */ public function CsvParser(path:String) { _filePath = path; } /** * CSVファイルを読み込む */ public function execute():void { this.dispatchEvent(new Event(CsvParser.START)); // ファイルを読み込み var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest(_filePath); loader.addEventListener(Event.COMPLETE, onCompleteExecute); loader.addEventListener(IOErrorEvent.IO_ERROR, onErrorExecute); loader.load(request); } /** * ファイルの読み込みが終了した場合に呼び出されるコールバック関数 */ protected function onCompleteExecute(e:Event):void { var stream:String = e.target.data; result = streamToArray(stream); this.dispatchEvent(new Event(CsvParser.COMPLETE)); } /** * ファイルの読み込みに失敗した場合に呼び出されるコールバック関数 */ protected function onErrorExecute(e:Event):void { // エラー処理を記述 this.dispatchEvent(new Event(CsvParser.ERROR)); } /** * 引数のstreamを配列に変換して返す */ protected function streamToArray(stream:String):Array { return CSVUtils.CsvToArray(stream); } } }
CsvParserクラスの利用方法
作成したCsvParserクラスは、下記のように利用します。
概要
CsvParserクラスをインスタンス化する際に、読込むCSVファイルを引数に指定します。
続けて、CSVファイルのパースが終了した際に発生するCOMPLETEイベントのコールバック関数を
指定します。(エラー処理は省略)
execute()にて、CSVファイルの読み込みを開始します。
コールバック関数の引数のEventのtargetプロパティはCsvParserクラスを指しています。
読み込んだ結果を参照する際には、CsvParserクラスで結果を保持したresultプロパティを
参照すればOKです。
ここでは、Array -> ArrayCollectionに変換したものをresultCollectionに入れています。
使用例
以下、使用例となります。
/* * CSVファイルの読込みを開始する */ private function startLoadingCsv():void { // CSV読込み var parser:CsvParser = new CsvParser("test.csv"); parser.addEventListener(CsvParser.COMPLETE, onComplete); parser.execute(); } /* * CSV読込み完了時にのコールバック関数 */ private function onComplete(e:Event):void { var resultCollection:ArrayCollection = new ArrayCollection(e.target.result); // 読み込み後処理 }
まとめ
一応、こちらにて正常系の処理の動作確認は出来ました。
エラー処理が十分に甘いので、こちらのソースを利用する際は、この辺りを加味して
利用して下さい。
何かのお役に立てれば幸いです。
それでは!