如何轉義CSV檔案中的逗號

2021-07-27 18:51:03 字數 1087 閱讀 9128

csv全稱是:comma separated values 或者 character separated values。

儘管第一種說法更常見,但我覺得還是第二種說法更確切一些,因為你可以使用其它字元做分隔符。

使用逗號做分隔符的csv檔案有乙個好處:你可以直接用excel開啟。如果使用其它分隔符,比如「|」,你必須告訴excel該檔案使用「|」作分隔符,excel才能把它匯入進來。 

前幾天,project manager告訴我:我們有許多csv檔案,都是使用「|」做分隔符,用excel開啟的時候比較麻煩,使用者想在excel中直接開啟。這樣就需要使用「,」做分隔符。但是檔案中有些字段含有逗號,必須對這些逗號特殊處理,才能保證csv檔案在excel中正確開啟。他還給了我乙個演算法:

如果欄位中有逗號(,),該欄位使用雙引號(")括起來;

如果該字段中有雙引號,該雙引號前要再加乙個雙引號,然後把該字段使用雙引號括起來。

看完project manager的要求,我真是滿頭起包啊。在it業混了十幾年了,竟然不知道這樣處理逗號。

舉幾個例子:

字段處理前

字段處理後

abc,d2

"abc,d2"

ab"c,d2

"ab""c,d2"

"abc

"""abc"

如果欄位中有兩個挨著的雙引號,比如:aaa""ccc。這種情況不用特殊處理。這是我在寫這篇部落格的時候才想起來的,趕忙使用excel測試了一下。還好,不用特殊處理就能正常開啟,不然我還得改程式。當然了,如果你把它處理成:"aaa""""ccc" excel也能正常開啟。事後總結總結真是有好處啊。

另外,如果某欄位第乙個字元是空格,第二個字元是雙引號,這種情況不用特殊處理。project manager在給我描述演算法的時候,也舉了乙個字段只有乙個雙引號的例子,但他不小心在雙引號前面加了個空格,把問題掩蓋過去了。

我是在winxp和ms excel2007下測試的。如果執行在其他環境和應用程式下,還需進行測試,規則可能不一樣。

(這是一篇老博文,11-1-22 下午11:44 發布在google blogger上。但我只是幾年前在那裡發了幾篇文章,早已經不維護了,乾脆把看得上眼的文章搬過來算了)

**

CSV檔案的轉義處理

csv檔案是一種適合程式格式化輸出資料的檔案格式。它使用英文逗號作為列分隔符,檔案可以直接用excel開啟。csv的規則簡單,便於程式輸出 excel對csv的相容性使得我們可以非常輕鬆的使用excel提供的所有強大功能。唯一需要注意的地方就是csv是使用英文逗號作為列分隔符的,所以當你輸出的文字中...

csv 中顯示逗號和雙引號

儲存csv檔案的時候,我們通過逗號進行分隔,如果使用excel進行開啟的話,在展現上可能會有一些問題,這裡使用的是office 2007,如果是乙個較長數字或者為一串數字字串,這裡包括以0開始的字串,用excel開啟後,我們看到的可能是經過科學計算轉換過後的,或者是去掉了前面0的數字,為了展現方便,...

去除csv檔案單元格內的逗號

csv檔案協議為 如果單元格內有逗號,則該單元格外部用引號括起來,如果單元格內部有引號,則單元格外部用引號括起來,同時單元格內部的引號前面再加上引號 比如 csv中的一行為 a,b,c d c,e 實際儲存的字元為 a,b,c d c e 演算法思路是基於這個規則,找到從字串的開始進行遍歷,找到兩組...