[三流君] −−> [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 を見てください。

/* * 5.終わりの挨拶 </HTML> */

今回は、 ADOでCSVファイルと接続してみました。 ヤバイ、質問は、CSVファイルのデータ削除方法だった。 すぐに調べないと・・・ 違う方法があるかもしれないけど、 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーの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記事 バックナンバー目次]


広告: