目次を開く
見た目がほぼ同じ2行なのに、片方だけ「列数が合わない」と言われる。その原因が行末のカンマ1個ということがあります。
id,name,email
1,Sato,[email protected]
2,Tanaka,[email protected],
2行目は最後のカンマによって、空の4列目があるように解釈されます。
ヘッダーの列数と各行を比べる
ヘッダーが3列なら、各データ行も3フィールドを基本にします。RFC 4180でも、各レコードは同じ数のフィールドを持ち、最後のフィールドの後ろにカンマを置かない形が示されています。
表計算画面では見落としやすい
空の最終列はExcelやスプレッドシートでは存在感が薄く、テキストで見て初めて分かることがあります。
一部行だけなら機械検査する
数万行から末尾カンマを目視で探すより、各行のフィールド数をパーサーで比較します。単純な文字数ではなく、引用符内のカンマを考慮するCSVパーサーを使います。
CSV Preflightでも列数不一致を事前に検出できます。
本番投入前の最終チェック
問題行だけ直して終わらず、ヘッダーから最終行まで列数の分布を確認します。末尾カンマ以外に、引用符崩れや値内カンマで列が増えている行も同じ検査で見つけられます。
- ヘッダー列数を数えた
- 全行のフィールド数を比較した
- 行末カンマを確認した
- 引用符内カンマを区別した
- 原本を残した
1行の見た目ではなく、全レコードの列数が同じかで確認すると再発しにくくなります。
修正後は「空列が消えただけ」か確認する
末尾カンマを削った後は、問題行の最後の実データまで削っていないかを確認します。修正前後で行数を比較し、代表行をCSVパーサーで読み直し、最終フィールドの値が保たれていることをREADBACKします。大量ファイルなら列数の分布を集計し、ヘッダーと異なる行が0件になったところまで確認すると、別原因の列ずれも同時に拾えます。