日本語

データとスプレッドシート · CSV クリーナー

CSV 区切り文字検出の仕組み: カンマ、セミコロン、タブ、パイプ

· 仕組み

csv データクリーニング ファイル形式

セミコロンで区切られた行が、正しく分離された 3 つのテーブル列になる
オリジナル ToolAcre ベクトル イラスト

CSV ファイルにはフィールドを区切る文字が記載されていないため、ソフトウェアは推測する必要があります。この投稿では、区切り文字スニッフィングがどのように機能するか、トリッキーなファイルで失敗する理由、および区切り文字を明示的にする方法について説明します。

1 つの長い列として開くファイル — 区切り文字が CSV のどこにも保存されない理由

データ アナリストが .csv エクスポートを開くと、各行に 1 つの長いフィールドが表示されます。拡張子は、どの区切り文字が使用されたかを読者に伝えず、通常、ファイルには区切り文字宣言がありません。カンマを想定しているアプリケーションは、name;city;notes などのセミコロンで区切られたヘッダーを単一の列として読み取ります。値を変更する前に、どの文字が実際にフィールドを分割しているのか、またインポーターがその推測を上書きする方法があるかどうかを確認してください。

サポートされている 4 つの候補: カンマ、セミコロン、タブ、パイプ

ToolAcre は、カンマ、セミコロン、タブ、パイプを候補として考慮します。セミコロンは、コンマがすでに小数点の区切り文字として使用されている場合によく使用され、タブは単純なエクスポートでの句読点の衝突を回避し、パイプはログまたはデータベース ダンプを区切ることがあります。ツールの自動選択にはスペースは含まれていません。名前や自由記述セルにはスペースが含まれることがよくあります。サンプルテキストに頻繁に出現するという理由だけで候補を追加しないでください。セパレータは行を一貫したフィールドに分割する必要があります。

スニッフィングの仕組み — 行ごとに候補文字をカウントし、行全体で一貫したフィールド数が得られる文字を優先します。

この実装では、先頭の UTF-8 byte-order マークが削除され、各候補で最大 10 行のサンプルが解析されます。これらの行の幅を記録し、少なくとも 2 列を生成しない候補は拒否されます。行全体でより多くの列を一貫して生成すると、候補のスコアは高くなります。幅が一致しないと、スコアで 2 回ペナルティが課されます。重要なのは、解析では引用符で囲まれたフィールドが観察されるため、引用符で囲まれたアドレス内のカンマはフィールド境界としてカウントされません。これは単純な文字カウントとは異なり、乱雑なアドレス列が検出を無効にする必要がない理由です。

スニッフィングが失敗する場所 — カンマでいっぱいのフリーテキスト列、単一列ファイル、および真の区切り文字が隠されている引用符で囲まれたフィールド

間違いのない推測はありません。非常に短いファイルには証拠がほとんどなく、純粋な 1 列の CSV には 2 つに分割される候補がありません。また、引用符の形式が間違っていると、複数の候補の解析が不規則に見える可能性があります。区切り文字で埋められたフリーテキスト列は、引用符が壊れている場合に実際の区切り文字と競合する可能性があります。行全体に混在する区切り記号は、単一のきれいな CSV 言語ではありません。このツールは解析警告を報告し、手動による区切り文字の選択を明らかにします。上流のエクスポート規約を知っているユーザーは、ヒューリスティックが仕様であるかのように振る舞うのではなく、推論された選択をオーバーライドできます。

実用的な例 — アドレス内にカンマを使用してセミコロンで区切ってエクスポートし、素朴なカウントが間違った文字を選択する理由を示しています

ヘッダー名;city;note と行 Ada;Paris;「駅の近くの 10 時に集合」という小さなサンプルを試してください。注記には特に複数の行にわたって句読点が含まれているため、生のカンマをカウントすると、誤ってカンマが優先される可能性があります。セミコロン パーサーは両方の行に 3 つのフィールドを返します。カンマパーサーは同じ長方形構造を提供しません。トリミング、重複排除、またはエクスポートを行う前に、プレビューに名前、都市、メモが別の列として表示されていることを確認します。 1 つのソース行に閉じられていない引用符がある場合、スコアを向上させるために、その行を黙って破棄するのではなく、その行を検査します。

出力区切り文字の選択 - 次にファイルを読み取るプログラムおよびロケールに区切り文字を一致させる

入力セパレータと出力セパレータは異なる決定です。ヨーロッパのセミコロン ファイルをインポートしても、カンマを必要とするプログラム用に RFC スタイルのカンマ区切りテキストをエクスポートする場合があります。正しいライターは、出力区切り文字、埋め込み引用符、または改行を含むフィールドを引用符で囲みます。ダウンロードする前に、受信者が UTF-8 BOM を必要とするかどうかを決定してください。一部のスプレッドシート アプリケーションはエンコーディングを認識するためにエンコーディングを使用しますが、多くのパーサーはエンコーディングを使用しないファイルを必要とします。ブラウザのプレビューだけでなく、ダウンロード先のプログラムでダウンロードされたヘッダーを確認してください。

これでカバーされないもの — 行間に区切り文字が混在するファイル、および区切り文字をまったく使用しない固定幅エクスポート

検出では、途中で区切り文字が変更されたファイルを修復することはできません。また、区切り文字が存在しない固定幅エクスポート内の列を推測することもできません。引用符で囲まれたコンマが住所の一部として意図されているのか、それともデータ入力の間違いなのかはわかりません。意味ではなく、構文に従っています。 CSV クリーナーは、顧客のデータを削除する方法を推測するのではなく、不規則な行を表示し、その値を保持します。プレビューと警告を使用して、元に戻せないクリーニング手順を実行する前にソース システムの問題を診断します。

区切り文字を期待するのではなく明示的にする - ToolAcre CSV Cleaner の区切り文字修復が 1 つの一貫した区切り文字を持つファイルを生成する方法

区切り文字の推測は、証拠に基づいた数行の解析であり、CSV ファイル内に記述された約束ではありません。 CSV Cleaner はブラウザーでローカルに実装し、別の区切り文字を選択して、一貫した 1 つの出力言語を作成できるようにします。インポート ウィザードが来週異なる推測をした場合は、次の読者がそれを再発見する必要がないように、ファイルの横に出力規則を記録してください。