逗號分隔值

逗號分隔值。純文字意味著該檔案是一個字元序列，不含必須像二進位制數字那樣被解讀的資料。CSV檔案由任意數目的記錄組成，記錄間以某種換行符分隔；每條記錄由欄位組成，欄位間的分隔符是其它字元或字串，最常見的是逗號或製表符。通常，所有記錄都有完全相同的欄位序列。CSV檔案的格式不存在通用標準，也沒有指定所使用的字元編碼，但是在RFC 4180中有基礎性的描述，而7-bit ASCII是最基本的通用編碼。用法.CSV是一種通用的、相對簡單的檔案格式，被使用者、商業和科學廣泛應用。最廣泛的應用是在程式之間轉移表格資料，而這些程式本身是在不相容的格式上進行操作的。因為大量程式都支援某種CSV變體，至少是作為一種可選擇的輸入/輸出格式。例如，一個使用者可能需要交換資訊，從一個以私有格式儲存資料的資料庫程式，到一個數據格式完全不同的電子表格。最可能的情況是，該資料庫程式可以匯出資料為“CSV”，然後被匯出的CSV檔案可以被電子表格程式匯入。“CSV”不是一種單一的、定義明確的格式，因此在實踐中，術語“CSV”泛指具有下列特徵的任何檔案：在這些常規的約束條件下，存在著許多CSV變體，故CSV檔案不完全相容。然而，這些差異非常小，而且有許多應用程式可以讓使用者預覽檔案，甚至指定分隔符、轉義規則等。如果一個特定CSV檔案的差異過大，超出了特定接收程式的支援範圍，那麼可行的做法通常是人工檢查並編輯檔案，或透過簡單的程式來修復問題。歷史.逗號分隔值是一種資料格式，列表方式中。列表方式的輸入使用了逗號和/或空格作為分隔符，所以用來結束引文的字串不能包含逗號或空格。相對於固定列寬資料格式，逗號分隔值的列表不僅輸入更加方便，而且當一個值被錯打一列時也不容易產生錯誤結果。逗號分隔列產業，一個常見的應用是，小企業使用模板和郵件列表生成推銷郵件。CSL/CSV被用來作為簡單的資料庫。一些早期的軟體應用，比如文字處理器，允許一系列“變數資料”在兩個檔案之間被合併：一個是模板檔案，一個是包含姓名、地址和其它資料欄位的CSL資料庫。許多應用程式仍然有這種能力。逗號分隔列過去和現在都被用於在兩個不同架構的機器之間交換資料庫資訊。純文字的CSV檔案大幅避免了不相容性，比如位元組順序和字長。這些檔案大部分是可讀的，所以在沒有完美的文件或通訊的情況下仍然很容易處理。常規功能.CSV格式最好被用來表現記錄集合或序列，其中的每條記錄都有完全相同的欄位序列。這相當於關係資料庫中一個單一的關係，或者典型的電子表格中的資料。CSV格式沒有被限定於某個特定字符集。不管用Unicode還是用ASCII，都沒有問題。如前所述，包含多個關係的資料庫不能匯出為單一的CSV檔案。最多，只能新增更多的標識約定，例如標識和分隔不同的關係。這種標識並不難於設計和實現，但是因為沒有這方面的約定，所以基本不具備可移植性。同樣地，CSV本身不能表達分層級的或面向物件的資料庫或其它資料。這是因為每一條CSV記錄都應當有同樣的結構。CSV因此基本不適用於文件，比如由HTML、XML或者其它的標記語言或文字處理技術建立的。欄位會變化的統計資料庫往往有著類似關係的結構，但是會有一些欄位組是可重複的。例如，健康資料庫如，對於一名給定的父母會為每個孩子重複一些問題一份所有未指定孩子的資訊的複製。CSV可以用“橫的”或“豎的”形式來表達這類資料。在關係資料庫中，類似的問題很容易解決——為每個類似的組另外建立一個關係，並使用外來鍵，然後按照需要重複該容器。對於CSV，則尚無被廣泛接受的單檔案解決方案。缺乏規範.“CSV”這個名字表示是用逗號來分隔資料欄位的。然而，“CSV”這個術語還被廣泛用於形式各異的一系列格式。例如，許多所謂的“CSV”檔案實際上使用製表符代替逗號；一些實現允許或要求使用單引號或雙引號來包裹某些或全部欄位；還有一些實現保留最前面的一條記錄作為表頭來包含欄位名序列。其它的實現差別包括如何處理更多常見的欄位分隔符和在文字欄位中的換行符。更加微妙的是對一個空行的翻譯：寫一條零欄位的記錄，或者一條有一個零長度欄位的記錄同樣可以得到這樣的結果；因此對它的解碼是有歧義的——只不過這種歧義通常無傷大雅。RFC 4180所記載的標準可以使CSV交換簡單化。然而，這一標準僅指定了對基於文字的欄位的處理。對各個欄位的文字的翻譯仍然是由引用程式指定的。特別地，並沒有標準來指定如何表示小數，儘管它們普遍被嵌入在CSV資料中，並且一些國家使用點作為小數分隔符，一些國家使用逗號。例如，法文CSV檔案可能將圓周率的近似值寫為3,14159。一個通用的資料庫產品，其在匯入 CSV/TSV 這種資料時便允許使用者一邊預覽一邊調整諸如表頭行、分隔符之類的選項。進行中的標準化.“CSV”格式中大量變體的存在說明並沒有一個“CSV標準”。在常見用法中，幾乎任何都可以被統稱為“CSV”檔案。不同的CSV格式可能不會相容。不過，RFC 4180是一個將CSV正式化的努力。它定義了網際網路媒體型別“text/csv”，並且採用它的規則的CSV檔案將會具有廣泛的可移植性。它有如下要求：這個格式很簡單，可以被大部分聲稱可以讀取CSV檔案的程式處理。例外是程式可以將可選的表頭當作資料，或者將第一個資料行當作可選的表頭。技術背景.該格式可以追溯至早期的商用電腦，它被廣泛用於在電腦間傳遞資料，這些電腦可能會有不同的內在字長，需要不同的資料格式，等等。為此，CSV檔案在所有電腦平臺上通用。CSV是一種文字檔案，它使用逗號來分割值。在計算機科學術語中，CSV檔案可以被認為是一個“平面檔案資料庫”。基本規則及舉例.存在許多描述“CSV”格式的非正式檔案。IETF RFC 4180定義了格式“text/csv”網際網路媒體型別，並已註冊於IANA。#重定向 另一個相關規範由提供。#重定向 提供了一個概述，說明了在最廣泛使用的應用程式中所使用的變體，並解釋了CSV怎樣才能最好地被使用和支援。這些和其它“CSV”規範及實現的典型規則如下：1997,Ford,E350"1997","Ford","E350"1997,Ford,E350,"Super, luxurious truck"1997,Ford,E350,"Super, "luxurious" truck"1997,Ford,E350,"Go get one nowthey are going fast"1997, Ford, E350not same as1997,Ford,E3501997, "Ford" ,E3501997,Ford,E350," Super luxurious truck "Year,Make,Model1997,Ford,E3502000,Mercury,Cougar舉例.以上資料表可以以CSV格式表示如下：Year,Make,Model,Description,Price1997,Ford,E350,"ac, abs, moon",3000.001999,Chevy,"Venture "Extended Edition"","",4900.001999,Chevy,"Venture "Extended Edition, Very Large"",5000.001996,Jeep,Grand Cherokee,"MUST SELL!air, moon roof, loaded",4799.00美國/英國的CSV檔案舉例：Year,Make,Model,Length1997,Ford,E350,2.342000,Mercury,Cougar,2.38德國和荷蘭同樣的CSV/檔案舉例：Year;Make;Model;Length1997;Ford;E350;2,342000;Mercury;Cougar;2,38後者的格式是不遵循RFC 4180的。若要使它遵循，可以使用逗號代替分號作為分隔符，或者使用小數點表示法的國際符號，或者包裹所有包含小數點的數字。應用程式支援.CSV檔案格式非常簡單，被幾乎所有的電子表格和資料庫管理系統支援。許多程式語言都有可利用的庫來支援CSV檔案。許多實現都支援變換欄位分隔字元和一些包裹約定以最大化接收者處理資料的機會，儘管使用最簡單的約定是最安全的。Microsoft Excel會開啟.csv檔案，但依賴於系統的地區設定，它可以使用分號作為分隔符來代替逗號，這是由於在某些語言中逗號被用作小數點。並且，Excel的許多地區版本不能在CSV中處理Unicode。當遇到這種困難時，一個簡單的解決方案是將副檔名從codice_2變為codice_3；然後從一個已經執行的Excel中用“開啟”命令開啟檔案。當貼上文字資料到Excel中時，通常製表符被用作分隔符：如果你複製“hellogoodbye”到剪貼簿中並把它貼上到Excel中，它會進入到兩個單元格中。“hello,goodbye”貼上進Excel會進入一個單元格中，包括逗號。如果您在Excel中使用“文字到列”功能並且改變設定，它同樣為貼上進文字資料改變設定。OpenOffice.org Calc和LibreOffice Calc處理CSV檔案，並且透過一個"文字匯入"對話方塊貼上文字，對話方塊要求使用者自己指定分隔符、編碼、列格式等。在類Unix系統上，有許多-{}-工具程式至少可以處理某些CSV檔案。許多此類工具有辦法改變分隔字元，但是很少能支援任何其它變體。這些可用的程式有：