我有以下格式的CSV
11000,Christopher,Nolan,MR.,Inception,25993,France,"Lefoullon,Paris",920,Director,*461-7755,33-461-7755,12175,"O'Horner, James",12300,"Glebova, Nathalie",,Christophe.Nolan@movies.com,Capital,NEW
Regarding Java Split Command Parsing Csv File
在此链接中@Mark Byers和@R。 Bemrose建议String[] tokens = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1);
但是如果您在上面的CSV中仔细注意,您会发现"O'Horner, James"
的名称导致问题并导致ORA-0917: missing comma
错误。有没有办法避免它或者必须纠正reg-ex?
有点困惑:-o
答案 0 :(得分:2)
警告:以下所有内容都是闲置的猜测和猜测,因为您没有提供任何验证代码,而且我的palantir正在车间进行预防性维护。
思路:你没有遇到早期"Lefoullon,Paris"
的问题,但你确实遇到"O'Horner, James"
的问题...这表明撇号可能是(无辜的)原因问题。
假设:该字段已成功从CSV中提取为O'Horner, James
...请注意,撇号并非特殊于CSV(并且不会出现在那个华丽的[请参阅注释]正则表达式中)。
然而撇号对SQL很重要;撇号在SQL中引用字符串文字,数据中的撇号必须加倍。
像这样:INSERT INTO ..... VALUES(...,'O''Horner, James', ...);
如果在SQL接口中使用参数替换(应该如此),则将为您完成将数据字段转换为有效的SQL常量。否则
编写代码来修复每个字符串字段(将每个'
替换为''
,然后将结果包装在'
正面和背面)
google(“SQL注入”),使用参数替换读取,重复和重写代码
注:“华丽”,如“C'est magnifique,mais ce n'est pas la guerre”。为了理智,请使用CSV解析器。