[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.090 ADO CSVで先頭行にフィールド名が無い時

ADO CSVで先頭行にフィールド名が無い時



本文(発行内容)


<ADO CSVで先頭行にフィールド名が無い時>

こんにちは、三流プログラマーのKen3です。 今回は、 ADOのCSV接続で、先頭行に項目名(フィールド名)が無い時の接続、 そんなお話です。 http://www.ken3.org/cgi-bin/group/asp_ado_csv.asp に、 関連項目ASPでADO CSV接続の他のサンプルもあるので、合わせて見てください。

/* * 1.今回のキッカケ */

質問フォームより、下記の質問をもらいました。 ----- ASPからADO接続出来るなんて知りませんでした。 今回、CSVファイル内を検索してヒットした行をHTML表示する用件があったので、凄く 参考になりました。 1点質問があります。 今回のCSVファイルには1行目にヘッダ情報があるので、条件を指定できましたが、当方 のCSVファイルはヘッダ情報の無いデータのみになってますので、全件検索しか出来ま せんでした。 ヘッダ情報が無いCSVファイルに対して条件追加をした場合の項目名(列名)記述方法を ご存知であればご教示願います。 ----- ご教示かぁ・・・この言葉は嫌いなんだよねぇ〜 と いつもの関係ないことから入って、 自分でもわからなかったので探ってみました。

/* * 2.1行目にヘッダ情報が無いCSVファイル(先頭行にフィールド名無し) */

1行目にヘッダ情報が無いCSVファイルかぁ。 テストデータで下記のデータを作成しました。 test090.csv 9-99999999999,CSVのヘッダーを無くして見た,Ken3,100,2004/1/06 4-8399-0986-5,CPUの創りかた,毎コミ,2800,2003/9/30 4-8399-0997-0,速効!図解 ホームページ・ビルダー7,毎コミ,1280,2003/3/13 ・   ・ ・ 4-8222-0785-4,信頼されるSEの条件,日経BP出版センター,1700,2003/3/13 4-89311-450-6,よくわかる Microsoft Word2002ドリル,FOM出版,1000,2002/4/10 4-407-05082-9,30時間でマスター Word&Excel2002,実教出版,857,2002/3/28 普通に接続すると、勝手に 9-99999999999やCSVのヘッダーを無くして見たをフィールド名にしてくれる(笑) これだとイヤなので(イヤじゃなくて使えないので) Googleで、 Microsoft Text Driver csv ADO をキーワードにしてwebを検索する。 いろいろとでてくるのですが、 http://dbforums.com/arch/212/2003/7/855889 を見ると、 "Driver={{Microsoft Text Driver (*.txt; *.csv)}}; MaxBufferSize=2048; DBQ=C:\\Temp; DriverId=27; Format=TABDELIMITED" or "Driver={{Microsoft Text Driver (*.txt; *.csv)}}; MaxBufferSize=2048; DBQ=C:\\Temp; DriverId=27; Format=Delimited(:)" なんて書いてある。 これ予想だけど、Format=Delimited(:)で区切り記号も指定できそう。 ほかにパラメータないのかなぁ? http://dbforums.com/arch/43/2003/1/582349 には、 mConn.Open "DRIVER={Microsoft Text Driver (*.txt; *.csv)}; DBQ=" & mFilePath & ";Extended Properties='text;HDR=NO';Extensions=asc,csv,tab,txt;Persist Security Info=False" HDR=NO ^^^^^^ おっ、これってヘッダーぽくない? 英語読めないので、続きの探索を打ち切る。 ※ヘッダーをHDR=NOにして、自分でフィールド名を指定したいけど、  そこまで探せなかった(打ち切るなんて書いてるけど、探せなかっただけ(笑)) よし、英語読めないなら、中国語でしょう?(オイオイ) http://www.csdn.net/Develop/article/16%5C16955.shtm oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _           "Data Source=c:\somepath\;" & _           "Extended Properties=""text;HDR=Yes;FMT=Delimited;"";" でも、可能みたいですね。 これを参考にして、下記の接続文字列を作成してみた。 '接続情報の作成 ドライバーの指定と、DBQには、パスのみを指定する Con = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath(".") & ";" & _ "Extended Properties=""text;HDR=No;FMT=Delimited;"";" '↑MapPathに(".")を渡し、カレントディレクトリを渡す 最大のポイントは、 ^^^^^^^^^^^^^^^^^^ "Extended Properties=""text;HDR=No;FMT=Delimited;"";" のパラメータを接続情報に含めたことです。(HDR=Noとしてます) あとは、全てを読むテストのSQL文 'SQLのテーブル名には、ファイル名test090.csvを指定します。 strSQL = "select * from test090.csv" を作成して、 '接続文字列、SQLを渡して、レコードセットを開く rs.Open strSQL, Con, 0 '0=adOpenForwardOnly と、レコードセットを作り、 見出しとデータを下記のような感じで、画面に出してみました。 '見出しを(フィールド名を)そのまま書き込む 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 実際のテストは、 http://www.ken3.org/cgi-bin/test/test090-1.asp で、実行できます。(ソースの全ても見れます。) 実行すると、先頭行をデータとして扱い、 F1,F2と自動でフィールド名を付けてくれてます。

/* * 3.自動で付けられる予定のF1,F2のフィールド名を条件に出来るか? */

おっと、質問は、条件を指定して、検索したかっただよね。 接続文字列は、下記のように作って、 '接続情報の作成 ドライバーの指定と、DBQには、パスのみを指定する Con = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath(".") & ";" & _ "Extended Properties=""text;HDR=No;FMT=Delimited;"";" '↑MapPathに(".")を渡し、カレントディレクトリを渡す SQL文でF1やF2を使用してみます。 データの並びは、 4-8222-0785-4,信頼されるSEの条件,日経BP出版センター,1700,2003/3/13 F1 F2 F3 F4 F5 なので、 F3の出版社=日経BP出版センターのデータを探す 'SQLのテーブル名には、ファイル名test090.csvを指定します。 strSQL = "select * from test090.csv" strSQL = strSQL & " Where F3 = '日経BP出版センター'" '↑F3の出版社の項目を条件にしてデータをWhereで絞り込む と、F3フィールドに対して、条件を付けてみました。 http://www.ken3.org/cgi-bin/test/test090-2.asp で、テスト実行できます(全てのソースもここで見れます)

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

今回は、 先頭行に項目名が無い、そんなCSVファイルに対して、 ADOを使用して、接続してみました。 いろいろと問題点や疑問点を残しつつ、脱線・寄り道の多いメルマガですが、 今後とも、よろしくお願いします。 何かの参考となれば幸いです。 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記事 バックナンバー目次]


広告: