分隔符號分隔值
分隔符號分隔值 (DSV) 是一種儲存二維文字資料陣列的方式,透過特定的分隔符號字元來分隔每一列的欄位 (值)。通常,這種資料就像資料庫表格一樣,每一列包含關於不同項目 (例如書籍或公司) 的資訊,而每個欄位則儲存關於該項目的資訊 (例如標題或名稱)。
分隔文本檔案是一種以 DSV 形式儲存資料的文字檔案。如果資料確實類似資料庫,且存取個別列具有意義,那麼這樣的檔案可以被歸類為平面檔案資料庫。
由於 DSV 普遍受到資料庫和試算表軟體的支援,因此常被用於資料交換。
文字資料的另一種常用替代方案是固定寬度格式,其中每一欄都有相同數量的字元,這限制了每個欄位值的長度。相對地,DSV 支援任意長度的欄位值。
格式
DSV 是一種資料格式的分類,而非一種特定的格式。為了實用,必須建立一個慣例來定義精確的格式。一般來說,如果一個格式是由一行行以分隔符號分隔的值所組成 (其中行與行之間以換行符號分隔),它就會被歸類為 DSV。第一列有時是一個包含欄位名稱的特殊記錄。
任何字元都可以用來分隔欄位值,較常用的包括逗號、定位字元 (Tab)、冒號、垂直線 (又稱管道符號) 和空格。ASCII 和 Unicode 包含旨在用作分隔符號的控制字元:檔案分隔符、群組分隔符、記錄分隔符和單元分隔符。這些字元在 DSV 資料中的使用相對不普遍,不過 MARC 21 書目資料格式是個例外。
DSV 的兩個常用子類別——逗號分隔值 (CSV) 和定位字元分隔值 (TSV)——受到許多軟體套件的支援,包括許多試算表和統計應用程式。有些軟體甚至可以在使用者未描述格式 (例如要使用哪個字元作為分隔符號) 的情況下匯入這類資料。即使這類應用程式可能更直接地支援功能更強大且可能是專有的內部資料模型 (例如 accdb 或 xlsx),它們仍可以將 DSV 資料對應到其內部資料模型。
挑戰
DSV 資料的一個持續挑戰是確保有效的資料結構。特別是,如果每一行的欄位數量不同,匯入到資料庫等系統時可能會失敗。
DSV 的一個特殊挑戰是分隔符號衝突——當分隔符號字元被用在欄位值中,且沒有相應的處理機制時會發生的情況。該字元會被解讀為分隔符號,將一個單一的邏輯值分割成兩個。有些 DSV 慣例提供了避免衝突的方法,而有些則沒有。
一個避免分隔符號衝突的常用方法是用雙引號將欄位值包圍起來。某個慣例可能要求所有值都這麼做,或者這也可能是選擇性的,只用於那些本身包含分隔符號字元的值。
如果慣例不允許在欄位值中使用分隔符號,就可以避免衝突;如果慣例沒有提供避免衝突的方法,這便是其默示。使用一個相對不常見的字元 (例如波浪號) 可以限制對可能欄位值的影響。但是,即使一個字元看起來不常用,它在實務上仍可能被使用,從而導致處理錯誤。
範例
在以下範例中,欄位由逗號分隔。
"Date","Pupil","Grade" "25 May","Bloggs, Fred","C" "25 May","Doe, Jane","B" "15 July","Bloggs, Fred","A" "15 April","Muniz, Alvin ""Hank""","A"
每個欄位值都用雙引號括起來,這樣欄位值就可以包含逗號。在 "Bloggs, Fred" 中的逗號不是值的分隔符號,因為該文字被雙引號所包圍。有些格式允許透過這種機制在值中包含換行符號。
此範例的格式允許在值中嵌入雙引號,方法是使用兩個連續的雙引號,其中第一個作為跳脫字元,使第二個被解讀為雙引號本身,而非欄位的開始或結束。值 "Muniz, Alvin ""Hank""" 會被解讀為 Muniz, Alvin "Hank"。
參見
註釋與參考資料
延伸閱讀
- (包含用於資料傳輸的分隔 ASCII (.DEL) 和非分隔 ASCII (.ASC) 檔案的檔案描述。)
Category:分隔符號分隔格式