CSV重複行削除ツール|ヘッダー・引用符内改行対応
CSVを入力し、「重複行を削除」を押してください。
このツールでできること
CSVをレコードとセルへ解析し、比較対象内で全セルと列数が同じレコードの2件目以降を削除します。引用符内のカンマや改行を含むCSVにも対応し、残すレコードは最初に現れた順序を保ちます。
使い方
- CSVを入力欄へ貼り付けます。
- 先頭行が見出しなら「先頭行をヘッダーとして扱う」をオンにします。
- 「重複行を削除」を押します。
- 結果を確認し、「結果をコピー」を押します。
入力内容やヘッダー設定を変更すると、変更前の結果は消去されます。「クリア」を押すと入力と結果を消去し、ヘッダー設定をオンへ戻します。
入力例・出力例
ヘッダー設定をオンにして、次のCSVを入力します。
id,name
1,A
2,B
1,A
最初の1,Aを残し、2回目を削除します。
id,name
1,A
2,B
次の例では、"A,B",1は2セル、A,B,1は3セルとして解析されます。
value,count
"A,B",1
A,B,1
"A,B",1
文字の並びが似ていても列数が異なる2レコードは両方残し、解析後の値と列数が同じ3件目だけを削除します。
value,count
"A,B",1
A,B,1
よくある利用場面
- 顧客、商品、ID等のCSVから完全に同じレコードを除くとき
- 引用符内カンマを含むCSVを行文字列ではなくセル単位で比較するとき
- 最初に現れた順序を保った重複なしCSVを作るとき
処理仕様
重複の判定
CSV上の書き方ではなく、解析後のセルの値と列数を比較します。aと"a"はどちらも1セルの文字列aになるため重複ですが、aとa,は列数が異なるため別レコードです。
文字列は厳密に比較します。大文字・小文字、前後空白、全角・半角、Unicodeの構成が異なる値を自動的に同一視しません。数値や日付への型変換、空白削除、文字の正規化も行いません。
ヘッダー設定がオンの場合は先頭レコードを無条件で残し、2件目以降だけで重複を比較します。ヘッダーと同じ内容のデータ行があっても、データ部分で最初に現れたものは残ります。オフの場合は先頭を含む全レコードを比較します。
CSVの解析
区切り文字は半角カンマです。LF・CRLF・CR、空セル、空レコード、引用符で囲んだカンマや実改行、""で表した引用符に対応します。引用符はセルの先頭でだけ開始でき、閉じ引用符の後にはカンマ、改行、または入力末尾だけを置けます。
先頭のBOMは1文字だけ除去します。BOMだけの入力は空入力エラーですが、空白や引用符で表した空セルは有効な入力です。入力末尾の1個のレコード改行は新しい空レコードとして追加せず、改行が連続する場合は途中の空レコードを保持します。
閉じていない引用符などを検出した場合は、該当する物理行付近をエラーとして表示し、途中までの結果は出力しません。空レコード同士も重複判定の対象です。重複削除後に空セル1個のレコードだけが残る場合、結果欄は空に見えますが有効な結果としてコピーできます。
出力の再生成
結果はCSVとして作り直します。カンマ、引用符、CR、LFを含むセルだけを二重引用符で囲み、内部の引用符を""へ変換します。レコード間はLFで結び、末尾に追加のレコード改行を付けません。そのため、入力のBOM、レコード改行の種類、不要な引用符の有無は保持しません。
HTML風の文字列や&などのHTMLエンティティは、HTMLとして解釈・復元しません。バックスラッシュと英字のnからなる文字列\nも実改行へ変換しません。
非常に大きな入力で利用できる量と処理速度は、端末とブラウザの性能に依存します。
入力データについて
入力したCSVは外部ライブラリを使わずブラウザ内で処理され、ToolRollのサーバーや外部サービスへ送信されません。Cookie、Web Storage、IndexedDB等へ入力や結果を保存しません。「結果をコピー」を押したときだけ、表示中の結果をクリップボードへ書き込みます。