<Left関数を使ってみた、ファイル設計?> こんにちは、Ken3です。 前回は、 InStr関数を使用して、 テキストファイルからの読み込み、集計処理処理を行いました。 今回は、 シンプルに、普通のファイル設計 と Left関数です。 あまり期待しないでね。 /* * 1.前回の集計元のデータ説明 */ 前置きが長くなるけどご勘弁を。 前回のテストデータは、おなじみの?下記のデータを使用してます。 test008.txt ( http://www.ken3.org/cgi-bin/test/test008.txt ) に時刻と評価が下記のように書かれています。 2002/12/05 8:11:04 , 満足 2002/12/05 8:14:12 , 普通 2002/12/05 15:53:28 , 満足 ・ ・ ・ 2002/12/07 15:36:54 , 満足 2002/12/07 15:56:49 , 満足 2002/12/07 15:57:22 , 不正なパラメーターです このデータを読み込んで、 満足、普通、不満、を集計(カウント)してました。 ふつう?こんなファイルの作りしないよね?三流君変わってるよ。 えっ、なんで? この時間に書きこまれた結果はXXですよ って、みたままで、わかり易いと思うけどなぁ。 ねっ、皆さんも同じでしょ? でも、書き込み時刻の後に、結果が文字列で入っているので、 InStr関数を使用して、 苦労して、満足、普通、不満の文字を探してやってますよね? 別に?苦労なんかしてないよ。 働いてるのはコンピュータだし、なんてバカなこと言ってないで、 今度はもっと簡単なファイルの作りに変えますか。 /* * 2.ファイルの仕様を考える */ ファイルの仕様を考える前に、何をしたいか?だよね初めは。 じゃ、五段階のアンケートを取ってよ、あっ、時刻も付けて。 5、満足 4、まぁまぁ 3、どちらとも言えない 2、少し不満 1、不満 の五段階にして下さい。確認のため日本語でも書き込んでよ。 では、ファイルフォーマットは今度も可変のカンマ区切りで 評価(1〜5),満足など日本語,書き込み時刻 にしましょう。 ファイル名はtest012.txtで下記のようなイメージで中身を保存。 1,不満,2002/12/07 15:36:54 5,満足,2002/12/07 15:56:49 2,少し不満,2002/12/07 15:57:22 日本語入れると、時刻がガタガタになるから気に入らないけど、 まぁ、イッカ。 /* * 3.次は入力、アンケート収集方法 */ で、入力は?フォームからの入力、アンケートメールから?坊やの好みは? できたら、どっちもやりたいなぁ。 ちっ、欲張りだなぁ。(おいおい、客に向かって舌打はないだろ、、、) 気を取り直して、まずは、HTML側からいくか、 5〜1の評価の選択だからラジオボタンを使うか。 HTML内に下記のフォームを貼ってね。 例)ラジオボタンでデータ選択、GETで送信(URLにパラを載せて送る) <html> <head> <title>tset012.html 満足度を入力</title> </head> <body> <h2>tset012.html 満足度を入力</h2> <br> <FORM ACTION="test012-1.asp" METHOD="GET"> このメルマガの満足度は?選択後、送信ボタンを押してください。<br> <INPUT TYPE="RADIO" NAME="a" VALUE="5">5.満足<br> <INPUT TYPE="RADIO" NAME="a" VALUE="4">4.まぁまぁ<br> <INPUT TYPE="RADIO" NAME="a" VALUE="3">3.どちらとも言えない<br> <INPUT TYPE="RADIO" NAME="a" VALUE="2">2.少し不満<br> <INPUT TYPE="RADIO" NAME="a" VALUE="1">1.不満<br> <br> <INPUT TYPE="submit" VALUE="送 信"> <INPUT TYPE="reset" VALUE="入力クリア"> </FORM> </body> </html> 簡単に書きましたが、ポイントは、 INPUT TYPE="RADIO" NAME="a" VALUE="1" で、選択式のラジオボタンで、 データ量も少ないので、 METHOD="GET" でtest012-1.aspを呼び出してます(送ってます)。 メールのほうは、クエリ情報で送るので、 アンケート取るには、 http://www.ken3.org/cgi-bin/test/test012-1.asp?a=5 5、満足 http://www.ken3.org/cgi-bin/test/test012-1.asp?a=4 4、まぁまぁ http://www.ken3.org/cgi-bin/test/test012-1.asp?a=3 3、どちらとも言えない http://www.ken3.org/cgi-bin/test/test012-1.asp?a=2 2、少し不満 http://www.ken3.org/cgi-bin/test/test012-1.asp?a=1 1、不満 でクリックしてもらってよ。 /* * 4.テキストファイルへの書き込み処理 */ データがクエリ情報で送られてくるのかぁ、 項目名はaで内容は1から5だね。 1〜5以外の時はエラーにして、何もしないことにしよう(不正データは書かない) 下記のように作成しました。 (新しいことはやってないので復習的にコピーで作成) --- <%@LANGUAGE=VBScript%> <html> <head> <title>テキストファイルに5〜1のアンケート結果を書き込む</title> </head> <body> <h2>テキストファイルに5〜1のアンケート結果を書き込む</h2> test012-1.asp<br> <hr> <% 'アンケートの結果をまず判断する strMSG = "不正なパラメーターです" 'エラーメッセージを初期値として代入 if Request.QueryString("a") = "5" then strMSG = "満足" if Request.QueryString("a") = "4" then strMSG = "まぁまぁ" if Request.QueryString("a") = "3" then strMSG = "どちらとも言えない" if Request.QueryString("a") = "2" then strMSG = "少し不満" if Request.QueryString("a") = "1" then strMSG = "不満" If strMSG = "不正なパラメーターです" Then 'エラーパラメータのままか?チェック Response.Write "データを正しく受け取れませんでした<br>" Else 'FileSystemObjectを生成します。 Set objFS = Server.CreateObject("Scripting.FileSystemObject") 'test012.txt を追加モードで開く Set ts = objFS.OpenTextFile(Server.MapPath("test012.txt"), 8, True) 'ファイルにアンケート結果のデータを書き込む ts.write Request.QueryString("a") & "," '結果1〜5を書く ts.write strMSG & "," 'ファイルに結果を書き込む ts.write Now '時刻を書く ts.write chr(13) & chr(10) '改行する '*4使ったファイルは閉じようよ ts.close End if Response.Write "パラメーターは<b>" & strMSG & "</b>" '表示もついでに行う %> <hr> 回答、<b>ありがとうございます</b><br> <A HREF="test012.txt" target="_new">結果の生データ、test012.txtを見る</A><br> </body> </html> --- テストは、 http://www.ken3.org/cgi-bin/test/test012.html でフォームからの入力、 メールからの直接入力は(URLリンク) http://www.ken3.org/cgi-bin/test/test012-1.asp?a=5 5、満足 http://www.ken3.org/cgi-bin/test/test012-1.asp?a=4 4、まぁまぁ http://www.ken3.org/cgi-bin/test/test012-1.asp?a=3 3、どちらとも言えない http://www.ken3.org/cgi-bin/test/test012-1.asp?a=2 2、少し不満 http://www.ken3.org/cgi-bin/test/test012-1.asp?a=1 1、不満 で データが渡ります。 下記のようなデータ形式でtest012.txtに書き込まれます。 3,どちらとも言えない,2002/12/09 19:04:33 5,満足,2002/12/09 19:04:54 2,少し不満,2002/12/09 19:06:52 う〜ん、ガタガタで見にくいけど、まぁ仕様通りには書きこめたカナ。 安心してないで、次、次。 /* * 5.読みこんだデータを<b> Left関数で判断 </b> */ ですねよね、データが書けたので、安心してないで、 読み込み、カウント処理を作成します。 今日、書きたかった Left 関数、やっとここで登場です。 --- <%@LANGUAGE=VBScript%> <html> <head> <title>一行読み込み後、Left関数を使ってカウントしてみる</title> </head> <body> <h2>一行読み込み後、Left関数を使ってカウントしてみる</h2> test012-1.asp<br> <hr> <% dim strRECORD 'レコード内容を一時保存 dim nCNT05 '満足 カウンター dim nCNT04 'まぁまぁ カウンター dim nCNT03 'どちらとも言えない カウンター dim nCNT02 '少し不満 カウンター dim nCNT01 '不満 カウンター nCNT01 = 0 '*1 カウンターを初期化しておく nCNT02 = 0 nCNT03 = 0 nCNT04 = 0 nCNT05 = 0 'FileSystemObjectを生成します、、って英文、そのままジャン。 Set objFS = Server.CreateObject("Scripting.FileSystemObject") 'test012.txt 結果ファイルを読取専用モードで開く Set ts = objFS.OpenTextFile(Server.MapPath("test012.txt"), 1, True) Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループする strRECORD = ts.ReadLine 'ファイルからデータを一行を読む '*2 Left関数を使って左から1文字目を判断、見つかったらカウントアップ Select Case Left(strRECORD, 1) '読みこんだレコードの1文字目 Case "5": nCNT05 = nCNT05 + 1 Case "4": nCNT04 = nCNT04 + 1 Case "3": nCNT03 = nCNT03 + 1 Case "2": nCNT02 = nCNT02 + 1 Case "1": nCNT01 = nCNT01 + 1 End Select Loop ts.close '使ったファイルは閉じようよ '*3結果の表示 Response.Write "5、満足は、" & nCNT05 & "人<BR>" Response.Write "4、まぁまぁは、" & nCNT04 & "人<BR>" Response.Write "3、どちらとも言えないは、" & nCNT03 & "人<BR>" Response.Write "2、少し不満は、" & nCNT02 & "人<BR>" Response.Write "1、不満は、" & nCNT01 & "人<BR>" %> <hr> アンケート結果はこんな感じです。<br> <A HREF="test012.txt" target="_new">元データtest012.txtを見る</A><br> </body> </html> --- 三流君らしく、なんか、ダラダラと長いよね? で、ポイントは何なの? 得に無いんだけど、 Left関数の使い方は、 Left(strRECORD, 1)みたいに、 Left(文字列,文字数) で 左から文字数分の文字列を返します。 これを Select Case文で判断してカウントしてます。 なんかプログラムにムダが多いんだけどなぁ。 http://www.ken3.org/cgi-bin/test/test012-2.asp で、集計プログラムが動作します。 http://www.ken3.org/cgi-bin/test/test012.html でフォームからの入力、 http://www.ken3.org/cgi-bin/test/test012.txt で生データの確認ができます。 /* * 6.終わりの挨拶 */ 今回は、 シンプルなファイルの仕様を考えたのと Left関数を使って、 アンケート結果を集計してみました。 システムって、 書き込み処理側、 読み込み処理側 あるので、 ファイル処理は、ファイルフォーマット作りで、 あるていど決まるのかなぁと思う今日この頃。 でも、まだまだ、イマイチなんだよね。 いろいろとある改善点は次回に。 道のりは遠いなぁ〜。 またね(笑) 何か質問・感想があったら、気軽に、 メール、掲示板に書き込んでくださいね。 三流プログラマーの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記事 バックナンバー目次]