<FormatNumber関数を使用して小数点固定、%を表示> こんにちは、Ken3です。 前回は、 世の中、外見重要、男性も化粧する時代(オイオイ、ホントか?) でした。(上の一行じゃ意味不明だけど) 今回も、アンケート結果の出力を少し変えてみます。 決り文句で、元が悪いと化粧もイミナイって?そんなぁ〜 あまり期待しないでね。 /* * 1.少し化粧をほどこした出力ページ */ 前回までに行った、集計結果の表示パターンは、 http://www.ken3.org/cgi-bin/test/test013-3.asp ←そのまま人数を表示 http://www.ken3.org/cgi-bin/test/test014-1.asp ←表(TABLE)にした http://www.ken3.org/cgi-bin/test/test014-2.asp ←表にワクをつけた でした。 どれもなんかしっくりこないと思いつつ、 今回も少しイタズラしてみます。 街中(インターネット上)でアンケート結果ページを見ると、 不満40.1%とか、%表示してますよね。 今回は、その化粧の方法をまねして、%表示にチャレンジしてみます。 なんだぁって感じですよね。 /* * 2.回答数÷全体数で計算だよね。 */ %の計算は、回答数÷全体数で計算だよね。 それでは、軽く追加します。 -- test015-1.asp -- <%@LANGUAGE=VBScript%> <html> <head> <title>%の計算は、回答数÷全体数で計算だよね</title> </head> <body> <h2>%の計算は、回答数÷全体数で計算だよね</h2> test015-1.asp<br> <hr> <% dim strRECORD 'レコード内容を一時保存 dim nCNT(10) 'カウンター 変数 10個もいらないけど dim nSUM '*1回答の合計数 nSUM = 0 '初期化する 'カウンター変数をループで初期化しておく For i = 0 to 10 nCNT(i) = 0 Next 'FileSystemObjectを生成します、、って英文、そのままジャン。 Set objFS = Server.CreateObject("Scripting.FileSystemObject") 'test013.txt 結果ファイルを読取専用モードで開く Set ts = objFS.OpenTextFile(Server.MapPath("test013.txt"), 1, True) Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループする strRECORD = ts.ReadLine 'ファイルからデータを一行を読む 'Left関数を使って左から1文字目をCintで数値変換 i = Cint(Left(strRECORD, 1)) '読みこんだレコードの1文字目を数値変換 'nCNT(i番目)をカウントアップ nCNT(i) = nCNT(i) + 1 '*2合計数は無条件にカウントアップ nSUM = nSUM + 1 Loop ts.close '使ったファイルは閉じようよ Response.Write "アンケート回答数<b> " & nSUM & "</b>人です" '*4回答数表示 'Array関数を使用して、評価コメントを初期化 strBOX = Array("かなり不満", "不満", "少し不満", "どちらとも言えない", _ "まぁまぁ", "満足", "大変満足") '結果の表示を<TABLE>タグを使用して表示 Response.Write "<TABLE border=1>" 'border=1で境界線(ワクを表示) Response.Write "<TR><TD>評価</TD><TD>コメント</TD><TD>人数</TD>" Response.Write "<TD>%</TD></TR>" '*3 %の見出しを追加 'ループで回して評価の集計データを表示する For i = 6 To 0 Step -1 '6〜0のループを作る Response.Write "<TR><TD>" & i & "</TD>" Response.Write "<TD>" & strBOX(i) & "</TD>" Response.Write "<TD>" & nCNT(i) & "</TD>" '*5 %を計算して、表示する Response.Write "<TD>" & (nCNT(i) / nSUM) * 100 & "%</TD></TR>" Next Response.Write "</TABLE>" '忘れずにテーブルを終わりにする %> <hr> アンケート結果はこんな感じです。<br> <A HREF="test013.txt" target="_new">元データtest013.txtを見る</A><br> <br> </body> </html> --- いつもの軽く解説だと、 dim nSUM '*1回答の合計数 nSUM = 0 '初期化する で、合計数のカウンターを宣言、初期化してます。 Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループする ・ ・ ・ '*2合計数は無条件にカウントアップ nSUM = nSUM + 1 Loop ループ内で、そのままカウントしてます。 もうひとつの考え方で、回答の合計数だから、 nSUM = nCNT(0) + nCNT(1) + nCNT(2) + nCNT(3) + nCNT(4) + nCNT(5) + nCNT(6) の力技や For i=0 To 6 nSUM = nSUM + ncnt(i) Next でカウントする手もあります。お好みで。 Response.Write "アンケート回答数<b> " & nSUM & "</b>人です" '*4回答数表示 は、確認の意味も含めて、表示してます。 'ループで回して評価の集計データを表示する For i = 6 To 0 Step -1 '6〜0のループを作る Response.Write "<TR><TD>" & i & "</TD>" Response.Write "<TD>" & strBOX(i) & "</TD>" Response.Write "<TD>" & nCNT(i) & "</TD>" '*5 %を計算して、表示する Response.Write "<TD>" & (nCNT(i) / nSUM) * 100 & "%</TD></TR>" Next 人数÷合計数×100で%を計算し、出力してます。 終了ですね。今日は軽かったですね。では、また。 オイ、三流プログラマー 何? 表示を見たのかよ。 http://www.ken3.org/cgi-bin/test/test015-1.asp を実行すると、 アンケート回答数 16人です 評価 コメント 人数 % 6 大変満足 1 6.25% 5 満足 2 12.5% 4 まぁまぁ 1 6.25% 3 どちらとも言えない 4 25% 2 少し不満 3 18.75% 1 不満 3 18.75% 0 かなり不満 2 12.5% と表示されるよ。 気になるのが(見た目でNGなのは)、 6.25% 12.5% 25% と小数点以下の桁数がそろってないよ。 それと、データは右詰になっていて、 数値は左詰のほうがいいのでは? 人数が10だったら、 1 10 と表示じゃマズイでしょ。 /* * 3.FormatNumber関数 と <TD ALIGN=Right> */ う〜ん、何かないかなぁ。 第一の問題点は小数点以下の桁数問題かぁ、 関数を探すと、 FormatNumber関数ってのが使えそうです。 使い方は moji = FormatNumber(値,小数点以下の桁数) で、調整した文字列を返してくれます。 次は右詰かぁ、 えっと、表作りの<TD>タグにALIGNってあるから、 これをRightにするか。 -- test015-2.asp <%@LANGUAGE=VBScript%> <html> <head> <title>FormatNumber関数 と <TD ALIGN=Right></title> </head> <body> <h2>FormatNumber関数 と <TD ALIGN=Right></h2> test015-2.asp<br> <hr> <% dim strRECORD 'レコード内容を一時保存 dim nCNT(10) 'カウンター 変数 10個もいらないけど dim nSUM '*1回答の合計数 nSUM = 0 '初期化する 'カウンター変数をループで初期化しておく For i = 0 to 10 nCNT(i) = 0 Next 'FileSystemObjectを生成します、、って英文、そのままジャン。 Set objFS = Server.CreateObject("Scripting.FileSystemObject") 'test013.txt 結果ファイルを読取専用モードで開く Set ts = objFS.OpenTextFile(Server.MapPath("test013.txt"), 1, True) Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループする strRECORD = ts.ReadLine 'ファイルからデータを一行を読む 'Left関数を使って左から1文字目をCintで数値変換 i = Cint(Left(strRECORD, 1)) '読みこんだレコードの1文字目を数値変換 'nCNT(i番目)をカウントアップ nCNT(i) = nCNT(i) + 1 '*2合計数は無条件にカウントアップ nSUM = nSUM + 1 Loop ts.close '使ったファイルは閉じようよ Response.Write "アンケート回答数<b> " & nSUM & "</b>人です" '*4回答数表示 'Array関数を使用して、評価コメントを初期化 strBOX = Array("かなり不満", "不満", "少し不満", "どちらとも言えない", _ "まぁまぁ", "満足", "大変満足") '結果の表示を<TABLE>タグを使用して表示 Response.Write "<TABLE border=1>" 'border=1で境界線(ワクを表示) Response.Write "<TR><TD>評価</TD><TD>コメント</TD><TD>人数</TD>" Response.Write "<TD>%</TD></TR>" '*3 %の見出しを追加 'ループで回して評価の集計データを表示する For i = 6 To 0 Step -1 '6〜0のループを作る Response.Write "<TR><TD>" & i & "</TD>" Response.Write "<TD>" & strBOX(i) & "</TD>" Response.Write "<TD ALIGN=RIGHT>" & nCNT(i) & "</TD>" '*7ALIGN=RIGHT追加 '*5 %を計算して、表示する strMSG = FormatNumber((nCNT(i) / nSUM) * 100, 1) '*6計算と変換処理 Response.Write "<TD ALIGN=RIGHT>" & strMSG & "%</TD></TR>" Next Response.Write "</TABLE>" '忘れずにテーブルを終わりにする %> <hr> アンケート結果はこんな感じです。<br> <A HREF="test013.txt" target="_new">元データtest013.txtを見る</A><br> <br> </body> </html> --- ポイントは、得に無く、 'ループで回して評価の集計データを表示する For i = 6 To 0 Step -1 '6〜0のループを作る Response.Write "<TR><TD>" & i & "</TD>" Response.Write "<TD>" & strBOX(i) & "</TD>" Response.Write "<TD ALIGN=RIGHT>" & nCNT(i) & "</TD>" '*7ALIGN=RIGHT追加 '*5 %を計算して、表示する strMSG = FormatNumber((nCNT(i) / nSUM) * 100, 1) '*6計算と変換処理 Response.Write "<TD ALIGN=RIGHT>" & strMSG & "%</TD></TR>" Next *6で、 strMSG = FormatNumber((nCNT(i) / nSUM) * 100, 1) '*6計算と変換処理 と、小数点以下を1桁にしたのと *7で、 Response.Write "<TD ALIGN=RIGHT>" & nCNT(i) & "</TD>" '*7ALIGN=RIGHT追加 と、<TD ALIGN=RIGHT>を使ってみました。 http://www.ken3.org/cgi-bin/test/test015-2.asp を実行すると、無事にできたみたいです。 /* * 4.まだまだ、メイクが上手じゃないよね */ ここ2・3回は、出力ばかり気にしてるけど、 なかなか、上達しないよね。 プログラムもセンスでるけど、 HTMLで結果を表示して、ユーザーに見せるのもセンスが必要ですね。 ASPのテクだけじゃなく、 HTMLの見せ方も平行して覚えないと、 本当にいいページはできないと感じる今日この頃。 /* * 5.終わりの挨拶 */ 今回は、 ・アンケートには%の項目あるよね ・FormatNumber関数を使って小数点以下の調整 ・<TD ALIGN=Right>で右詰の表示 でした。 結果の見せ方も、いろいろな書き方あるので、 人を振り向かせる、夢中にさせるページをみなさんは目指してくださいね。 最強ページへの道のりは遠いなぁ〜。 またね(笑) 何か質問・感想があったら、気軽に、 メール、掲示板に書き込んでくださいね。 三流プログラマーのKen3でした。
ページフッター
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
三流君へ メッセージを送る
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]
まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。
次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません
広告:
DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く
VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]