2011-03-04 201 views
3

我最近創建了一個應用程序,它通過CSV將項目添加到數據庫。添加項目後,我意識到很多我的價值有額外的引號(「),這是不需要的,這是搞亂我的訂購Excel在CSV導出時添加額外的引號

問題是,當從Excel導出到CSV時,Excel添加額外的引號。我所有的值已經在他們報價,我下面所示的區別:

原始項目:鑽電可逆1/2" 6.3A

出口項目:「鑽電可逆1/2「」6.3「

注意:CSV導出會添加三(3)個額外的引號(「)。兩個在結尾,一個在最初的預期報價之後。

有沒有可以更改的設置,或者我可以在Excel文件/列上設置的格式屬性?或者,我必須將它們與它一起生活,並在將它們添加到數據庫之前刪除我的後端代碼中的這些引號?

+0

周圍的引號是CSV的標準,所以我不擔心它們。只要確保你的進口商是包含報價的會計。裏面的引用是Excel逃避雙引號的方式。有點煩人,我會批准你,但它是標準的一部分。 – chmullig 2011-03-04 22:43:40

+0

*問題是,當從Excel中導出爲CSV格式時,Excel會向我已添加引號的所有值添加額外的引號,而不會嘗試導入它,您怎麼知道這是一個**問題**? – Wolf 2015-03-16 13:06:51

回答

7

這是完全正常。外部引號被添加,因爲這是一個字符串。內部報價翻倍以逃避它。例如,你會在SQL查詢中看到同樣的事情。使用TextFieldParser類可以自動地嘗試和真正的框架代碼關心這個解析。

3

這就是標準。

CSV文件中的值應該包含引號(否則字段內的逗號和換行符可能會被誤解)。

在字段中轉義報價的方式是將報價翻番,就像您看到的一樣。

我建議你閱讀有關basic rules of CSV

CSV是具有場/由逗號字符和記錄/通過終止換行符行分隔的列分隔的數據格式。 包含特殊字符(逗號,換行符或雙引號)的字段必須用雙引號括起來。如果一行包含空字符串的單個條目,則它可能用雙引號引起來。 如果某個字段的值包含雙引號字符,則通過在其旁邊放置另一個雙引號字符來轉義它。 CSV文件格式不需要特定的字符編碼,字節順序或行終止符格式。

(重點煤礦)

+0

嗯。這隻發生在已包含報價的字段中。所以如果我在我的代碼中替換「with」,它應該修復問題?或者我將不得不替換「with」?「編輯:等等,我必須在Excel文件中替換它。 – Lando 2011-03-04 22:43:05

+4

@Lando - 使用CSV解析庫,讓您的生活變得輕鬆 – Oded 2011-03-04 22:44:05

-1

另一種方法是使用Unicode字符 「雙引號」

http://www.fileformat.info/info/unicode/char/2033/index.htm 

在您的Excel數據。要從Excel中導出爲UTF-8或UTF-16 .csv文件,您必須提供一個schema.ini以及適當的CharacterSet屬性。顯然,用於將.csv導入到數據庫中的工具也必須能夠識別Unicode。

根據DBMS,可以使用更直接的數據傳輸方式(SELECT/INSERT ... INTO ... IN),從而完全消除.csv。

+0

我可以問問倒票的原因嗎? – 2011-03-04 23:47:48

0

您可以嘗試從Excel導出爲TAB分隔文件。我發現它更容易解析。

0

將所有字符替換爲右雙引號按字符左雙引號。他們看起來很相似,Excel會感到困惑,讓文本不變。

0

如果您的最終輸出爲HTML,此解決方案將僅有所幫助。這是JavaScript的解決方案,因此很明顯,你需要在C#或其他任何語言來重做這個你在工作:

base = base.replace(/""/gi, '"'); 
base = base.replace(/'/gi, '''); 

應用此你解析CSV之前。