CSVさんが勝手に先頭の0を消しやがるので抵抗する

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
そういや稲川さんの怖い話ってちゃんと聞いたことはないなぁ

おまとめ三行

先頭の0が消えてしまうんですよ
0だけに、霊のようにふっと消えてしまうんですよ
おかしいな〜怖いな〜

数字ではなく文字列として「0001」みたいな値を扱うことって、あると思うんです。

でもPHPでその値をCSVなんかに落とし込もうとしますとね、先頭の0が消えてしまうんですよ。ちゃんと「$val = ‘0001’」みたいに書いているのに、いざCSVで確認しますとね、0がね、どこにもいないんですよ。0だけに、霊のようにふっと消えてしまうんですよ。あれ、おかしいな〜怖いな〜って思いながら改めてもう一度確認してみてもね、やっぱりいないんですよね。そこにいるのは「1」だけなんですよね。

たぶん、EXCELでも同じだと思うんですよねぇ。



先頭の0が消えると困っちゃうってときは、「0001」をそのまま入れるんじゃなくて、数式を入力するときのような書き方をすれば良い。「=”0001″」と入力すると、セル上は0が消えずに「0001」となる。

PHPでCSVファイルを作成するときも一緒ですね。

$list = array('="0001"','="0002"','="0003"');

$fp = fopen('sample.csv','w');
fputcsv($fp,$list);

例えばこんな感じですね。これで「0001」「0002」「0003」が入ります。

たいしたことじゃないんだけど、知ってると知らないじゃ結構でかいっすからね。僕も最近までこのこと知らなくて、先頭に0を入れるような数字のみのデータは許可しないってことで妥協してたんですけど、どうしても妥協できない状況に来てしまったので、調べてみたらこんな程度のことで良かったと。こんなことならもっと前に調べときゃ良かった。

こういう、CSVが自動で型を判定して良い感じに直してくれる機能自体は素晴らしいんですが、ときどきありがた迷惑ですよね。分数で「3/5」とか入れると、勝手に日付けに直しちゃうとか。

まあ、もしやと思って試しに「=”3/5″」って書いたら同じように回避できたので、焦るこたぁないです。

$list = array('="0001"','="3/5"','3/5');

$fp = fopen('sample.csv','w');
fputcsv($fp,$list);

これで、それぞれ「0001」「3/5」「3月5日」と入るわけですね。

今回はCSVでしか検証しませんでしたけど、たぶんEXCELも同じやり方でいけると思うので、「おかしいな〜嫌だな〜」って悩んでる方はお試しあれ。

まだコメントはいただけてないみたい……
もしかしたら何か関連しているかも?