CSVを取り込んだら値が変わった?文字化け・先頭のゼロ・列ずれの基本
CSVは異なるサービスへ表のデータを渡すときに便利ですが、開けたからといって元の値が保たれているとは限りません。文字の読み方、項目の型、列の区切りを分けて見ると、取り込み時の問題を整理できます。
CSVには、表計算ソフトの見た目がそのまま入るわけではない
CSVは、項目をカンマなどで区切って記録するテキスト形式です。セルの色や計算式を含む表計算のブックと、同じ役割ではありません。
RFC 4180の形式説明では、カンマで項目を区切り、先頭行に項目名を置ける形式が記されています。一方で実装の違いもあるため、渡す側と受け取る側の仕様を合わせることが出発点になります。
たとえば「顧客番号、会社名、備考」という表を取り込む場面を考えてみましょう。列の順序が違っても、自動で意味を判断して正しい項目へ入るとは限りません。取り込み画面で、元の列と保存先の項目を一つずつ対応付けると、値が別の項目へ入る誤りに気付けます。
文字化けと、数字の変化は別の問題
文字化けは、保存時と読み取り時で文字コードの解釈が合わないときに起こります。文字コードとは、文字をデータとして表すための規則です。ファイル名の末尾が同じ「.csv」でも、それだけでは規則を特定できません。
一方、架空の会員番号「00127」が「127」になるのは、数値として解釈された可能性があります。日本語が正しく表示されても、この変換は起こり得ます。
Microsoftの先頭のゼロに関する案内は、Excelで取り込む列をテキストとして扱う方法を説明しています。番号や郵便番号のように計算しない識別情報は、文字列として保持する必要があるかを先に考えるとよいでしょう。
すでに失われた桁は、表示形式を変えるだけでは元どおりになりません。 元ファイルを残し、変換前後を比べられる状態で作業する理由はここにあります。
備考のカンマや改行で、列の数が変わることがある
備考欄にカンマが入っていると、それを列の区切りと区別する必要があります。RFC 4180では、カンマ・改行・二重引用符を含む項目を二重引用符で囲み、項目内の二重引用符を重ねて表す方法が示されています。
この処理を手作業の文字置換で済ませると、必要な句読点や改行まで失うおそれがあります。利用するサービスのCSV出力機能と取り込み仕様を組み合わせ、問題が出る行を小さく切り出して確認するほうが原因を追いやすくなります。
次は、取り込み用のサンプルに含めたい値の例です。実際の顧客データを使わなくても、説明用の値で確かめられます。
表が見切れる場合は横にスクロールできます
サンプルに含めるもの | 確かめたいこと |
|---|---|
先頭がゼロの番号 | 桁が失われず、識別情報として残るか |
日本語の名称 | 文字コードが一致しているか |
カンマや改行のある備考 | 一つの項目として取り込めるか |
空欄と数値のゼロ | 未入力とゼロを区別できるか |
取り込み件数だけでなく、値と更新対象を見る
「100件成功」と表示されても、100件の内容が正しいとは限りません。確認用の少量データで、保存先の画面から番号・名称・備考を読み直すと、取り込み結果まで確かめられます。
同じファイルを再度取り込んだとき、新規行が増えるのか、既存行を更新するのかもサービスごとに違います。更新に使う識別子と、空欄が既存の値を消すかどうかを、実データの一括処理前に確認しておくと安心です。
まとめ
CSVでは、文字コード、値の型、区切りの解釈を分けて確認することが役立ちます。元ファイルを残し、特徴の異なる少量の値で取り込みと再読み取りを試してから、対象を広げてみてください。
データを渡す項目と意味の整理は、API連携の基本でも扱っています。
