[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.018 Mod演算子 で 余りを計算する

Mod演算子 で 余りを計算する



本文(発行内容)


<Mod演算子 で 余りを計算する>

こんにちは、Ken3です。

今回は、
軽くハシ休めで、
MOD で 余りを計算する
です。

あまり期待しないでね。

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

とテキストファイルがあって、
これを表示するプログラム、

In message "[ASPで遊ぶ No.010] - テキストファイルからデータを読む",
 >' FileSystemObjectを生成します、、って英文、そのままジャン。
 >Set objFS = Server.CreateObject("Scripting.FileSystemObject")
 >
 >' test008.txt を読取専用モードで開く
 >Set ts = objFS.OpenTextFile(Server.MapPath("test008.txt"), 1, True)
 >
 >Do While ts.AtEndOfStream = False  '*6ファイルの終端になってない間ループ
 >    strDATA = ts.ReadLine   'ファイルからデータを一行を読む
 >    Response.Write strDATA  '読み込んだデータを表示
 >    Response.Write "<BR>"   '改行のタグを入れる
 >Loop
 >
 >ts.close  '使ったファイルは閉じようよ
---

http://www.ken3.org/cgi-bin/test/test010-2.asp
で、そのまま流して、表示してました。

今回は、それだと見にくいので、
5行単位で、区切りの線を入れてみたいと思います。

/*
 * 2.余りを求めるのはMod演算子
*/
考え方のポイントは、
まず、行番号を数えないといけないか。
で、その行番号が5、10、15の後に区切りの線を引きたいなぁ。
区切りの線は<HR>タグを出力するとして、
さて、どうしようかなぁ。
5で割って余りが0の時に出力にしよう。

余りを求める演算子でMod演算子があるので、
これを使ってみます。
11 Mod 5 とやると、11を5で割った余りの1と演算されます。
もちろん
n Mod 5 とか変数の使用もOKです。

-- test018-1.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>MOD で 余りを計算する</title>
</head>
<body>
<h2>MOD で 余りを計算する</h2>
test018-1.asp<br>
動作仕様:test008.txtを読み込み、5行単位で線を引く(<HR>タグを入れる)
<hr>
<%
'FileSystemObjectを生成します
Set objFS = Server.CreateObject("Scripting.FileSystemObject")

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

Dim nLINE  '*1行数のカウンター
nLINE = 0  'カウンターを初期化

Do While ts.AtEndOfStream = False  '*6ファイルの終端になってない間ループ
    strDATA = ts.ReadLine   'ファイルからデータを一行を読む
    nLINE   = nline + 1     '*2行カウンタを+1する
    Response.Write nLINE & "行目 " '行番号の表示
    Response.Write strDATA  '読み込んだデータを表示
    Response.Write "<BR>"   '改行のタグを入れる
    '*3行カウンタが5、10、15、、5で/って余りが0なら
    '<HR>タグを挿入する
    If nLINE Mod 5 = 0 Then
        Response.Write "<HR>"   'タグを入れる
    End If
Loop

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

%>
<hr>
<A HREF="test008.txt">使用したtest008.txtを見る</A><br>
<br>

</body>
</html>
---

いつものポイント解説は、

Dim nLINE  '*1行数のカウンター
nLINE = 0  'カウンターを初期化
で、変数の宣言と初期化

Do While ts.AtEndOfStream = False  '*6ファイルの終端になってない間ループ
    strDATA = ts.ReadLine   'ファイルからデータを一行を読む
    nLINE   = nline + 1     '*2行カウンタを+1する
    Response.Write nLINE & "行目 " '行番号の表示
    Response.Write strDATA  '読み込んだデータを表示
    Response.Write "<BR>"   '改行のタグを入れる
    '*3行カウンタが5、10、15、、5で/って余りが0なら
    '<HR>タグを挿入する
    If nLINE Mod 5 = 0 Then
        Response.Write "<HR>"   'タグを入れる
    End If
Loop

ループの中で、
    nLINE   = nline + 1     '*2行カウンタを+1する
とカウントアップして、
    If nLINE Mod 5 = 0 Then
        Response.Write "<HR>"   'タグを入れる
    End If
で、判断してます。

http://www.ken3.org/cgi-bin/test/test018-1.asp
をテストで実行すると、
おっ、なんとか線で区切られました。

/*
 * 3.もう一つのアプローチ方法
*/

1行目 2002/12/05 8:11:04 , 満足
2行目 2002/12/05 8:14:12 , 普通
3行目 2002/12/05 15:53:28 , 満足
4行目 2002/12/05 15:53:44 , 不満
5行目 2002/12/05 19:41:41 , 不満
--------------------------------------
6行目 2002/12/06 13:10:22 , 満足

と行番号を表示しないなら、
別な考え方もあります。

行番号が5、10、15...の後に区切りの線を引きたいなぁ。
区切りの線は<HR>タグを出力するとして、
さて、どうしようかなぁ。
5で割って余りが0の時に出力にしよう。

と初めの考え方は、余りが0の時にHRを出力しましょうでした。

この考え方を変えて、
1、2、3、4、5、はいここで区切りを出力、
再度1から数えて、
1、2、3、4、5、はいここで区切りを出力
と、
1〜5まで数えて、5の時に区切りを出力、
出力後はまた1から数えさせる、
なんて考え方もアリかなぁ。

/*
 * 4.カウンターの初期化をうまく使う
*/

下記がサンプルです。

-- test018-2.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>カウンター初期化のタイミング</title>
</head>
<body>
<h2>カウンター初期化のタイミング</h2>
test018-2.asp<br>
動作仕様:test008.txtを読み込み、5行単位で線を引く(<HR>タグを入れる)
<hr>
<%
'FileSystemObjectを生成します
Set objFS = Server.CreateObject("Scripting.FileSystemObject")

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

Dim nLINE  '*1行数のカウンター
nLINE = 0  'カウンターを初期化

Do While ts.AtEndOfStream = False  'ファイルの終端になってない間ループ
    strDATA = ts.ReadLine   'ファイルからデータを一行を読む
    nLINE   = nline + 1     '*2行カウンタを+1する
    Response.Write strDATA  '読み込んだデータを表示
    Response.Write "<BR>"   '改行のタグを入れる
    '*3行カウンタが5なら<HR>タグを挿入、カウンタクリア
    If nLINE = 5 Then       'カウンタが5になったか?
        Response.Write "<HR>"   'タグを入れる
        nLINE = 0               'カウンターをクリアする
    End If
Loop

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

%>
<hr>
<A HREF="test008.txt">使用したtest008.txtを見る</A><br>
<br>

</body>
</html>
---

ポイントは、
Dim nLINE  '*1行数のカウンター
nLINE = 0  'カウンターを初期化

Do While ts.AtEndOfStream = False  'ファイルの終端になってない間ループ
    strDATA = ts.ReadLine   'ファイルからデータを一行を読む
    nLINE   = nline + 1     '*2行カウンタを+1する
    Response.Write strDATA  '読み込んだデータを表示
    Response.Write "<BR>"   '改行のタグを入れる
    '*3行カウンタが5なら<HR>タグを挿入、カウンタクリア
    If nLINE = 5 Then       'カウンタが5になったか?
        Response.Write "<HR>"   'タグを入れる
        nLINE = 0               'カウンターをクリアする
    End If
Loop

で、
If nLINE = 5 Then
カウンタが5になったか確認して、
5の時は、<HR>タグの出力
そして忘れてはいけない
カウンターを初期化の
nLINE = 0
です。

行番号を表示しないなら、
こんな考え方もありってことで。

http://www.ken3.org/cgi-bin/test/test018-2.asp
をテストで実行出来ます。
*なんか行番号が無いと、、、落ち着かないかも。

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

今回は、
・Mod演算子を使って、5行区切りに挑戦
・カウンター初期化のタイミングを考えて同じ処理に挑戦
でした。

プログラムは、いろいろな考え方があるので、
楽しいでしょ?
えっ、楽しくない、、、う〜ん、例題のキレがまだイマイチでしたね。

MOD演算子はほかでも使うと思うので、覚えておいて損は無いと思います。

最強ページへの道のりは遠いなぁ〜。

またね(笑)

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

三流プログラマーの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記事 バックナンバー目次]


広告: