[三流君] −−>
[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でした。
フィードバック
ASP系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告