繁體中文

資料與電子表格 · CSV 更清理

CSV 轉義方言:雙引號、反斜線和資料庫匯出

· 背景

csv 解析 互通性

雙引號 CSV 路徑成功,而反斜線轉義仍保留文字文字
原始 ToolAcre 向量圖

RFC 4180 表示雙引號;有些資料庫工具使用反斜線匯出。這篇文章解釋了流行的轉義約定、每個約定的來源,以及為什麼在一種方言中有效的檔案在另一種方言中會中斷。

電子表格讀取時帶有雜散反斜杠的資料庫匯出 — 兩個逃避的傳統在一個檔案中發生衝突

匯出可以包含反斜線後跟引號,因為它的產生器遵循程式語言樣式約定,而面向電子表格的解析器需要雙引號。將一種方言餵給另一種方言並不會產生中立的妥協。它會變更引用狀態開啟和關閉的位置或在資料中留下轉義字元。

ToolAcre 支援一項明確的規則:欄位可以用雙引號括起來,內部引號由兩個引號表示。反斜線沒有轉義作用。在裝載之前識別合約比要求清理工猜測生產商想要使用哪個標點符號更安全。

RFC 約定 — 用雙引號括起來並將任何內部引號加倍,根本沒有轉義字符

對於 `She said "hello", then left` 之類的值,RFC 樣式 CSV 包圍該欄位並寫入兩次內部標記。分隔符號保持在引號狀態內,每個加倍的對返回一個文字引號。序列化反向應用相同的轉換。

當欄位包含目前分隔符號、引號、LF、CR 或周圍空格時,或每當選擇引用每個欄位時,欄位都會被引用。沒有單獨的轉義字元。這個小語法針對分隔符號、嵌入記錄結尾和引號對進行了測試。

C 傳統 — 從程式語言和一些資料庫載入器繼承的反斜線轉義引號、換行符和分隔符

某些來源系統可以定義反斜線約定,但 ToolAcre 沒有針對它們的開關。像任何普通字元一樣,反斜線會附加到目前欄位。然後根據解析器是否處於引用狀態以及是否具有成對引用來解釋後面的引用。

因此,在轉換為雙引號 CSV 之前,應使用為該方言配置的工具來解析反斜線匯出。搜尋和替換是有風險的,因為文字反斜線和轉義序列可能看起來很相似。源語法必須決定哪些是語法。

反斜線轉義是一種不受支援的替代方言,不是 ToolAcre 可以讀取的模式

此工作簿命名了資料庫產品和資料框架庫,但其預設值和可設定模式未記錄在此儲存庫中。本文並未將方言歸因於任何特定供應商。請查閱工作流程所使用的確切匯出器或載入器檔案。

擷取產生檔案的指令和選項。一個產品可能支持多種模式,因此它的名称本身並不是一種方言。可重複性來自配置以及包含分隔符號、引號、換行符和反斜線邊緣情況的範例。

特定資料庫和庫預設值需要自己的文件,此處未宣告

在此解析器下,`"a \"quote\"",b` 並不意味著 C 風格讀者可能期望的含義,因為斜杠保留在文字中,而引號控制 CSV 狀態。相反,带引号的欄位內的双對將變成一個引号而不是两個文字字符。

不匹配可能會觸發移位列或未閉合引號警告,或者可能會解析為看起來錯誤的字串而沒有結構錯誤。預覽代表性行並將它們與生產者進行比較。僅語法成功並不能證明轉義語意匹配。

根據 ToolAcre 规則,反斜杠保持原义,双引号是唯一的引号轉义

將包含逗号和引号的一個單元格寫入 RFC CSV: `"She said ""hi"", then left"`。 ToolAcre 傳回精確值 `She said "hi", then left`。用反斜線代替內引號,並觀察斜線沒有特殊保護。

比較示範了解析器規則,而不依賴資料庫品牌。正确解析後,下載會一致產生双引号。在不匹配的解析之後,匯出只會標準化錯誤的單元格,因此在信任結果之前解析來源方言。

這不包括什么 - 二进制匯出、固定宽度檔案和完全自定义轉义字符

二进制匯出、固定宽度記錄和自定义轉义字符位于路由之外。报告未關闭的报價並將剩余的輸入用作一個欄位;清理器無法推斷丢失的關闭属于哪里。這種歧義無法用一般方法來修復。

接口也不會自動轉換反斜杠方言。使用明確命名轉義字元的解析器,取得經過驗證的字串表,然後序列化為目標約定。每個語法應該在已知邊界應用一次。

了解兩端的方言 — ToolAcre CSV Cleaner 的引用修復如何標準化欄位以實現標準解析器讀取的一致引用

了解兩個端點。當來源遵循雙引號 CSV 或當另一個解析器已經將不同的方言規範化為經過驗證的單元格時,ToolAcre 是合適的。其輸出提供一致的最小或全欄位引用,並將每個嵌入的引用加倍。

不要將清理後的下載誤認為是方言偵測。自動偵測器選擇分隔符,而不是轉義語法。可靠的傳輸將分隔符號、引用規則、換行策略和編碼一起記錄,然後在生產資料移動之前測試對抗樣本。