CSVクラス
var CSV = function(src){ this.src = src; this.for_each = function(func){ var tmp = ''; this.src.replace(/^(.+)$/mg,function(m,line){ // ダブルクォートの個数が奇数なら、改行が含まれた値が存在するので、次の行を繋ぐ tmp += line+"\n"; var m = tmp.match(/"/g); if(m && (m.length & 1) == 1){ return; }else{ // 最後の改行をコンマにしてパターンマッチング tmp = tmp.replace(/\n$/,','); var columns = []; tmp.replace(/("[^"]*(?:""[^"]*)*"|[^,]*),/g,function(m,$1){ columns.push($1.replace(/^"(.+)"$/,'$1')) }); tmp = '' func(columns) } }); } }
始めはprototype.jsでの定義形式で作ってたんだけど、
prototype.jsの機能ほとんど使ってないから、別にいいやと思いますた。
配列を処理する時にはprototype.jsは便利だよねー。1.6から$A使わなくても良くなって便利になったけど、
それはそれで賛否両論あるのかもしれない。
CSV解釈についてはhttp://www.din.or.jp/~ohzaki/perl.htm#CSVwithCRLFを参考にさせていただきました。が、
理解が足りずに劣化コピーになっている可能性もあります。
なお、手抜きなのでFirefoxでしか確認してませんwww
operaでも動くと思います。
使い方は
var data = new CSV(csv_txt_data_with_crlf); data.for_each(function(columns){ // columnsは配列。ここでなんしか処理を行う })