2011-06-13 115 views
4

我想解析CSV。我想把它加入到數據庫中,或者只是用JavaScript來解析它,但是由於語法錯誤,任何一種方式都會失敗。我的整個CSV文件是在這裏:
https://gist.github.com/1023560Broken CSV,我該如何解決它?

如果你發現,它打破凡是有雙引號雙引號和插入MySQL時,它也會失敗。第一個突破見於線13.脫落並,而不是返回全:

<a href="http://www.facebook.com/pages/Portland-Community-Gardens/139244076118027?v=wall" target="_blank"><img src="/shared/cfm/image.cfm?id=348340" alt="Facebook" width="100" height="31" /></a> 

它返回:

<a href=" 

對於JavaScript我打算由本·納德爾只是使用CSVToArray() :
http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm

我的最終目標是壽投入的MySQL這樣我就可以回顯PHP的json_encode()一個JSON飼料。

事情我注意到,可能是有問題的是雙引號都可以像上面的HTML標籤,也可作爲HTML標籤的textNodes,所以"<span class="text">"Example"</span>"

第一組引號是CSV列第二是HTML引號,第三個是文本引號。

+3

CSV文件生成不好,我沒有看到任何解決方法(導入時,不知道你是否可以生成一個新的CSV文件) – 2011-06-13 20:19:02

+0

這不是萬無一失的,但如果這是一個單向的,你可能會用一個正則表達式來替代所有不是一行的第一個字符並且不以逗號前面帶有任何轉義字符(兩個引號)的引號。 – 2011-06-13 20:21:48

+0

未生成CSV,這是問題:\它從手寫的Excel文件中保存(我爲政府工作,人們不喜歡使用「應用程序」)。 – 2011-06-13 20:22:34

回答

2

可能能夠欺騙它,並使用正則表達式來尋找:

"(.*?)"(?=,|$) 

但是,這是一種破解上下的(基本上只接受最終報價時,後面緊跟一個逗號或行結束)。同樣的邏輯將適用於查找替換。 (同樣,這一切都假定「流浪」的引用永遠不會遵循標準的CSV規則(例如,在它之前或之後有一個逗號/行[開頭/結尾]))

我假設您無法控制原始數據並必須與你有什麼工作?

編輯

雖然我只試過這種對數據的樣本,這似乎找到了「流浪」的報價,對此您可以使用與""上取代:

(?<!^|"|,)"(?!"|,|$) 
+0

謝謝,虐待嘗試了這一點 – 2011-06-13 20:33:17

+0

@OscarGodson:我得到了它使用上述更換工作約90%的方式。最大的殺手是你的「1900年,......沿途的地區」入口有例外。不過,我覺得手動編輯一對夫婦的參賽作品可能並不是世界末日。 – 2011-06-13 20:46:56

0

引號與逗號不一樣重要。如果逗號是分隔符,那麼在值中不能有逗號。如果您可以使用不同的分隔符保存CSV,則可能會獲得更好的結果。
使用像〜或^這樣的字符而不是逗號作爲分隔符。

+0

很好的建議 – 2011-06-13 20:33:11

+0

我不認爲分隔符是這裏的問題 - 它的JavaScript解析引號,顯然。 – 2011-06-13 20:45:10

0

假設您要麼在Windows上,要麼可以在Windows上執行此操作,請查看Logparser。它是一個免費的命令行實用程序,可以解析許多數據格式,包括CSV,並可以輸出爲包括SQL在內的多種格式。

相關問題