CSVファイルをADOで扱う連載の29回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org
schema.iniでどう変わる?
前回はADOを使ってCSVファイルを作った際に一緒にできたファイルschema.iniの内容についてご紹介しました。
今回はschema.iniが存在することで、ADOの挙動がどう変わるか追求していきたいと思います。今回は久しぶりにCSV_ReaderADOを使います。以下からダウンロードしてください!!
01_ADOでCSVを扱う.zip - Google ドライブ
意図しないデータ変換してしまうファイル再び
この連載の最初のころに、以下の内容のCSVファイル(Test.csv)をExcelで開いてみました。
ID,START,CLASS,NAME,COMMENT 001,2020-3,1-2,Sato,(1) 002,2021-5,2-5,Yamada,(A) 003,2019-12,13-4,Tanaka,
結果は以下の様に滅茶苦茶な内容に変換されてしまっています。
ID | START | CLASS | NAME | COMMENT |
---|---|---|---|---|
1 | Mar-20 | 1月2日 | Sato | -1 |
2 | May-21 | 2月5日 | Yamada | (A) |
3 | Dec-19 | 4月13日 | Tanaka |
これをCSV_ReaderADOで開くと以下の様になりました。
ID | START | CLASS | NAME | COMMENT |
---|---|---|---|---|
1 | 2020-3 | 1-2 | Sato | -1 |
2 | 2021-5 | 2-5 | Yamada | |
3 | 2019-12 | 13-4 | Tanaka |
さっきより良くなりましたが、まだちょっとだけおかしな所があります。結局、ここではすべての項目とデータをダブルクォーテーションで括って文字列型に固定することで正しく読むことに成功しました。
schema.iniで指定する
でも、この方法はCSVファイルに大幅な変更が発生して、手間なってしまいます。ここでschema.iniの登場です。以下の内容でschema.iniファイルを作成してTest.csvファイルと同じフォルダーにおきましょう。すべての列のデータ型を文字列型に定義しました。
[Test.csv] ColNameHeader=True CharacterSet=932 Format=CSVDelimited Col1=ID Char Width 255 Col2=START Char Width 255 Col3=CLASS Char Width 255 Col4=NAME Char Width 255 Col5=COMMENT Char Width 255
この状態でTest.csvをCSV_ReaderADOで開くと・・・
ID | START | CLASS | NAME | COMMENT |
---|---|---|---|---|
001 | 2020-3 | 1-2 | Sato | (1) |
002 | 2021-5 | 2-5 | Yamada | (A) |
003 | 2019-12 | 13-4 | Tanaka |
おお、正しく読み込むことができました。強制的にすべてのデータを文字列型にすることでダブルクォーテーションで括るのと同じ効果が得られるようです。これならCSVファイル自体に手を加えなくても正しく読むことができます。
ちなみにこの状態でTest.csvをExcelで開くと・・・
ID | START | CLASS | NAME | COMMENT |
---|---|---|---|---|
1 | Mar-20 | 1月2日 | Sato | -1 |
2 | May-21 | 2月5日 | Yamada | (A) |
3 | Dec-19 | 4月13日 | Tanaka |
やっぱり正しく読めません。ADOを使って読むのが吉ですね。
変換できないデータはどうなる?
上の例ではすべて文字列データに変換しました。それでは変換ではない場合はどうなるのでしょうか?たとえばschema.iniの内容を以下の様にしてみましょう。すべて整数型に指定しました。
[Test.csv] ColNameHeader=True CharacterSet=932 Format=CSVDelimited Col1=ID Integer Col2=START Integer Col3=CLASS Integer Col4=NAME Integer Col5=COMMENT Integer
この状態でTest.csvを開くと・・・
ID | START | CLASS | NAME | COMMENT |
---|---|---|---|---|
1 | ||||
2 | ||||
3 |
なるほど、変換できないデータはないものにされてしまうんですね。ここは注意が必要ですね。
次回はschema.iniとSQL
いかがですか?schema.iniの性質を上手く使うと色々なことに応用できそうです。次回はschema.iniを使った時にSQLでの挙動がどう変わるのか迫ってみたいと思います。お楽しみに!!