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上。但我只是幾年前在那里發了幾篇文章,早已經不維護了,干脆把看得上眼的文章搬過來算了)