schema.iniの効果(CSVファイルをADOで扱う㉙)

CSVファイルをADOで扱う連載の29回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org

schema.iniでどう変わる?

前回はADOを使ってCSVファイルを作った際に一緒にできたファイルschema.iniの内容についてご紹介しました。

f:id:HiroCom777:20220217214546j:plain

今回は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.csvCSV_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.csvExcelで開くと・・・

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での挙動がどう変わるのか迫ってみたいと思います。お楽しみに!!

hirocom777.hatenadiary.org

CSVファイルをADOで扱う連載記事はコチラからどうぞ