<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記事 バックナンバー目次]