[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.011 結果のデータをInStr関数を使ってカウントしてみる

結果のデータをInStr関数を使ってカウントしてみる


本文(発行内容)


<結果のデータをInStr関数を使ってカウントしてみる>


こんにちは、Ken3です。

前回、テキストファイルからの読み込み処理を行ったので、
今回は、
ファイルデータを読み込み、カウントしたいと思います。
あまり期待しないでね。

/*
 * 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 , 不正なパラメーターです

このデータを読み込んで、
満足、普通、不満、を集計(カウント)したいと思います。

今回も、芸が無いなぁ、、、、

/*
 * 2.一行読み込み後、InStr関数を使ってカウントしてみる。
*/

前回の.ReadLineを参考に読み込み部のループを作成し、

下記のように集計してみました。
---
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>一行読み込み後、InStr関数を使ってカウントしてみる</title>
</head>
<body>
<h2>一行読み込み後、InStr関数を使ってカウントしてみる</h2>
test011-1.asp<br>
<hr>

<%
dim strRECORD  'レコード内容を一時保存
dim nCNT01     '満足 カウンター
dim nCNT02     '普通 カウンター
dim nCNT03     '不満 カウンター

nCNT01 = 0 '*1 カウンターを初期化しておく
nCNT02 = 0
nCNT03 = 0

'FileSystemObjectを生成します、、って英文、そのままジャン。
Set objFS = Server.CreateObject("Scripting.FileSystemObject")

'test008.txt を読取専用モードで開く
Set ts = objFS.OpenTextFile(Server.MapPath("test008.txt"), 1, True)

Do While ts.AtEndOfStream = False  'ファイルの終端になってない間ループする
    strRECORD = ts.ReadLine   'ファイルからデータを一行を読む
    '*2 InStr関数を使って文字列を探す、見つかったらカウントアップ
    If InStr(strRECORD, "満足") > 0 Then nCNT01 = nCNT01 + 1
    If InStr(strRECORD, "普通") > 0 Then nCNT02 = nCNT02 + 1
    If InStr(strRECORD, "不満") > 0 Then nCNT03 = nCNT03 + 1
Loop

ts.close  '使ったファイルは閉じようよ

'*3結果の表示
Response.Write "満足は、" & nCNT01 & "人<BR>"
Response.Write "普通は、" & nCNT02 & "人<BR>"
Response.Write "不満は、" & nCNT03 & "人<BR>"

%>
<hr>
終了です<br>
<A HREF="test008.txt" target="_new">元データtest008.txtを見る</A><br>
</body>
</html>
---

http://www.ken3.org/cgi-bin/test/test011-1.asp
でサンプル実行可能です。

ポイントは、
nCNT01 = 0 '*1 カウンターを初期化しておく
nCNT02 = 0
nCNT03 = 0
で、初めにカウンター変数を初期化しておきます。

次が今回の講座の内容なんだけど、
    '*2 InStr関数を使って文字列を探す、見つかったらカウントアップ
    If InStr(strRECORD, "満足") > 0 Then nCNT01 = nCNT01 + 1
    If InStr(strRECORD, "普通") > 0 Then nCNT02 = nCNT02 + 1
    If InStr(strRECORD, "不満") > 0 Then nCNT03 = nCNT03 + 1
これは、
InStr関数が、文字列を継がす関数で、
InStr(元の文字列, 検索文字列)
機能は、見つかった場所(n文字目)を結果で返します。
また、見つからなかった時は0を返してくれます。
で、If文と組み合わせて、
If InStr(strRECORD, "満足") > 0 Then nCNT01 = nCNT01 + 1
と0以上の時は見つかったと判断、カウントアップしてます。

最後に結果を
'*3結果の表示
Response.Write "満足は、" & nCNT01 & "人<BR>"
Response.Write "普通は、" & nCNT02 & "人<BR>"
Response.Write "不満は、" & nCNT03 & "人<BR>"
で、単純に表示してます。

/*
 * 3.終わりの挨拶
*/

今回は、文字列を探す関数
InStrを使って、
アンケート結果を集計してみました。

なんか、キレが無かったなぁ、、、サンプルも1つだったしね。
まだまだ、道のりは遠いなぁ〜

またね(笑)

何か質問・感想があったら、気軽に、
メール、掲示板に書き込んでくださいね。

三流プログラマーのKen3でした。

フィードバック

ASP系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.011を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

三流君の主なリンク先

[アクセスランキング] [サイトマップ] [リンク先・相互リンク先など]
ASPで遊ぶ、失敗する 掲示板 バックナンバー 登録と解除
三流プログラマー 業務の愚痴 掲示板 バックナンバー 登録と解除
VBAで楽しくプログラミング 掲示板 バックナンバー 登録と解除
コンビニのオモテとウラ話 掲示板 バックナンバー 登録と解除
www.ken3.org(サイト内)から Google を利用して、

Ken3の日記(weblog) -- [広告・副収入系] [プログラマー業務の愚痴] [VBA系の話題] [ASP系の話題] [コンビニ系ネタ] [その他]

その他 宣伝広告