[三流君] −−>
[ASPで遊ぶ、失敗する] −−>
[バックナンバー一覧]
−−> No.080 Microsoft Text Driver (*.txt; *.csv) で接続してみた
Microsoft Text Driver (*.txt; *.csv) で接続してみた
本文(発行内容)
<Microsoft Text Driver (*.txt; *.csv) で接続してみた>
こんにちは、三流プログラマーのKen3です。
今回は、
Driver={Microsoft Text Driver (*.txt; *.csv)}
を使って、csvファイルと接続してみました。
/*
* 1.今回のキッカケ
*/
csvファイルの中から、指定した行を削除したい。
現在の接続は、
Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & パス & ";"
を使っています。
そんな処理の質問をもらったので、
今回チャレンジしてみたいと思います。
csvファイル内の行を削除かぁ・・・
全部書き出すや読み込みしかやってなくて、考えたことなかったなぁ。
/*
* 2.まずは、csvファイルとの接続テスト処理を作成する
*/
test080.csv と 下記のようなカンマ区切りのファイルを作成しました
ISBN,書名,出版社名略称,価格,発売日
4-8399-0986-5,CPUの創りかた,毎コミ,2800,2003/9/30
4-8399-0997-0,速効!図解 ホームページ・ビルダー7,毎コミ,1280,2003/3/13
4-7980-0455-3,写真・イラスト入りはがきをつくる本,秀和システム,1280,2003/1/30
4-89369-974-1,VBAによるArcGISプログラミングガイド,BNN新社,2500,2003/9/26
4-7561-4198-6,プロジェクトマネジメント 実践の極意,アスキー,3200,2002/12/2
さてと、このcsvファイルと接続して、データを表示してみたいと思います。
ASPからAccess(*.MDB)への接続は、
^^^^^^^^^^^^^^^^^^^^^^
http://www.ken3.org/cgi-bin/group/asp_ado_mdb.asp
に、サンプルのリンクまとめたけど、
Set db=Server.CreateObject("ADODB.Connection")
db.Provider = "Microsoft.Jet.OLEDB.4.0"
db.ConnectionString = Server.MapPath("db026.mdb")
db.open
なんて感じで、簡単にASPからAccessMDBへ接続できました。
ASPからExcel(*.xls)への接続は、
^^^^^^^^^^^^^^^^^^^^^^^
http://www.ken3.org/cgi-bin/group/asp_ado_excel.asp
に、チョコットまとめたけど、
'ADO DB Recordset オブジェクトを作成して、
Set rs=Server.CreateObject("ADODB.Recordset")
'シートに付けた範囲名前をテーブル名に
strSQL = "select * from DATA_RANGE"
'接続文字列で、Microsoft Excel Driver (*.xls)ドライバーを指定
Con = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & _
Server.MapPath("test053.xls") & ";"
'レコードセットを開いてみた
Rs.Open strSQL, Con, 0 '0=adOpenForwardOnly
ASPからカンマ区切り(*.csv)への接続は、
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
これから作成するんだけど(笑)、
書き込みあった質問だと
>Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & パス & ";"
を使用しているみたいなので、簡単に書けるかな。
そんなこと言ってないで、簡単なら、書いてみろよ。
ハイハイ。
Microsoft VBScript 実行時エラー エラー '800a01a8'
オブジェクトがありません。: ''
/cgi-bin/test/test080-1.asp, 行 54
なんて感じで、変数名を間違えたりしながら、簡単に書いてみました(まだ言ってるよ)
(時間かかりましたけど、なんとか、書けました)
ポイントは、
^^^^^^^^^^^^
'ADO DB Recordset オブジェクトを作成する、英文そのままじゃん
Set rs=Server.CreateObject("ADODB.Recordset")
と、レコードセットのオブジェクト作成します。
この段階では、空のワクって感じですね。
'SQLのテーブル名には、ファイル名を指定します。
strSQL = "select * from test080.csv"
レコードセットの元となるSQL文では、
通常テーブル名を書く所、csvのアクセスでは、
ファイル名となります。(test080.csvからSelect*で全項目って感じかなぁ)
^^^^^^^^^^^^^^^^^^^^^
次が一番のポイントの接続情報の作成ですね。
'接続情報の作成 ドライバーの指定と、DBQには、パスのみを指定する
Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & _
Server.MapPath(".") & ";"
'↑MapPathに(".")を私、カレントディレクトリを渡す
ここでは、ドライバーの指定とDBQでディレクトリを指定してます。
この2つ(SQL文と接続情報)を使い、
レコードセットをオープンします。
'接続文字列、SQLを渡して、レコードセットを開く
rs.Open strSQL, Con, 0 '0=adOpenForwardOnly
.Openのメソッドを使い、SQLと接続情報を渡してます。
3番目の0(adOpenForwardOnly)は、
今回、読み込みのテストだったので前方スクロールのカーソルにしました。
※rs.MoveNextしか使っていなくて、戻らないし、追加・変更・削除も無いので
接続文字列を作るだけで、csvファイルへアクセスできたのには少しびっくりしました。
http://www.ken3.org/cgi-bin/test/test080-1.asp
で、下記ソースのテストできます。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>ASP ADO Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=で接続</title>
</head>
<body>
<h1>ASP ADO Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=で接続</h1>
test080-1.asp<br>
ASPからADOを使用してテキストファイル(*.csv)に接続を行う<br>
ファイル名はtest080.csvで、データは,カンマで区切られてます。<br>
<hr>
<%
'ADO DB Recordset オブジェクトを作成する、英文そのままじゃん
Set rs=Server.CreateObject("ADODB.Recordset")
'SQLのテーブル名には、ファイル名を指定します。
strSQL = "select * from test080.csv"
'接続情報の作成 ドライバーの指定と、DBQには、パスのみを指定する
Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & _
Server.MapPath(".") & ";"
'↑MapPathに(".")を私、カレントディレクトリを渡す
Response.Write "使用する接続文字列は<br>"
Response.Write "<STRONG><CODE>" & Con & "</CODE></STRONG><hr>"
'接続文字列、SQLを渡して、レコードセットを開く
rs.Open strSQL, Con, 0 '0=adOpenForwardOnly
'データの表示をテーブルで行う
Response.Write "<TABLE Border='1'>"
'見出しを(フィールド名を)そのまま書き込む
Response.Write "<TR>"
For Each fld_A In rs.Fields 'フィールドのアイテムに対してループ
Response.Write "<TH>" & fld_A.Name & "</TH>" '←.Nameでフィールド名
Next
Response.Write "</TR>"
'お約束のEOFまでループは(データが無くなるまでループ)、
Do While rs.EOF = False 'レコードセットの.EOFがFalseの間
Response.Write "<TR>" '内容を表示する
For Each fld_A In rs.Fields 'フィールドのアイテムに対してループ
Response.Write "<TD>" & fld_A.Value & "</TD>" '←.Valueでフィールドの値
Next
Response.Write "</TR>"
rs.MoveNext '次のレコードに移動する
Loop
Response.Write "</TABLE></SAMP>" 'テーブルは終わりです
'後始末
rs.Close '開いていたレコードセットを閉じる
Set rs = Nothing 'お行儀よくオブジェクトも開放しましょう
%>
<hr>
[<a Href="test080.csv" TARGET="_blank">test080.csvを開く</a>]<br>
</body>
</html>
/*
* 3.好奇心で、ソートできるか試してみる
*/
なんとか接続がうまく行きました。
strSQL = "select * from test080.csv"
なんて感じで、無条件でデータを取り出してました。
Select文が普通に書けるなら、ソートもできるのかなぁ?
よし、試してみますか。
こんな感じで、
strSQL = "select * from test080.csv Order By 発売日 DESC"
Order By 発売日 DESCで、発売日の降順にしてみました
ISBN,書名,出版社名略称,価格,発売日
4-8399-0986-5,CPUの創りかた,毎コミ,2800,2003/9/30
4-8399-0997-0,速効!図解 ホームページ・ビルダー7,毎コミ,1280,2003/3/13
4-7980-0455-3,写真・イラスト入りはがきをつくる本,秀和システム,1280,2003/1/30
4-89369-974-1,VBAによるArcGISプログラミングガイド,BNN新社,2500,2003/9/26
4-7561-4198-6,プロジェクトマネジメント 実践の極意,アスキー,3200,2002/12/2
・
・
・
のデータを無事にソートすることができるかなぁ?
テスト結果は、
http://www.ken3.org/cgi-bin/test/test080-2.asp
を見てください。
/*
* 4.Count関数で出版社名略称を集計してみた
*/
ISBN,書名,出版社名略称,価格,発売日
4-8399-0986-5,CPUの創りかた,毎コミ,2800,2003/9/30
4-8399-0997-0,速効!図解 ホームページ・ビルダー7,毎コミ,1280,2003/3/13
4-7980-0455-3,写真・イラスト入りはがきをつくる本,秀和システム,1280,2003/1/30
4-89369-974-1,VBAによるArcGISプログラミングガイド,BNN新社,2500,2003/9/26
4-7561-4198-6,プロジェクトマネジメント 実践の極意,アスキー,3200,2002/12/2
・
・
・
のデータに対して、
出版社名略称でグループ化して、冊数を数えてみました。
CSVファイルにも、ADO接続で、Gorup Byが使えることを確認してみました。
'Group By 出版社名略称でグループ化して冊数を数えてみました
strSQL = "select 出版社名略称, Count(*) AS 冊数 from test080.csv"
strSQL = strSQL & " Group By 出版社名略称"
と、SQL文を発行すると、
なんだぁ普通に使えるみたいですね。
^^^^^^^^^^^^^^^^^^^^
テスト結果は、
http://www.ken3.org/cgi-bin/test/test080-3.asp
を見てください。
-【けんぞう!】---------------------------------------------------------
ASPが利用可能なレンタルサーバーをお探しのアナタ、
http://www.ken3.org/asp/server.html ← けんぞうも使っているサーバーの紹介
『おっIISでbasp21でメール送信、mdbも使えるよ』(三流PG:31歳)
------------------------------------------------------------------------
/*
* 5.終わりの挨拶 </HTML>
*/
今回は、
ADOでCSVファイルと接続してみました。
ヤバイ、質問は、CSVファイルのデータ削除方法だった。
すぐに調べないと・・・
違う方法があるかもしれないけど、
何かの参考となれば幸いです。
ASP、VBScript勉強中の三流プログラマーのKen3でした。
フィードバック
ASP系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告