こんにちは、三流プログラマーのKen3です。 今回は、読者2人からヒントをもらった、 schema.iniを使い ADOのCSV接続の自動で決まってしまうデータの型を指定してみました。 いつもの三流的なアプローチなので、実際はアレンジして使ってください。 ※一部でも参考になればいいんだけど・・・/* * 1.今回のキッカケ */
No.080 Microsoft Text Driver (*.txt; *.csv) で接続してみた http://www.ken3.org/asp/backno/asp080.html から >質問なのですがcsvファイルを接続し、データを吸い上げたときに >IPアドレスのように111.222.333.444といった物が111.222333444とな >って上がってきてしまいました。吸い上げた時点で既にそのような形 >式になっていましたのでどうした物かと困っています。掲示板のログ と、質問をもらった。 No.101 ADO CSV接続 勝手に型を決めんなよ・・・ http://www.ken3.org/asp/backno/asp101.html で、いろいろと試行錯誤するも、できなかった・・・ 読者さんから、 schema.ini を使ってみては、調べてみては、 とヒントをもらったのでチャレンジしてみました。/* * 2.schema.iniって何? */
schema.iniって何? まぁ、拡張子がiniなので、何かの設定ファイルなんだろうけど・・・ 読者から教わった [AC97]VBAから Schema.ini ファイルを作成する方法 http://support.microsoft.com/default.aspx?scid=kb;ja;155512&Product=accJPN を見ると、 テキストファイルのデータ型を ファイル単位、フィールド単位で指定するファイルみたいです。 schema.ini は、 [ファイル名] ColNameHeader=True MaxScanRows=0 Coln=ColumnName type [Width #] と言った構成でTXTやCSVと同じディレクトリに保存しておくみたいです。 見つけた参考資料(下記MSの英語だけど、もしかしたら日本語もあるかも) Schema.ini File (Text File Driver) http://msdn.microsoft.com/library/en-us/odbc/htm/odbcjetschema_ini_file.asp こいつを指定すれば、CSVファイルで192.168.0.1も文字として扱ってもらえそうですね/* * 3.実際にschema.iniを作成してみた */
テストで、schema.iniを作成してみたいと思います。 違いをテストしてみたかったので、 test101.csvと中身が一緒のtest102.csvをまず作成しました。 http://www.ken3.org/cgi-bin/test/test102.csv 日付,IP,URL,分数TEST,少数TEST,備考,予備 2004/12/25,192.168.0.1,ken3.org,1/20,1.25,備考の文字,1-2-3 2005-01-08,192.168.0.25,/asp/,1/3,5.10,日付の形式を少し変えた 2005/01/19 17:30,192.168.0.17,vba,2/7,5,時刻を付けた,04-05-06 ↑このファイルのフィールドを全てテキストのサイズ99と指定してみます。 作成したschema.iniファイルは下記のような感じです http://www.ken3.org/cgi-bin/test/schema.ini [test102.csv] ColNameHeader=True Format=CSVDelimited Col1=日付 Char Width 99 Col2=IP Char Width 99 Col3=URL Char Width 99 Col4=分数TEST Char Width 99 Col5=少数TEST Char Width 99 Col6=備考 Char Width 99 Col7=予備 Char Width 99 ↑オイオイ、ホントにこんなんでOKなの? [test102.csv]まず、ファイル名のtest102.csvを[]で囲ってセクション指定かな。 次に、 ColNameHeader=True で、ヘッダーありだよと教えてあげて、 さらに Format=CSVDelimited で、フォーマットはCSVだよ そしたら、あとは、項目単位でデータの型を指定してあげる。 ColNって感じで、n番目を作っていきます。 Col1=日付 Char Width 99 Col2=IP Char Width 99 ・ ・ ・ Col7=予備 Char Width 99 ここでは、全てテキストの99としたけど、 CSVは固定サイズじゃないのでサイズは不要かも。 ※固定長テキストの時など、いろいろと調査をしてみたいですね/* * 4.実行テスト */
schema.iniファイルの指定有りと無しを区別するために、 test101.csv(設定なし) と test102.csv(schema.ini内で設定有り) に接続してテストしてみました。 http://www.ken3.org/cgi-bin/test/test102-1.asp ↑実行テストとソースファイル 結果は、192.168.0.1を文字列として認識、 04-05-06も日付ではなく文字列として無事に認識されました。/* * 5.終わりの挨拶 </HTML> */
今回は、 ADOでCSV接続したときに、 192.168.0.1 が、 192.168 となってしまう件を 読者から教わったschema.iniファイルを作り CSVファイルのフィールド型を指定してみました。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]
まぁ、基本はデータの受け取りかなぁ。
・[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記事 バックナンバー目次]