CSVの行数と件数が合わないとき:改行を消す前に確認すること

「CSVは6行なのに、読み込むと3件しかない」。この違いだけでは、データが消えたとは判断できません。見出しも1行に数えられますし、連絡メモなどの値の中に改行が入ることもあります。

まずは、テキストの行数、CSVとして区切ったデータ件数、システムに登録できた件数を分けて確認します。次の例は説明用に作った架空の受付データです。

6行に見える受付データを数える

受付ID,担当,連絡メモ
R-301,東,"午前受取
入口は北側"
R-302,西,変更なし
R-303,南,"箱は2個
重ね置き不可"

このCSVには、受付が3件あります。R-301とR-303の連絡メモはそれぞれ2行ですが、引用符で囲まれた一つの値です。

数える対象この例の結果意味
テキスト上の文字がある行6行画面の自動折り返しは含めない
見出しを含むCSVのレコード4件見出し1件+受付3件
見出しを除いた受付データ3件R-301、R-302、R-303

6から見出しの1を引くだけでは5になり、受付件数と一致しません。値の中の2つの改行も、テキスト上では行の区切りになるためです。

RFC 4180は、改行・カンマ・引用符を含む値を二重引用符で囲む一般的なCSV形式を説明しています。ただし、全サービスに同じ動作を義務付ける規格ではありません。RFC 4180の形式説明

Windowsで元ファイルを変更せずに数える

文字コードがUTF-8、区切りがカンマ、先頭のレコードが列名であると分かっているファイルでは、PowerShellで次のように読み込めます。パスは確認したいファイルに置き換えてください。

$records = @(Import-Csv -LiteralPath 'C:\作業\受付.csv' -Encoding utf8)
$records.Count
$records | Select-Object 受付ID, 担当

上の架空例なら件数は3で、IDはR-301、R-302、R-303です。このコマンドにファイルを書き換える処理はありません。@(...) は読み取り結果を配列として受けるために付けています。Import-Csvは列名を使って各データをオブジェクトに変換します。Microsoft公式のImport-Csv説明

この例には重複・空欄の列名や空レコードを含めていません。見出しがないファイルにそのまま使うと、最初のデータを列名として扱ってしまいます。文字化け、想定外の列、IDの欠落があれば件数を採用する前に形式を確認してください。大きなファイルでは読み取り結果の保持にメモリを使います。

また、読み取れた件数は受け取り先システムの登録成功件数ではありません。必須項目の不足や既存IDとの重複で受け付けられなかったデータがないか、取り込み結果も照合します。

件数を合わせるためだけに改行を削除しない

今回の3件を5件に見せるために引用符や改行を消すと、連絡メモの意味やデータの境界を壊すおそれがあります。元ファイルを残し、件数の定義を先に合わせます。

確認する順序は次のとおりです。

  1. 見出しの扱い:受け渡し時の「3件」に列名を含めるか。
  2. 値の中の改行:受け取り先が、引用符で囲んだ改行を扱えるか。
  3. 受付IDと内容:3つのIDが残り、それぞれの連絡メモが別の受付へ移っていないか。
  4. 取り込み結果:読み取り件数と登録・更新・除外・エラー件数の関係が説明できるか。

セル内改行を受け付けないシステムに渡す場合は、作成元で一行の表現に変更できるか確認します。単純な全文置換でレコード間の改行まで消さず、変更方法を受け取り先と合わせた別ファイルを作ります。どのファイルにも一律に改行削除が必要という意味ではありません。

件数の確認を引き継ぐメモ

今回の例なら、次のように残すと、何を数えたかを説明できます。

対象:架空の受付データ
形式:UTF-8、カンマ区切り、先頭レコードは列名
データ件数:3件(列名を除く)
受付ID:R-301、R-302、R-303
連絡メモ内の改行:R-301とR-303に各1か所
元ファイルの変更:なし
受け取り先への登録結果:未確認

関連記事:CSV提出前に確認メモを残す / CSVの差分を行順と比較キーから確認する

制作にはAIを使用しています。架空例はPowerShell 7.6.5の読み取りと別のCSV処理で件数・ID・メモを照合しました。Excelの画面操作や、特定の業務システムへの取り込みは検証していません。

コメント

このブログの人気の投稿

CSVの差分比較で「全部変わった」と出たら:行順・比較キー・重複を確認する

CSVの商品コード「00123」を守る:先頭ゼロが消えた場所を切り分ける

CSVを提出する前に残す確認メモ:件数・変更点・未確認を短く記録する