|
<script language="JavaScript" type="text/javascript">
<!--
//copyright(C) 2005 あう http://www5c.biglobe.ne.jp/~horoau/
//ver1.2
function csv_reader()
{
this.delim = ",";
this.qout = '"';
this.readyState = "ready";
this.setup = function (url,script)
{this.func = script;
this.readyState = "loading";
with(document)
{if(url && document.getElementById)
{if(!getElementsByTagName("body")[0])
{setTimeout("obj_bank.withdraw("+obj_bank.deposit(this)+").setup('"+url+"','"+script+"');",300);
return;}
else if((document.all && navigator.userAgent.indexOf("Opera") == -1) &&
(document.readyState != "interactive" && document.readyState != "complete"))
{setTimeout("obj_bank.withdraw("+obj_bank.deposit(this)+").setup('"+url+"','"+script+"');",300);
return;}
this.data_frame = createElement("iframe");
var i = 0;
while(getElementById("frame_id"+i))
{i++;}
with(this.data_frame)
{setAttribute("id","frame_id"+i);
setAttribute("name","frame_id"+i);
setAttribute("src",url);
setAttribute("width","1");
setAttribute("height","1");
style.position = "absolute";
style.visibility = "hidden";}
document.getElementsByTagName("body")[0].appendChild(this.data_frame);
this.iframe = eval("window.frame_id"+i);
if(!document.all)
{this.iframe.document.getElementsByTagName("html")[0].innerHTML = '<body>';}
this.iframe.check_loading = 1;
this.check();}
else
{this.readyState = "error";
return;}}}
this.check = function ()
{if(this.iframe)
{if(!this.iframe.check_loading && (document.all && navigator.userAgent.indexOf("Opera") == -1))
{this.readyState = "error";
return;}
if(this.iframe.document)
{if(this.iframe.document.readyState == "complete")
{this.reading();
return;}
else if(this.iframe.document.getElementsByTagName("html")[0])
{if(this.iframe.document.getElementsByTagName("html")[0].innerHTML.match(/<\/body>$/))
{this.reading();
return;}}}}
this.id = setTimeout("obj_bank.withdraw("+obj_bank.deposit(this)+").check();",10);}
this.reading = function ()
{clearTimeout(this.id);
if(!this.iframe.document.body.getElementsByTagName("pre")[0])
{this.readyState = "error";
return;}
this.data_line = this.iframe.document.body.innerHTML.replace(/^<pre>/i,"").replace(/<\/pre>$/i,"").replace(/\r\n?/g,"\n").split(/\n/);
for(var i=0;i<this.data_line.length;i++)
{var re = new RegExp('\x20*'+this.qout+'[^'+this.delim+']*'+this.qout+'\x20*'+this.delim+'?'+'|\x20*'+'[^'+this.delim+this.qout+']*'+this.delim+'?','g');
this.data_line[i] = this.data_line[i].match(re);
this.data_line[i].length -= 1;}
for(var i=0;i<this.data_line.length;i++)
{for(var ii=0;ii<this.data_line[i].length;ii++)
{if(this.data_line[i][ii] == undefined)
{this.data_line[i][ii] = "";}
else
{re = new RegExp('^\x20*'+this.qout+'?','g');
this.data_line[i][ii] = this.data_line[i][ii].replace(re,"")
re = new RegExp(this.qout+'?\x20*'+this.delim+'?$','g');
this.data_line[i][ii] = this.data_line[i][ii].replace(re,"");}}}
document.getElementsByTagName("body")[0].removeChild(this.data_frame);
this.readyState = "complete";
eval(this.func);}}
function obj_bank()
{var bank = new Array();
this.deposit = function (obj)
{for(var i=0;bank[i];i++)
{;}
bank[i] = obj;
return i;}
this.withdraw = function (no)
{var payment = bank[no];
bank[no] = "";
return payment;}}
obj_bank = new obj_bank();
// -->
</script>
|
[ 2005.7.10 ] ver.1.2 |
|
クラスライブラリのリニュついでにデータバインドからCSVリーダーに改名してみた。
必要最小限の機能にした方が何かと使いやすい場合もあるからね。
クラスライブラリの場合、ある意味部品なわけだしなおさらね。
それにデータバインドと呼んでしまうと
IEのデータバインドが多機能だからそのイメージになりそうだからね。
|
|
|
[ 2005.3.16 ] ver.1.1 |
|
自分でこのクラス使ってみようとして始めて不具合に気付いたわ。
動作確認はちゃんとしてるんだけど
やっぱり実際に使う場合とは違う点多いからね。
実際このクラス自体かなり無理な部分もあったりするから
ある程度は仕方ないんだけど
直せる点は直していかないとね。 |
|
|
[ 2005.1.18 ] ver.1.0 |
|
何とか初版公開。
データバインド機能って便利そうではあるんだけど
何せIEのみの対応だから気が引けてしまって。
だったらってことでデータバインドクラス作ってみました。
表計算ソフトからの出力だとか使い道は結構あるかと。
スクリプト全体は案外簡単に組みあがったものの
ブラウザ毎の差異が大きくてその調整に難航。
一時は開発断念かとも思われたが何とか完成。
作る前からこのクラスで取り込んだデータを処理する
拡張クラスの構想いくつも練ってたし
クラスライブラリ集を公開開始するに当たって
当面の目玉として考えてたからね。
無事に出来上がってよかった。
1つ気にかかるのがExcelで出力したCSVの対応。
聞くところによると一癖あるらしいし
とりあえず調べた限りは対応出来るようにはしておいたつもりだけど。
ちなみに筆者はExcelは使ってないんで
何か問題点があったら報告してもらえると嬉しいです。 |
|
ウェブ木箱
copyright(C) 2005 あう