出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

フォント拡大、円グラフ表示   まちゅさん [2005/11/23 11:14:50] [5480]
  Re:フォント拡大、円グラフ表示   YasNet(管理人)さん [2005/11/23 19:34:35] [5481]
    ありがとうございます、でも新たな問題が・・・   まちゅさん [2005/11/26 20:31:58] [5489]
      Re:ありがとうございます、でも新たな問題が・・・   まちゅさん [2005/11/26 20:33:51] [5490]
      Re:ありがとうございます、でも新たな問題が・・・   ビギナーズラックさん [2005/11/28 0:44:33] [5491]
      Re:ありがとうございます、でも新たな問題が・・・   Lightningさん [2005/11/28 9:44:25] [5492]

[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
Program By YasNet