[PHP-users 17863]Re: カンマ入りデータをCSVで出力するには
airwhite
airwhite @ airwhite.net
2003年 9月 13日 (土) 01:08:33 JST
藤本さま、こんばんは。
airwhiteです。
もう自力で解決されているかもしれませんが・・・
csvデータ形式の仕様は、調べてみましたか?
古い(由緒正しい?)csvの仕様では、確か次のようだったと思います。
数字の場合は、ダブルクォテーション(")無しでカンマ(,)で区切り
文字列の場合は、ダブルクォテーション(")で囲みカンマ(,)で区切る。
しかし、エクセルでは、その辺のルールが少し変わっていて
数字だろうが文字列だろうがダブルクォテーション(")無しでカンマ(,)で区切る。
ただし、文字列に(,)がある場合に限りダブルクォテーション(")で囲む。
になっています(MS Excel 2002でCSV出力して調べました)。
古いCSVの形式でもエクセルで問題なく読み込めます。
もういないと思いますがロータスを使っている人は古いCSV形式でないと読めませ
ん。
前置きが長くなって恐縮ですが
カンマのあるデータはダブルクォテーション(")で囲みましょう。
できたら数字以外のデータもダブルクォテーション(")で囲んであげましょう。
ということです。
最初は、データベースから取ってきたデータをCSV形式で吐き出す方法が
わからないのかと思いましたが、よく読むとそうではなかったのですね。
データベースから取得した配列に入ったデータをcsvで吐き出す場合
$csv = implode(",",$db_data); // $db_data は配列。joinでも同じ。
で、カンマ付文字列に変換できますが、カンマを含むデータを考慮してません。
$data = array ( );
foreach ($db_data as $k=>$v) {
if (preg_match("/[,]/",$d)) {
$data[$k] = '"' . $v . '"';
} else {
$data[$k] = $v;
}
}
$csv = implode(",",$data);
のような感じでカンマを含むcsvデータが作れそうですね。
デバックしてませんけど・・・
PHP-users メーリングリストの案内