出来るのだASP Q&A掲示板(過去LOG)
訪問数 52046
昨日 889
今日 776 【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。 |
![]() ![]() ![]() ![]() ![]() |
![]() ![]() |
![]() ![]() ![]() ![]() ![]() |
[5480] フォント拡大、円グラフ表示 |
投稿者:まちゅさん 2005/11/23 11:14:50 |
初めまして、初心者のまちゅと申します。 現在、アンケートサイトをaspで作成しており、行き詰っております。 アンケートの結果を円グラフで表示したいのですが、方法はないでしょうか? さらに、グラフ内の文字を大きくする方法も教えて頂ければ幸いです。 現在、10問のアンケートの回答を1問ずつ別々のグラフに表示したく、悪戦苦闘しています。 よろしくお願い致します。 |
[5481] Re:フォント拡大、円グラフ表示 |
投稿者:YasNet(管理人)さん 2005/11/23 19:34:35 |
こんにちは YasNet(管理人)です。 書き込み有難うございます。 円グラフとなると True WebChart http://www.grapecity.com/japan/support/database/P1_248.htm などといったソフトをインストールすととか DLLを自作するとかが一般的でしょうか 棒グラフなら簡単なんですけどねぇ〜 フォントサイズはHTMLのサイズやスタイルシートのサイズを変更すれば済むのでは? それでは 失礼致します。 > 初めまして、初心者のまちゅと申します。 > 現在、アンケートサイトをaspで作成しており、行き詰っております。 > アンケートの結果を円グラフで表示したいのですが、方法はないでしょうか? > さらに、グラフ内の文字を大きくする方法も教えて頂ければ幸いです。 > 現在、10問のアンケートの回答を1問ずつ別々のグラフに表示したく、悪戦苦闘しています。 > > よろしくお願い致します。 |
[5489] ありがとうございます、でも新たな問題が・・・ |
投稿者:まちゅさん 2005/11/26 20:31:58 |
YasNet様 ご回答、ありがとうございます。 やはり円グラフは難しいみたいですね。 フォントの方も無事に解決いたしました。 ありがとうございます。 しかし、今度はプログラムの方で問題が発生いたしまして・・・ 1つのページに10個の問題を表示しているのですが、csvファイルに書き込まれたデータからグラフを表示するときにうまくいきません。 csvファイルには 1,2,1,2,1,2,1,2,1,2,aaaa 2,2,2,1,1,1,2,1,1,2,bbbb このように書かれていて、これを1行ずつ集計してグラフを表示したいのです。 しかし、うまくいきません。 お力を貸して頂けないでしょうか。よろしくお願いします。 プログラムは <HTML> <HEAD> <TITLE>2問目</TITLE> </HEAD> <BODY BGCOLOR="white"> <CENTER> <FONT SIZE=7>正しいのを選びなさい<br><br></FONT> <P><FONT SIZE=6> 2.「食べる」の尊敬語 </FONT></P> <TABLE BORDER CELLPADDING=4> <TR><TD><center><FONT SIZE=6>回答</center></font></TD><TD><FONT SIZE=6><center>人数</center></font></TD><TD><FONT SIZE=6><center>比率</center></font></TD><TD ALIGN=CENTER><FONT SIZE=6><center>グラフ</center></font></TD></TR> <FONT SIZE=6> <% Dim q(2) Dim feeling2(2) Dim nSUM For i = 1 to 2 q(i) = 0 Next feeling2(1) = "<FONT SIZE=6>いただく</font>" : feeling2(2) = "<FONT SIZE=6>召し上がる</font>" cnt = 0 datafile = Server.MapPath("anketo1.csv") Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject") Set InStream = ObjFSO.OpenTextFile(datafile, 1, False, False) Do While InStream.AtEndOfStream <> True pfile = InStream.ReadLine n = CInt(Left(pfile, InStr(1, pfile, ",") - 1)) If n >= 1 And n <= 2 Then q(n) = q(n) + 1 cnt = cnt + 1 End If Loop InStream.Close For i = 1 to 2 r = Int(q(i) / cnt * 100) pfile = "<TR><TD>" & feeling2(i) & "</TD>" pfile = pfile & "<TD ALIGN=RIGHT><FONT SIZE=6>" & q(i) & "</font><FONT SIZE=6>人</font></TD>" s = FormatNumber((q(i) / cnt) * 100, 1) pfile = pfile & "<TD><FONT SIZE=6>" & s & "</font><FONT SIZE=6>%</font></TD>" If q(i) > 0 Then pfile = pfile & "<TD><IMG SRC=bar.gif HEIGHT=10 WIDTH=" & r * 4 & ">" Else pfile = pfile & "</TD></TR>" End If Response.Write(pfile) Next %> </font> </TABLE> </CENTER> </BODY> </HTML> 今は、 n = CInt(Left(pfile, InStr(1, pfile, ",") - 1)) r = Int(q(i) / cnt * 100)・・・実行するとオーバーフローしましたと出てきます この2ヶ所が原因ではないかと思っています。 初心者なもので、みなさんが頼りです。 よろしくお願い致します。 |
[5490] Re:ありがとうございます、でも新たな問題が・・・ |
投稿者:まちゅさん 2005/11/26 20:33:51 |
すみません csvファイルは1行ではなくて、1列ですね。 ちなみにaaaaやbbbbはIDなどを示しています。 どうかよろしくお願いします。 |
[5491] Re:ありがとうございます、でも新たな問題が・・・ |
投稿者:ビギナーズラックさん 2005/11/28 0:44:33 |
ズバッと省略 > 今は、 > n = CInt(Left(pfile, InStr(1, pfile, ",") - 1)) > r = Int(q(i) / cnt * 100)・・・実行するとオーバーフローしましたと出てきます > > この2ヶ所が原因ではないかと思っています。 > 初心者なもので、みなさんが頼りです。 > よろしくお願い致します。 > どうもです。 とりあえずぱっとみ n = CInt(Left(pfile, InStr(1, pfile, ",") - 1)) これですがsplit使ったほうが簡略化されるような気がします 全体の流れで言うと、ファイルline(つまり回答数分)でループしながら splitで配列に入れたものは、ubound(arr)でarrの要素数分(つまり問題数分 iとする)ループして別の配列に格納 別の配列は回答ごとにarr1、arr2としてもいいし 二次元配列でもいいので、if分岐で回答が1のときはarr1(i)=arr1(i)+1にして 回答が2の時はarr2(i)=arr2(i)+1にして足し算していくと #1次元配列の場合、ただし10択だと20個変数が必要なので多次元のほうがいいかも あとはiの数分arr1とarr2を出力するだけ arr1の値をbar1.gif、arr2をbar2.gifにして並べると、比率の棒グラフになりますよね。 ざっとで申し訳ないですが、こんなんでどうでしょうか? 余談ですが、今頃からASP覚えるならXHTML+CSSとあわせて覚えると 今後も意味あるのではないかなって思ったりします。 |
[5492] Re:ありがとうございます、でも新たな問題が・・・ |
投稿者:Lightningさん 2005/11/28 9:44:25 |
いろいろ略 > datafile = Server.MapPath("anketo1.csv") > > Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject") > Set InStream = ObjFSO.OpenTextFile(datafile, 1, False, False) > Do While InStream.AtEndOfStream <> True > pfile = InStream.ReadLine > n = CInt(Left(pfile, InStr(1, pfile, ",") - 1)) > If n >= 1 And n <= 2 Then > q(n) = q(n) + 1 > cnt = cnt + 1 > End If > Loop > InStream.Close まずは基本から。 FileSystemObjectを使う場合は Do until objTS.AtEndOfStream loop ってしたほうがわかり良い。っていうか、BooleanにTrueとかFalseを問い合わせるのはナンセンス〜 他の方もかかれていますがCSVを取り出すときは n = split(pfile, ",") でOK ただし、取り出すときには temp = objTS.ReadLine if instr(temp,",") <> 0 then temp_CSV = split(temp,",") end if みたいに区切り文字が存在することを確認しておくこと。 splitを使うとCSVのを右から順にtemp_CSV(0)と言う感じで使用できます。 > 今は、 > n = CInt(Left(pfile, InStr(1, pfile, ",") - 1)) > r = Int(q(i) / cnt * 100)・・・実行するとオーバーフローしましたと出てきます オーバーフローの直前の状態のq(i) cntの値を調べるてみてください。 予想外の値が入ってませんか?cnt=0とかってこれじゃ0除算エラーか |
TreeBBS For ASP V.0.1.3 |