<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でした。
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
[三流君(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記事 バックナンバー目次]