メモ。
VB.NETでCSVファイルをDataTableに突っ込むとき
特定の列が勝手に数値型として認識されてしまうのを回避する方法。
schema.iniの活用。
取引先からCSVが飛んでくるのでそれを監視してシステムに取り込む際
ある列だけなぜか数値型として認識されてしまうので
その列に文字列が含まれるような値が入っていた時には
値が取得できないという現象にはまった。
全行を見て判断しているのではなく最小の行だけ?判断して
勝手に数値型として処理されているのかな、と思い…
ダミーのCSVを作って…
SELECT * FROM [ダミー.csv]
UNION ALL
SELECT * FROM [取り込み.csv]
としてみたものの変化なし。 何が基準になってるのか分からない。。
もういっそのこと1件1件データ取り出して処理しようと思ったけど
そんな時に見つけたのがschema.ini
取り込むときのフォルダにschema.iniを作っておいて、
Datatableへ格納すると… ちゃんと型を意識してくれてた!
iniの中身はこんな感じ
—- schema.ini ————————————————-
[取り込むCSV.csv]
ColNameHeader=True →ヘッダの有無
Format=CSVDelimited →カンマ区切り。
MaxScanRows=0 →何行目まで取り込むか。 0だと全部。 省略すると25件?
CharacterSet=932 →shift-jis
Col1=注文番号 char width 15
Col2=注文日 Date width 9
Col3=数量 integer
:
———————————————————————–
こんな感じ。
CSVと同じところにしておくのと ファイル名を指定しないといけない点があるので
取り込み時にファイルをリネームする処理を追加したりしたけど…
とりあえずできた。
とりあえず動けばいいw
とっても助かりました。 知ってて当たり前的なものかもしれないけど…。 まだまだ知らないことが多すぎる(゜-゜)
コメント