民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS Access からの CSV ファイルを CSV_XS モジュールで処理できない件

<<   作成日時 : 2008/09/01 00:24   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

Perl と CSV_XS モジュールがあれば、CSV なんて楽勝だと、思っていた。そして、手元の MS Access からテーブルを CSV 形式で書き出し、Perl で書式を整えて、MySQL に移行するという作業にとりかかった。すると、お約束で、変な落とし穴にはまった。

CSV_XS の parse で、どうしてもエラーが出てしまうのだ。 CSV_XS では RFC4180 形式の CSV を取り扱うことができる。この RFC4180 というのが、実は、MS の Excel なり Access が吐き出す CSV を元に規格化されているのだ。話の順を追えば、Access の吐き出す CSV を CSV_XS で扱えて当然と思えるのだが、実際には1行も parse できないという状況に陥ってしまった。

数値のフィールドはそのままで、文字列フィールドはちゃんとダブルクォーテーションで括るように設定してエクスポートしている。なのになぜ?

答えは、日付フィールドにあった。Access では特別な設定をしないと、日付フィールドを、yyyy/mm/dd hh:mm 形式でエクスポートするのだが、これがダブルクォーテーションで括られていなかった。CSV_XS モジュールはテキスト型(ダブルクォーテーションで括られている)と、数値型(ダブルクォーテーションで括られていない)しか区別しないので、ダブルクォーテーションで括られていないにも関わらず、数値型でもない、この日付フィールドが解釈できず、エラーになっていたのだ。

CSV_XS のオプション項目をいじっても、特定のフィールドだけダブルクォーテーションを解釈しないようにするということはできないようだ。

仕方がないので、注意しながら split 関数で行を分割して読み込んで処理するようにした。
Perl で作業して正解だった。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Access からの CSV ファイルを CSV_XS モジュールで処理できない件 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる