00123 が 123 になる。
CSVではよくある事故だが、CSVそのものが勝手に0を消しているとは限らない。開いたソフトが値を数値だと判断して表示を変えている場合がある。
先頭0が意味を持つデータ
次のような値は、見た目が数字でも計算する数値ではない。
- 郵便番号
- 電話番号
- 会員番号
- 商品コード
- 社員番号
- 外部システムID
これらは「123」と「00123」が別物になりうる。
CSVは型情報をほとんど持たない
一般的なCSVは、セルに「これは文字列型」「これは整数型」といった豊富な型情報を持たない。そのため読み込むアプリが値を推測する。
00123 を整数だと推測すれば、表示時に 123 になることがある。
安全な考え方
先頭0が必要な列は、識別子として扱う。計算しない値を数値扱いしないことが基本だ。
表計算ソフトへ読み込むときも、対象列を文字列として読み込める方法を使う。単純にCSVをダブルクリックして開くより、インポート機能で列の扱いを確認しながら読み込むほうが安全な場合がある。
すでに0が消えた場合
元CSVをテキストとして確認する。
元CSVに 00123 が残っているなら、表示側の変換である可能性が高い。元CSV自体が 123 になっているなら、前工程で既に情報が失われている。
この違いを確認せず、桁数だけ見て0を付け足すのは危険だ。商品コードなどでは、本来の値を誤生成する可能性がある。
テストデータで確認する
本番データの前に、00123、00001、0123456789、001-A のような値を含む小さなCSVを作る。
読み込み後、書き出し後、インポート先の3地点で値が維持されるか確認する。
日付も同様で、1-2 のような文字列が日付として解釈されるなど、アプリ側の型推測で値が変わることがある。
関連: CSVインポート前チェックリスト
識別子は数字に見えても数値とは限らない。ここを分けるだけで、CSVの静かな破損をかなり減らせる。