2010-07-29 81 views
0

我有一個CSV在這下面的格式正則表達式 - Java的拆分命令解析CSV文件

11000,Christopher,Nolan,MR.,Inception,25993,France,"Lefoullon,Paris",920,Director,*461-7755,33-461-7755,12175,"O'Horner, James",12300,"Glebova, Nathalie",,[email protected],Capital,NEW 

Regarding Java Split Command Parsing Csv File

在這個鏈接@馬克拜爾斯和@R。 Bemrose建議String[] tokens = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1);但是,如果你在上面的CSV中仔細注意,你會發現一個名稱爲"O'Horner, James"正在引起問題,並且其投擲ORA-0917: missing comma錯誤。有沒有辦法避免它或reg-ex必須糾正?

有點兒困惑:-o

回答

2

警告:以下所有的是遊資炒作和猜測,因爲你沒有提供的驗證任何代碼,而且我的真知晶球是在車間進行預防性維護。

思路:你之前沒有問題"Lefoullon,Paris",但你確實遇到了問題"O'Horner, James" ......這表明撇號可能是問題的(無辜的)原因。

假設:該字段已成功從CSV提取爲O'Horner, James ...請注意,撇號對於CSV不是特殊的(並且不會出現在那個宏偉的[see note]正則表達式中)。

但是撇號對SQL很重要;撇號在SQL中引用字符串文字,並且數據中的撇號必須加倍。

像這樣:INSERT INTO ..... VALUES(...,'O''Horner, James', ...);

如果您正在使用您的SQL接口參數替代(你應該是),將您的數據字段爲有效的SQL常量會爲你做。否則

  • 寫代碼,以固定每個串字段(由''取代的'每次出現然後包裹結果在'正面和背面)

  • 谷歌(「SQL注入」),讀,回頭,並使用參數替代


注意重寫代碼: 「華麗」,如「花蓮無限精彩,MAIS CE n'est PAS la guerre「。爲了理智,使用CSV解析器。

+0

令人驚歎的!謝謝約翰 – Sandeep 2010-07-29 12:09:17