我想从CSV文件导入数据,但有些单元格在字符串值中包含逗号。如何识别哪个逗号是单独的,哪个是单元格内容?
答案 0 :(得分:5)
使用TextFieldParser:usage
using Microsoft.VisualBasic.FileIO; //Microsoft.VisualBasic.dll
...
using(var csvReader = new TextFieldParser(reader)){
csvReader.SetDelimiters(new string[] {","});
csvReader.HasFieldsEnclosedInQuotes = true;
fields = csvReader.ReadFields();
}
答案 1 :(得分:1)
一般情况下,不要自己编写导入文件。
我对FileHelpers lib有很好的经验。 http://www.filehelpers.com/
事实上,我希望你的领域被引用。 Filehelpers支持开箱即用。
否则你无能为力。
答案 2 :(得分:0)
除非你在字符串周围加上引号,否则你就会被大量引用,因此引用和引用逗号"分隔符样式。如果您可以控制导出设施,那么您必须选择"附加字符串引号"或将分隔符更改为波浪号或克拉符号。
如果不好,那么你必须写一些代码。如果你发现" a..z"然后开始计算逗号,然后继续通过字符串,直到你检测到[0..9],即使这样,这也会有问题,因为人们可以在他们的文本中放置[0..9]。在最佳这将是一个尽力而为的过程。你必须知道你什么时候在你的角色,什么时候你不会在chars。我怀疑甚至正则表达式都会对你有所帮助。
我唯一能想到的是运行数据并查找逗号。然后查看逗号之前和之后。如果你被字符包围,那么用替换字符替换逗号,例如克拉" ^"符号或波浪线"〜"。然后正常处理文件,然后返回并用逗号替换备用字符。
祝你好运。答案 3 :(得分:0)
使用FileHelper是defnitley的方法。他们为您构建所有逻辑做得非常出色。我遇到了同样的问题,我必须解析一个包含逗号作为该字段一部分的CSV文件。而这个实用程序完成了这项工作。您所要做的就是在字段
上使用fillowing属性 [FieldQuoted('"', QuoteMode.OptionalForBoth)]
详细信息http://www.filehelpers.com/forums/viewtopic.php?f=12&t=391
答案 4 :(得分:0)
我们也可以使用RegEx。
Regex CSVParser = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
String[] Fields = CSVParser.Split(Test);