データとスプレッドシート · CSV クリーナー
CSV 方言のエスケープ: 二重引用符、バックスラッシュ、およびデータベースのエクスポート
· 背景
csv 解析中 相互運用性
RFC 4180 では二重引用符を使用するように規定されています。一部のデータベース ツールでは、代わりにバックスラッシュを使用してエクスポートします。この投稿では、一般に流通しているエスケープ規約、それぞれの由来、およびある方言では有効なファイルが別の方言では壊れる理由について説明します。
スプレッドシートがバックスラッシュを含むデータベース エクスポートを読み取る - 2 つのエスケープ伝統が 1 つのファイル内で衝突する
エクスポートには、バックスラッシュの後に引用符を含めることができます。これは、スプレッドシート指向のパーサーが二重引用符を期待する一方で、そのプロデューサーはプログラミング言語スタイルの規則に従っているためです。ある方言を別の方言にフィードしても、中立的な妥協は生まれません。引用符で囲まれた状態がどこで開閉するか、データ内にエスケープ文字を残すかが変わります。
ToolAcre は 1 つの明確なルールをサポートしています。フィールドは二重引用符で囲むことができ、内側の引用符は 2 つの引用符で表されます。バックスラッシュにはエスケープの役割はありません。ロードする前にそのコントラクトを識別することは、プロデューサーがどの句読点を意図したかをクリーナーに推測させるよりも安全です。
RFC 規約 — エスケープ文字をまったく使用せずに、二重引用符で囲み、内側の引用符を二重にします。
`She said "hello", then left` などの値の場合、RFC スタイルの CSV がフィールドを囲み、内側のマークを 2 回書き込みます。区切り文字は引用符で囲まれた状態内に留まり、二重化された各ペアは 1 つのリテラル引用符を返します。シリアル化では、同じ変換を逆に適用します。
フィールドに現在の区切り文字、引用符、LF、CR、または周囲のスペースが含まれている場合、または [すべてのフィールドを引用符で囲む] が選択されている場合は、フィールドが引用符で囲まれます。個別のエスケープ文字はありません。この小さな文法は、区切り文字、埋め込まれたレコードの終わり、および引用符のペアについてテストされます。
C の伝統 — プログラミング言語と一部のデータベース ローダーから継承されたバックスラッシュでエスケープされた引用符、改行、区切り文字
一部のソース システムではバックスラッシュ規則を定義できますが、ToolAcre にはバックスラッシュ規則を定義できません。バックスラッシュは、通常の文字と同様に、現在のフィールドに追加されます。その後、パーサーが引用符付き状態にあるかどうか、およびペアの引用符があるかどうかに応じて、次の引用符が解釈されます。
したがって、バックスラッシュのエクスポートは、二重引用符 CSV に変換する前に、その方言用に構成されたツールで解析する必要があります。リテラルのバックスラッシュとエスケープされたシーケンスは似ている可能性があるため、検索と置換には危険が伴います。ソース文法はどれが構文であるかを決定する必要があります。
バックスラッシュ エスケープはサポートされていない代替方言であり、ToolAcre が読み取ることができるモードではありません
ワークブックではデータベース製品とデータ フレーム ライブラリに名前が付けられていますが、それらのデフォルトと構成可能なモードはこのリポジトリに文書化されていません。この記事は、方言が特定のベンダーに起因するものではありません。ワークフローで使用される正確なエクスポーターまたはローダーのドキュメントを参照してください。
ファイルを生成したコマンドとオプションをキャプチャします。製品は複数のモードをサポートしている場合があるため、その名前だけでは方言ではありません。再現性は、区切り文字、引用符、改行、およびバックスラッシュのエッジ ケースを含む設定とサンプルから得られます。
特定のデータベースとライブラリのデフォルトには独自のドキュメントが必要であり、ここでは要求されません
このパーサーでは、`"a \"quote\"",b` は C スタイルの読者が期待するものを意味しません。これは、スラッシュがテキスト内に残り、引用符が CSV 状態を制御するためです。逆に、引用符付きフィールド内の二重ペアは、2 つのリテラル文字ではなく 1 つの引用符になります。
不一致により、列がシフトされたり、閉じられていない引用符の警告がトリガーされたり、構造エラーが発生せずに間違った文字列に解析される可能性があります。代表的な行をプレビューし、プロデューサーと比較します。構文上の成功だけでは、エスケープ セマンティクスが一致したことを証明できません。
ToolAcre ルールでは、バックスラッシュはリテラルのままであり、二重引用符が唯一の引用符エスケープです。
カンマと引用符の両方を含む 1 つのセルを RFC CSV: `"She said ""hi"", then left"` として書き込みます。 ToolAcre は正確な値 `She said "hi", then left` を返します。代わりにバックスラッシュを使用して内側の引用符を記述し、スラッシュには特別な保護がないことを確認してください。
この比較は、データベース ブランドに依存しないパーサー ルールを示しています。正しく解析された後、ダウンロードすると常に二重引用符が生成されます。解析が不一致の場合、エクスポートでは間違ったセルが標準化されるだけなので、結果を信頼する前にソースの方言を解決してください。
これでカバーされないもの — バイナリ エクスポート、固定幅ファイル、および完全にカスタムのエスケープ文字
バイナリ エクスポート、固定幅レコード、およびカスタム エスケープ文字はルートの外にあります。閉じられていない引用がレポートされ、残りの入力が 1 つのフィールドとして消費されます。クリーナーは、失われたクローズがどこに属していたのかを推測しません。この曖昧さは一般的に修復することはできません。
また、インターフェイスはバックスラッシュ方言を自動的に変換しません。エスケープ文字を明示的に指定するパーサーを使用し、検証された文字列のテーブルを取得して、ターゲット規則にシリアル化します。各文法は、既知の境界で 1 回適用する必要があります。
両端の方言を知る — ToolAcre CSV Cleaner の引用修復が、標準パーサーが読み取る一貫した引用に向けてフィールドを正規化する方法
両方のエンドポイントを把握します。 ToolAcre は、ソースが二重引用符 CSV に続いている場合、または別のパーサーが別の方言を検証済みのセルにすでに正規化している場合に適しています。その出力では、一貫した最小限の引用符またはすべてのフィールドの引用符が提供され、埋め込まれたすべての引用符が 2 倍になります。
クリーンなダウンロードを方言検出と間違えないでください。自動検出機能はエスケープ文法ではなく区切り文字を選択します。信頼性の高い転送では、区切り記号、引用符ルール、改行ポリシー、およびエンコーディングが一緒に記録され、運用データが移動される前に敵対的サンプルがテストされます。