[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.012 Left関数を使ってみた、ファイル設計?

Left関数を使ってみた、ファイル設計?



本文(発行内容)


<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でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[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記事 バックナンバー目次]


広告: