- 2008-08-26 (火)
- Action Script 3.0
Flash から CSV データを読み込んで処理する機会があったりして、そんな時は、ググってみりゃサンプルソースがたんまりと発見できたりする。
が。
今回、CSV データの中に「価格」という項目があり、値段に「,(カンマ)」が付いていたりする(汗
この「,」が悪さをするんですよ…。
区切りたくないところで区切ってしまう。
ということで、先のサイトを参考にしつつ、価格の「,」をエスケープする処理を追加することに。
なんかの役に立つかなと思いソースをメモ。
CSV ダミーデータ

名前,色,値段,内容
りんご,赤,"1,000",美味しい
みかん,オレンジ,500,ビタミンC
さくらんぼ,赤,"2,000",うまい
レモン,赤,"1,500","すっぱい"
スイカ,緑,"2,500",夏!
メロン,緑,"5,000",高級
いちご,赤,"2,500",かわいい
こちらのダミーデータを読み込むサンプル。
見て分かるように数値に「,」が含んでいるデータ。
ソース
package {
//クラス
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.net.URLLoader;
public class Main extends Sprite {
//コンストラクタ
public function Main() {
//URLLoader作成
var csvUrl = new URLRequest("data.csv");
var csvLoader:URLLoader = new URLLoader(csvUrl);
csvLoader.load(csvUrl);
//イベント設定
csvLoader.addEventListener(Event.COMPLETE, csvLoaderComplete);
}
//読み込み完了
function csvLoaderComplete(event:Event) {
//データを格納
var csvData:String = event.target.data;
//出力
//trace(csvData);
//CSVパース
var csvArr:Array = new Array();
csvArr = parseCSV(csvData);
//出力
var n:uint = csvArr.length;
for (var i:uint = 0; i < n; i++) {
trace(csvArr[i]["名前"]);
trace(csvArr[i]["色"]);
trace(csvArr[i]["値段"]);
trace(csvArr[i]["内容"]);
}
}
//パース&多重配列化
function parseCSV(str:String):Array {
//CSVの配列
var arr:Array = new Array();
//改行コードをすべて「\n」に
str = (str.split("\r\n")).join("\n");
str = (str.split("\r")).join("\n");
//改行ごとに区切る
var theFileArray:Array = str.split("\n");
//最終行が空白の場合は削除
if (theFileArray[theFileArray.length - 1] == "") theFileArray.pop();
//項目名
var theFieldNames:Array = removeWQuotes(theFileArray[0]).split(",");
//項目数
var numberOfFields:uint = theFieldNames.length;
//項目処理
for(var i:uint=0; i
上記の trace 出力結果
りんご
赤
1,000
美味しい
みかん
オレンジ
500
ビタミンC
さくらんぼ
赤
2,000
うまい
レモン
赤
1,500
すっぱい
スイカ
緑
2,500
夏!
メロン
緑
5,000
高級
いちご
赤
2,500
かわいい
はい!
数値に「,」が含んでいても、きれいにパース出来ました!
コメント:0
トラックバック:0
- この記事のトラックバックURL
- http://god.xsrv.jp/__mt/mt-tb.cgi/1339
- トラックバックを受ける記事
- AS3 で CSV データをパースする(数値に「,」があるやつに対応) from 1ka2ka.com