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公式のImp...