[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.010 テキストファイルからデータを読む

テキストファイルからデータを読む



本文(発行内容)


<テキストファイルからデータを読む>

こんにちは、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.一行読み込み .ReadLine
*/

いつものサンプル先出しから行きます。
---
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>.ReadLine テキストファイルから1行データを読み込む</title>
</head>
<body>
<h2>.ReadLine テキストファイルから1行データを読み込む</h2>
test010-1.asp<br>
<hr>

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

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

'*3ファイルからデータを一行を読む
strDATA = ts.ReadLine 

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

'*5読み込んだデータを表示します(strDATA)
Response.Write strDATA

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

ポイントは、
'*2 test008.txt を読取専用モードで開く
Set ts = objFS.OpenTextFile(Server.MapPath("test008.txt"), 1, True)
↑ここで、読み取りモードの1でテキストファイルを開きます

次に、
'*3ファイルからデータを一行を読む
strDATA = ts.ReadLine 
の.ReadLineでデータを一行読み込み、
変数strDATAに代入してます。

その変数を単純に、Response.Writeで表示しただけです。

http://www.ken3.org/cgi-bin/test/test010-1.asp
のサンプルを実行すると、
一行目の
2002/12/05 8:11:04 , 満足 
が無事に表示されます。



へぇ〜、だから何?
そんな一行読んでも、ツマラナイし、使えないジャン。

そうですよね。
で、次に出てくるのが、
ファイルの最後までデータを表示ですよね。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

/*
 * 3..AtEndOfStream でファイルの終端をチェックする
*/

先頭行の読み込みは、無事に出来ました。
今度は、ファイルの最後までデータを読みたいので、
ループを使って、ファイルを最後まで読んでみたいと思います。

さて、ファイルが最後か?判断は?どうしましょうかねぇ。。
人間はスゴイね、目で上から読んで行って、最後がわかるんだもん。
まぁ、そんなくだらないこと言ってないで、

.AtEndOfStream
ってのがあって、
ファイルの終わりに達すると、Trueになる(Trueを返す)
逆に、ファイルの終わりじゃ無い時は、
Falseなので、
次のようなループを作ってみました。
---
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>.AtEndOfStream でファイルの終端をチェックする</title>
</head>
<body>
<h2>.AtEndOfStream でファイルの終端をチェックする</h2>
test010-2.asp<br>
<hr>

<%
' 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  '使ったファイルは閉じようよ

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

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

ポイントのループの作りは、
Do While ts.AtEndOfStream = False  '*6ファイルの終端になってない間ループ
で、
ts.AtEndOfStream が False の間、ループを実行します。

    strDATA = ts.ReadLine   'ファイルからデータを一行を読む
    Response.Write strDATA  '読み込んだデータを表示
上2行で、読み込み、表示をやってます。
もちろん、Response.Write ts.ReadLine と変数経由じゃなくてもOKです。

    Response.Write "<BR>"   '改行のタグを入れる
これが無いと(笑)、改行されてデータが表示されません(初めしくじりました私)

Loop  
↑ループの先頭に戻ります。

/*
 * 4..ReadAll で ファイルを全て読む
*/

あと、読み込みのメソッドで、
.ReadAll
ってのがあって、
ファイルを一度に全て読む
そんなこともできます。

お約束の注意事項では、
メモリを一度に消費するので、
大きなファイルを読み込むのはやめましょうかな。

三流君の前置きはいいから、使い方は?簡単なのかよ?
そっちのほうが知りたいよ。

では、下記サンプルです。
---
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>.ReadAll で ファイルを全て読む</title>
</head>
<body>
<h2>.ReadAll で ファイルを全て読む</h2>
test010-3.asp<br>
<hr>

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

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

strDATA = ts.ReadAll '*7 .ReadAllでファイルを全て変数へ

Response.Write "<PRE>"   '<PRE>のタグでそのまま表示する
Response.Write strDATA   '読み込んだ全てのデータを表示
Response.Write "</PRE>"  '<PRE>タグ終了

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

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

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

使い方は、簡単で、
strDATA = ts.ReadAll '*7 .ReadAllでファイルを全て変数へ
みたいにすると、ファイルのデータを全て読み込んで変数に代入されます。

短いファイルの時は、使ってみると、少し楽できるかもしれません。

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

今回は、ファイルからの読み込み処理で、
.ReadLine       一行読み込み
.AtEndOfStream  ファイルの終端チェック
.ReadAll        一度に全データを読み込む
を使用してみました。

まぁなんとなく、わかったような、わからなかったような。
まだまだ、道のりは遠いなぁ〜

またね(笑)

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

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


広告: