C#textFieldParser错误
我有以下代码段读取一个CSV文件。 我正在阅读不符合标准的阅读线。 比如像一条线
105,"XXX Bank Azerbaijan" CJSC,1078 ,AZ,Baku,"xxx street",Nasimi district
自从第二场“XXX阿塞拜疆银行”CJSC在逗号旁边引用不足之后就进入了领域。 但是,当我在Excel中打开此文件时,它没有任何问题,正确地分隔字段为:
105|XXX Bank Azerbaijan CJSC|1078|AZ|Baku|xxx street|Nasimi district
我在哪里使用|
作为列分隔符。 有没有办法使用TextFieldParser
具有相同的效果,否则我将需要使用不同的csv阅读器。
using (TextFieldParser parser = new TextFieldParser(fileName, Encoding.GetEncoding("windows-1252"))) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.TrimWhiteSpace = true; parser.HasFieldsEnclosedInQuotes = true; parser.ReadLine(); // Reads dummy header while (!parser.EndOfData) { try { string[] fieldRow = parser.ReadFields(); T fieldsClass = new T(); fieldsClass.Initialize(fieldRow); data.Add(fieldsClass); rowCount++; } catch { Console.WriteLine("Skipping line" + parser.ErrorLine); } } }
首先,如果这实际上是格式不正确的数据,那么最好的办法是按照Hans Passant的build议,
最好的办法是发回文件,让程序员修正他的代码中的错误。 唯一可以做的其他事情是在让parsing器看到它之前自己修改string。
然而,如果这是正确的格式,根据无论什么规格的协议返回的时候,那么你可以尝试设置parser.HasFieldsEnclosedInQuotes = false; 这将得到它来parsing,但它不会像在你的示例Excel导入中去除双引号。 这也将导致textfieldparser将“foo,bar”parsing为“foo”和“bar”而不是“foo,bar”(一个字段)。 这可能可以通过指定一个不同的分隔符来被数据源使用,而这个分隔符在字段值中间不会被发现。
更改规格可能会更容易使用| 作为一个字段分隔符而不是,并且处理每个字段中的双引号,与将规范更改为只允许在字段分隔符之前和之后立即使用双引号相比。