使用SQL Server Bulk insert of CSV file with inconsistent quotes(CsvToOtherDelimiter选项)作为我的基础,我发现了RemoveCSVQuotes部分的一些奇怪[它从包含逗号的引用字符串中删除了最后一个字符!]。那么......重写那一点(也许是一个错误?)
一个问题是客户问'这样的数据怎么样?'
""17.5179C,""
我假设如果我想继续使用CsvToOtherDelimiter解决方案,我必须修改RegExp ......但它超越了我......最好的方法是什么?
澄清一下:在使用格式文件运行批量插入之前,我们使用C#将文件预处理为以管道分隔的格式。速度非常重要。
答案 0 :(得分:0)
要将CSV字符串转换为元素列表,您可以编写一个程序来跟踪状态(引号或引号外),因为它一次处理字符串一个字符,并发出它找到的元素。 CSV引用的规则是weird,因此您需要确保有足够的测试数据。
状态机可以这样:
这应该正确扫描像:
这样的东西另一种方法是找到一些能够做得很好的现有库。当然,CSV很常见,必须存在这样的东西?
编辑:
你提到速度至关重要,所以我想指出(只要引用的字符串不允许包含换行符......)每行可以并行独立处理。
答案 1 :(得分:0)
您的链接中接受的答案始于:
您需要预处理文件,期间。
为什么不将你的csv转换为xml?然后,您可以在存储到数据库之前根据xsd验证数据。
答案 2 :(得分:0)
我最终使用了我不知道的csv解析器(作为我们的代码生成工具的一部分) - 并注意到“”17.5179C,“”无效并将导致错误。