- ベストアンサー
csvファイルのデータを変数として取込むには?
javascriptは1年生です^^ データバインドを利用して、テーブルにデータを表示しています。 document.write("<object id='setData' classid='clsid:333C7BC4-460F-11D0-BC04-0080C7055A83'>"); document.write("<param name='DataURL' value='setdata.csv'>"); document.write("<param name='UseHeader' value='true'>"); document.write("</object>"); document.write("<table border='1' datasrc='#setData'>"); document.write("<tr>"); document.write("<td><span datafld='data1'></span></td>"); とこんな感じで続くのですが、csvファイルのデータには、セル幅や背景色等の設定値も含まれています。 これらのデータは表示用のデータではないので、変数として取込まなければなりません。 普通なら、bodyタグの中に、 <input type="hiden" datafld="optionData1"> と書いて、そこからjavascriptで取込むことは可能ですが、document.writeを使うとbodyタグの中が書き換わってしまうので使えません。 (csvファイルの1行分のデータを、HTMLのテーブルで表示する時には、4行~6行と行数が変動するので、予めテーブルをbodyタグの中に書いておくことが出来ません。テーブル行数はスクリプト内で決定するので。なのでbodyタグの中は空でオールjavascriptでHTMLを生成しています) もう一つの方法はフレームを使って、parentで、データを送ることも考えたのですが、もっとスマートな方法はないでしょうか??
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
データバインドで色々調べてみました。 以下のようにすると変数(配列)に格納できそうです。 お試し下さい。 前提は6フィールドの内、 3フィールドを表示(data1~data3)、 残り3フィールド(data4~data6)を配列に格納する場合です。 <script> function start(){ setData.Reset();//リセット var rs = setData.recordset; data=new Array(); for(i=0;i<rs.RecordCount;i++){ data[i]=new Array(); data[i][0]=rs.Fields("data4").value; data[i][1]=rs.Fields("data5").value; data[i][2]=rs.Fields("data6").value; rs.MoveNext(); } setData.Reset();//リセット //格納されたか確認 for(i=0;i<rs.RecordCount;i++){ alert(str=data[i].toString()); rs.MoveNext(); } setData.Reset();//リセット } </script> <body onload="start()"> <object id="setData" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"> <param name="DataURL" value="setdata.csv"> <param name="UseHeader" value="true"> </object> <table datasrc="#setData" border="1"> <tr> <td><span datafld="data1"></span></td> <td><span datafld="data2"></span></td> <td><span datafld="data3"></span></td> </tr> </table> </body>
その他の回答 (4)
- arenani_sorenani
- ベストアンサー率73% (58/79)
カレンダーということなのでデータは恐らく日~土の7カラムの行が少ない場合で4行 多い場合は6行。このデータと各日ごとにカスタマイズする表示形式の指示が同じCSV上 に書かれてるという理解でよろしいでしょうか。 >それで設定画面を別に作り、CGIで幅や背景色等の設定値をcsv形式で保存するようにし CGIでデータを書き出す際に、日にちのデータと表示のデータを切り分け、 日にちのデータはCSV、表示形式は最大31要素の2次元配列としてjsファイルに書き出す ようにCGIを書き換えれば一番簡単化かなと思います。 それが無理なら表示要素のデータを右によせてdisplay:noneで非表示 tableの子要素のinnerTextから非表示列の表示データを拾いあげて配列に格納する。 データバインドではなく、隠しインラインフレームにCSVをplaintextとして読込んでカンマで切り分け、 変数に配列として格納するクラスを提供している方がいますので 下記URLもご参照ください。
お礼
ご回答ありがとうございます。 ちょっと忙しくなって、ご提案いただいた方法について検証する時間がなく、お返事が遅くなってしまいました。 display:noneで非表示するというアイデアは思いつきませんでした。いいかも知れませんね^^ 参考URLを見てみましたが、面白そうなので時間のあるときに勉強してみたいと思います。
- U40
- ベストアンサー率0% (0/4)
各人のパソコンの設定如何では使用不能ですね。 セキュリティホールを開けなければならないので。 なぜ CGI が普及したのか、教科書の最初の3ぺージ程度を読んで 理解し、納得し、CGI の習得に励むのが最もスマートでしょう。
お礼
ご回答ありがとうございます。 CGIは自分で作ることは出来ないものの、簡単な改造程度なら、なんとか・・・なんですが^^ 今回の設定値のcsvファイルの保存に関しても、<< のところを < にして上書き保存にしたりとか・・・ そんなわけで、最初からCGIで出来れば一番なのは分かっているのですが^^; CGIについては是非習得したいと思っています。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>CGIで幅や背景色等の設定値をcsv形式で保存するようにし、見る側は、どのパソコンでも同じ設定で見えるようにしたいのです。 表示に関する設定部分をXMLとして保存し、Ajax的なやり方で設定を取り込む様にしたらどうでしょうか。
お礼
ご回答ありがとうございます。 Ajaxというのは何度か聞いたことがありますが、先日初めて検索して関連サイトを覗いてみました。 これについては今後の課題ということで^^
- arenani_sorenani
- ベストアンサー率73% (58/79)
質問の内容が曖昧で何を聞きたいのかが良く分かりません。 そもそもCSVに表示しないdataを含ませる意味がわかりません。 セルの幅や背景色ならCSSまたはjsの外部ファイルに切り分ければ済む事と思いますが。
補足
云わば、「カレンダー・メーカー」なるものと考えて下さい。CGIで色々探したのですが、合うものがありませんでした。 (会社によっては水曜日が休日でもカレンダーの色が赤にならない等) それでjavascriptで作ることになりました。CGIとかは出来ませんので^^; javascriptがクライアント側で動作するため、設定したものが、他のPCでは反映されずに初期値で表示してしまいました。当然ですね^^; それで設定画面を別に作り、CGIで幅や背景色等の設定値をcsv形式で保存するようにし、見る側は、どのパソコンでも同じ設定で見えるようにしたいのです。
お礼
更なるご回答ありがとうございます。 別なページを用意しなくても出来そうですし、これが一番スマートかも知れませんね。 (URLを使ってデータを転送することを試みたのですが、出来ることは出来ましたが、データ丸見えでスマートじゃありませんでした^^;) このスクリプトを参考にさせていただきます。なんとか解決の糸口が見えてきそうです! ありがとうございました。