跳至內容

弄號分隔值

出自Taiwan Tongues 台語維基
於 2025年8月19日 (二) 22:13 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

弄號分隔值(Comma-Separated Values,CSV,有時仔嘛叫做是字元分隔值,因為分隔字元嘛會使毋是弄號), 其檔案以純文字形式儲存表格資料(數字佮文字)。純文字意味著該當案是一字元序列,無含著愛像二進位數字按呢被解讀的資料。CSV 檔案由任意數目的記錄組成,記錄間以某種換行符分隔;逐條記錄是由欄位組成,欄位間的隔符是其他字元抑是字串,上捷看的是弄號抑制表符。通常,所有記錄攏有完全仝款的欄位序列。

CSV 檔案的格式不存在通用標準,嘛無指定所使用的字元編碼,猶毋過佇咧 RFC 四千一百八十中有基礎性的描述, 抑若七-bit ASCII 是上基本的通用編碼。

用法

CSV 是一種通用的、相對簡單的檔案格式,予人使用者、商業佮科學泛應用。上廣泛的應用是在程式之間轉移表格資料,啊若遮的程式本身是佇無相容的格式進行操作的(往往是私有的佮 / 抑是沒有規範的格式)。 因為大量的程式攏支援某種 CSV 變體,至少是做為一種會當選擇的輸入 / 輸出格式。

比如講,一个使用者可能需要交換資訊,對一个以私有格式儲存資料的資料庫程式,到一个資料格式完全無仝的電子試算表。上可能的情形是,該資料的庫式會當匯出資料為「CSV」,然後去予匯出的 CSV 檔案會當予電子試算表程式回入。

「 CSV」毋是一種單一的、定義明確的格式(就算講 RFC 四千一百八十有一个被廣泛使用的定義), 就按呢佇咧實踐中,術語「CSV」泛指具有下列特徵的任何檔案:

一 . 純文字,用某一字元集,比如講 ASCII、Unicode、EBCDIC 抑是 GB 二千三百十二(簡體中文環境)等; 二 . 由記錄組成(典型的是每一條記錄); 三 . 逐條記錄予分隔符分隔做欄位(典型分隔符有弄號、分號抑制表符;有當仔分隔符會使包括會使選的空格); 四 . 逐條記錄攏有仝款的欄位序列。

佇遮的捷規的約束條件之下,有可能去濟 CSV 變體,故 CSV 檔案無完全相容。毋過,這款差異非常的細,而且有誠濟應用程式會使予使用者預覽檔案(這是會用得的,因為伊是純文字), 甚至指定分隔符、跳脫規則等。若一个特定 CSV 檔案的差異過大,超出特定接收程式的支援範圍,遐爾仔可行的做法通常是人工檢查並編輯檔案,抑是通過簡單的程式來修復問題。

歷史

弄號分隔值是一種資料格式,列表方式(「 自由形式」)輸入 / 輸出被定義佇咧 FORTRAN 七十七(七十七代表一九七七年)中。列表方式的輸入使用矣逗號佮 / 抑是空格做分隔符,所以用來結束引文的字串袂使包含弄號抑是空格。

相對固定的列闊資料的氣式來講,弄號分隔值的列表毋但輸入(譬如講輸入到拍空卡)閣較方便,而且做一个值予人毋著拍一列的時陣嘛無簡單產生毋著錯結果。

弄號分隔列(CSL)是一種資料格式,起頭佇上古早的簡單電腦當中予人叫做是弄號分隔值(CSV)。 在個人電腦(彼當陣閣較普遍地予人號做「家用電腦」)產業,一个捷看的應用是,小企業使用模板佮郵寄清單生成推銷郵件。

CSL / CSV 予人用來做簡單的資料庫。一寡古早的軟體應用,比如講文書處理器,允准一系列「變數資料」在兩個檔案之間被合併:一个是模板檔案,一个是包含姓名、位址佮其他的資料欄位的 CSL 資料庫。誠濟應用程式猶原有這種能力。

弄號分隔列過去佮這馬攏予人用佇咧兩个無仝架構的機器之間交換資料庫資訊。純文字的 CSV檔案大幅避免無相容性,比如講位元組順序佮字長。遮的檔案大部份是可讀的,所以佇咧無完美的文件抑是通訊的情形下猶原真簡單來處理。

常規功能

CSV 格式上好予人用來表現記錄集合抑是序列,其中的逐條記錄的時陣攏仝款有彼个欄位序列。這相當佇咧關聯式的資料庫當中一个單一的關係,抑是典型的電子試算表內底的資料(雖然袂當計算)。

CSV 格式無予人限定佇某一个特定字元集。不管用 Unicode 抑是用 ASCII,攏無問題(就算特定程式支援的 CSV 可能會有𪜶家己的局限性)。 佮大部份的私有資料的格式無仝,CSV 檔案會當對一字元集翻譯到另外一字元集。毋過,CSV 無提供任何途徑來表明使用的是啥物字元集,所著愛另外通訊,抑是佇接收煞的時陣指出(若可能)。

如前咧講,包含濟的關係的資料庫袂用得匯出為單一的 CSV 檔案。上濟,只有會當添閣較濟的標識定,譬如講標識佮分隔無仝的關係。這種標識並毋通設計佮實現,猶毋過是因為無這方面的約束,所以基本無具備會當移植性。

仝款所在,CSV 本身袂使表達分層級的抑是物件導向的資料庫抑是其他的資料。這是因為每一條 CSV 記錄攏應當有仝款的結構。CSV 所以基本無適用於文件,比如講由 HTML、XML 抑是其他的標記式語言抑是文書處理技術建立的。

欄位會變化的統計資料庫往往有類似的關係的結構,毋過會有一寡欄位組是會當重複的。比如講,健康資料庫如人口佮健康調查,對一名予定的爸母會為每一个囡仔重複一寡問題(凡勢到某一个確定的上大的囡仔數目)。 統計分析系統往往包括會當「旋轉」這種資料的工具:比如講,一條包含五个囡仔資訊的「爸母」記錄,會當予人分解做五條單獨的記錄,逐條記錄包含(a) 一个囡仔的資訊,和(b)一份所有無指定囡仔的資訊的複製。CSV 會用得「橫的」抑是「徛的」形式來表達這類的資料。

佇關聯式的資料庫內底,類似的問題足容易解決的—— 為逐个類似的組另外建立一个關係,並使用外來鍵(如爸母的身份證號抑是名)將「囡仔」記錄佮相關的「爸母」記錄連接起來。佇標記式語言如 XML 中,這類組會予人包含佇一个容器內底(比如講,` < child > `), 然後照需要重複該容器。對於 CSV,是尚無被廣泛接受的單檔案解決方案。

欠缺規範

「 CSV」這个名表示是用弄號來分隔資料欄位的。毋過,「 CSV」這个術語猶閣予人廣泛用佇形式各異的系列格式。比如講,真濟咱所講的「CSV」檔案實際上使用制表符代替弄號(這種檔案會當閣較精確來予人號做「TSV」,即制表符分隔值,Tab-Separated Values); 一寡實現允准抑是要求使用單引號抑是雙引號來包裹某寡抑是全部欄位;閣有一寡實現保留上頭前的一條記錄作為表頭來包含欄位名序列。

其他的實現差別包括如何處理閣較濟捷看著的欄位隔符(比如講空格抑是分號)佮佇咧文字欄位中的換行符。更加微妙的是對一个空行的翻譯:寫一條空欄位的記錄,抑是一條有一个零長度欄位的記持錄仝款會當得著這款的結果;所以對伊的解碼是有歧義的—— 只不過這款歧義通常無傷大雅。

RFC 四千一百八十所記載的標準會當使 CSV 交換簡單化。毋過,這標準干焦指定矣著無基於文字的欄位的處理。嘿各位欄位的文字的翻譯猶原是由參照程式指定的。特別地,並無標準來指定按怎表示小數,就算𪜶普遍去予人騙入去 CSV 資料當中,而且一寡國家使用點作為小數分隔符,一寡國家使用弄號。比如講,法文 CSV 檔案可能共圓周率的近若像值寫三 , 一爿四千一百五十九的。

一个通用的(若有技術上無予人滿意)互操作性解決方案是依賴人工介入:因為乎 CSV 檔案是純文字,使用者會當通過使用文字編輯器輕易預覽佮診斷絕大部份(若毋是全部)問題。按呢做的例包括 Microsoft Access 等(關係)資料庫產品,其實佇咧匯入 CSV / TSV 這種資料的時陣就允准使用者那預覽一爿調整諸如表頭行、分隔符之類的選項。

==進行中的標準化==「 CSV」格式中大量變體的存在說明並無一个「CSV 標準」。 佇咧定定看著用法中,強欲任何定界符分隔的文字資料攏會使予人統稱做「CSV」檔案。無仝的 CSV 格式可能袂相容。

猶毋過,RFC 四千一百八十是一个將 CSV 正式化的努力。伊定義網路媒體類型「text / csv」,而且採用伊的規則的 CSV 檔案會有廣泛的可移植性。伊有如下要求:

  • 以(CR / LF)字元結束的 DOS 風格的行(上尾逝可選)。
  • 一條可選的表頭記錄(無可靠的方式來檢測伊敢有存在,所以匯入的時陣著愛謹慎)。
  • 逐條記錄「應當」包含仝款數量的弄號分隔欄位。
  • 任何欄位攏 _ 會用得 _ 予人包裹(用雙引號)。
  • 包含換行符、雙引號佮 / 抑是弄彼个欄位 _ 應當 _ 予人包裹。(抑無,檔案真可能袂當予正確處理)。
  • 欄位中的一个(雙)引號字元著愛予人表示做兩个(雙)引號字元。

這个格式真簡單,會當予大部份的聲稱會當讀 CSV 檔案的程式處理。例外是(a)程式會當無支援佇被包裹的欄位中換行,(b)程式會當將會當選的表頭當做資料,抑是講將第一个資料行當做會當選的表頭。

技術背景

該格式會當追溯至早期的商用電腦,伊去予人闊泛用於在電腦間傳遞資料,遮的電腦可能會有無仝的內在字長,需要無仝的資料格式,等咧。為此,CSV 檔案佇咧所有電腦平台上通用。

CSV 是一種分隔的文字檔案,伊使用弄號來分割值(真濟 CSV 匯入 /匯出工具的實現嘛可以使用其他的分隔符)。 簡單的 CSV 實現會當禁止欄位值中包括弄號抑是其他的特殊字元如換行符。閣較複雜的 CSV 實現允准遮的特殊字元,𪜶往往要求用 "(雙引號)包裹遮的包含保留字元(如逗點、雙引號抑無啥通用的換行符)的數值。被死入去的雙引號字元會當用連紲兩个雙引號來表示(Creativyst 二千空一十), 或者是使用跳脫字元如反斜槓(譬如講佇 Sybase Central 中)。

佇咧電腦科學術語內底,CSV 檔案會當予人認為是一个「平面檔案資料庫」。

基本規則佮舉例

存在真濟講「CSV」格式的無正式檔案。IETF RFC 四千一百八十(如何咧講)定義矣格式「text / csv」網際網路媒體類型,並已經註冊於著 IANA。(Shafranovich 兩千空五)另外一个相關規範有含欄位文字提供。Creativyst ( 二千空一十 ) 提供一个概述,說明了佇上廣泛使用的應用程式中所使用的變體,並且解說矣 CSV 按怎才會當上好予人使用佮支援。

遮的和其他「CSV」規範佮實現的典型規則如下:

  • CSV是一種予人分隔的資料格式,伊有予人弄花字元分隔的欄位 / 列和以換行結束的記錄 / 走。
  • CSV 檔案無要求特定的字元編碼、位元組序抑是行結束符格式(某一寡軟體無支援所有的行煞變體)。
  • 一條記錄結束佇行結束符。毋過,行煞符合可能予人號做資料1875入去到欄位,所以軟體著愛去辨識講去予包裹的行結束符(見面教), 通好對可能的多行中正確組裝一條完整的記錄。
  • 所有的記錄應當有仝款的目睭、仝款順序的欄位。
  • 欄位中的資料予人翻譯做一系列字元,毋是一系列位元或位元組(見 RFC 兩千空四十六,section 四配一)。 比如講,數值量六石五千五百三十五會當被表現做五 ASCII 字元「六嬸五千五百三十五」(抑是按怎形式如「零 xFFFF」、「 六馮五千五百三十五五鋪空空空 E + 零」等咧); 但是袂做伊的單二進位整數的兩位元組序列(毋是兩字)來處理。若無遵循這个「純文字」的慣例,若按呢該 CSV 檔案就袂當包含著真有資訊來正確地翻譯伊,該 CSV 檔案將無大可能佇咧無仝的電腦架構間正確傳達,而且將袂當佮 _ text / csv _ MIME 類型保持一致。
  • 相鄰欄位著愛予單一个弄號隔開。毋過,「 CSV」格式佇咧分隔字元的選擇上變化真大。特別是佇某一寡區域設定中弄號予用做較細數點,可以用分號、制符仔抑是其他字元來代替講。

` ` ` 一千九百九十七 , Ford , E 三仔五 ` ` `

  • 任何欄位攏 _ 會用得 _ 予被 _ 包裹 _(使用雙引號字元)。 某寡欄位 _ 著愛 _ 予人包裹,詳見後續規則。

` ` ` " 一千九百九十七 " , " Ford " , " E 三五十 " ` ` `

  • 若是欄位包含去予斷去的弄號,著愛予人包裹。

` ` ` 一千九百九十七 , Ford , E 三仔五 , " Super , luxurious truck " ` ` `

  • 逐个去予斷去的雙引號字元必須愛予人表示做兩个雙引號字元。

` ` ` 一千九百九十七 , Ford , E 三仔五 , " Super , " " luxurious " " truck " ` ` `

  • 若是欄位包含予人去予人入去的換行,著愛予人包裹(毋過,真濟簡單的 CSV 實現毋是支援欄位內換行)。

` ` ` 一千九百九十七 , Ford , E 三仔五 , " Go get one now they are going fast " ` ` `

  • 佇咧某一寡 CSV 實現中,起頭佮結尾的空格佮制表符予人截落去。_ 這个實踐是有爭議的,嘛無符合 RFC 四千一百八十。RFC 四千一百八十聲明「空格予人看做是欄位的一部份,無應當予人無應當。」_。

` ` ` 一千九百九十七 , Ford , E 三仔五 not same as 一百九十九七 , Ford , E 三仔五 ` ` `

  • 毋過,該 RFC 並無講做空白字元出這馬予人包裹的值以外欲按怎處理。

` ` ` 一千九百九十七 , " Ford " , E 三仔五 ` ` `

  • 咧截掉頭佮結尾空格的 CSV實現中,將這種空格看做有意義資料的欄位必須予人包裹。

` ` ` 一千九百九十七 , Ford , E 三仔五 , " Super luxurious truck " ` ` `

  • 第一條記錄會當是「表頭」,伊佇咧每一个欄位中包含列名(並無通靠途徑來告知一个檔案敢是按呢包括表頭;毋過,一般咧列名攏用字母、數字佮底線,攏無使用其他的字元)。

` ` ` Year , Make , Model 一千九百九十七 , Ford , E 三仔五兩千, Mercury , Cougar ` ` `

舉例

以上資料表會使得 CSV 格式表示如下:

` ` ` Year , Make , Model , Description , Price 一千九百九十七 , Ford, E 三仔五 , " ac , abs , moon " , 三千摃空空一千九百九十九 , Chevy , " Venture " " Extended Edition " " " , " " , 四千九百空空一千九百九十九 , Chevy , " Venture " " Extended Edition , Very Large " " " , , 五千摃空空九百九十六 , Jeep , Grand Cherokee , " MUST SELL ! air , moon roof , loaded " , 四千七百九十九孵空空 ` ` `

美國 / 英國的 CSV 檔案(小數點是點,值分隔符是弄號)舉例:

` ` ` Year , Make , Model , Length 一千九百九十七 , Ford , E 三仔五 , 二嬸三四兩千 , Mercury , Cougar , 二嬸三八 ` ` `

德國佮荷蘭仝款的 CSV / DSV 檔案(小數點是逗號,值分隔符是分號)舉例:

` ` ` Year ; Make ; Model ; Length 一九百九十七 ; Ford ; E 三仔五 ; 二 , 三十四兩千 ; Mercury ; Cougar ; 二 , 三十八 ` ` `

後者的格式是無遵循 RFC 四千一百八十的。若欲予伊遵循,會使使用弄號代替分號作為分隔符,抑是使用小數點表示法的國際符號,抑是包裹所有的包括小數點的數字。

應用程式支援

CSV 檔案的格式真簡單,予人強欲所有的電子試算表佮資料庫管理系統支援。真濟程式語言攏有通利用的庫來支援 CSV 檔案。足濟實在的支援變換欄位分隔轉字元佮一寡包裹約定以上大化接收者處理資料的機會,就算使用上簡單的約定是上安全的。

Microsoft Excel 會拍開 . csv 檔案,毋過依賴佇咧系統的地區設定,伊會當使用分號做分隔符來代替弄號,這是因為佇咧某一寡語言內底弄號予用做較細數點。並且,Excel 的真濟地區版本袂當佇 CSV 中處理 Unicode。彼當陣拄著這種困難,一个簡單的解決方案是將副檔名對 ` . csv ` 變做是 `. txt `;然後對一个已經執行的 Excel 中用「拍開」命令拍開檔案。

當咧貼文字資料到 Excel 中央,通常制表符去予人用作分隔符:你若複製「hello < tab > goodbye」到剪貼簿中並共貼起去 Excel 中,伊會進入去到兩个儲存格內底。「hello , goodbye」貼著進 Excel 會進入一个儲存格內底,包括弄號。阮若是你咧 Excel 中使用「文字到列」功能並且改變設定,伊仝款為著貼入去文字資料改變設定。

OpenOffice . org Calc 和 LibreOffice Calc 處理 CSV 檔案,並且通過一个 _ 文字匯入 _ 對話方貼文字,對話方塊要求使用者家己指定分隔符、編碼、 列格式等等。

佇類 Unix 系統上,有真濟工具上無會當處理某寡 CSV 檔案。誠濟此類的工具有法度改變分隔字元,但是足少較無支援任何其他變體(抑是 Unicode)。 這會當用的程式有:

  • column
  • cut
  • paste
  • join
  • sort
  • uniq(-f 來跳過較前 N 個欄位)

參見

  • 資料序列化格式較
  • CSV 應用程式支援
  • 定界符分隔值
  • 含欄位文字
  • 制表符分隔值

註解

參考資料

外部連結

  • B 二 B(商業著商業)應用的 CSV 鋪一千兩百空三檔案格式規範(英文)
  • 如何:弄號分隔值(CSV)檔案格式( 英文)
  • RFC 四千一百八十:CSV 檔案格式的 RFC 規範(英文)