Text::CSV_XSのCSVデータ取込でフィールド囲み文字設定時の注意点

perlプログラムでCSV取込時に便利なモジュール、Text::CSV_XS。
Text::CSV_XSオブジェクト生成後、getlineメソッドを使用して簡単にCSV行を列ごとに分割して読み込んでくれます。
また、区切り文字やフィールド囲み文字も様々な文字を指定できます。

CPANページ
http://search.cpan.org/~hmbrand/Text-CSV_XS-1.04/CSV_XS.pm

区切り文字:quote_charオプション
フィールド囲み文字:escape_charオプション
で、それぞれバイトコード 0x20 (スペース) から 0x7e (チルダ)までの文字を指定できるようです。

実際に区切り文字に「|」記号を設定してみると、上手いこと読み込んでくれません。
(フィールド囲み文字は何も設定せず。)
区切り文字として「|」が認識されてないようです。

英語が苦手なりに頑張ってCPANのページをさらに読むと、escape_charの説明に以下の文章がありました。
「The escape_char defaults to being the literal double-quote mark (“) in other words, the same as the default quote_char.」
「If instead you want to escape the quote_char by doubling it, you will need to change the escape_char to be the same as what you changed the quote_char to.」
何となく、
・escape_charはデフォルトでは(“)でありデフォルトのquote_charと同じ。
・quote_charを変更する場合は、quote_charの変更値と同じ値でescape_charも設定するべし。
といった内容が読み取れます。


区切り文字、フィールド囲み文字両方に「|」を設定すると、無事に「|」区切りのCSVデータを読み取れました。

マニュアルはちゃんと読むべきですね。

 

コメント

タイトルとURLをコピーしました