CSV文本文件解析器与TextFieldParser – MalformedLineException
我正在使用C# TextFieldParser类处理CSV解析器。
我的CSV数据被删除,
字符串由"
字符"
括起来。
但是,有时数据行单元格也可能具有"
似乎使解析器抛出exception”。
到目前为止,这是我的C#代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using Microsoft.VisualBasic.FileIO; namespace CSV_Parser { class Program { static void Main(string[] args) { // Init string CSV_File = "test.csv"; // Proceed If File Is Found if (File.Exists(CSV_File)) { // Test Parse_CSV(CSV_File); } // Finished Console.WriteLine("Press any to exit ..."); Console.ReadKey(); } static void Parse_CSV(String Filename) { using (TextFieldParser parser = new TextFieldParser(Filename)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.TrimWhiteSpace = true; while (!parser.EndOfData) { string[] fieldRow = parser.ReadFields(); foreach (string fieldRowCell in fieldRow) { // todo } } } } } }
这是我的test.csv
文件的内容:
" dummy test"s data", b , cd,e,f gh,ij
在我的行细胞数据中处理"
最佳方法是什么?
UPDATE
根据Tim Schmelter's
回答,我将代码修改为以下内容:
static void Parse_CSV(String Filename) { using (TextFieldParser parser = new TextFieldParser(Filename)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = false; parser.TrimWhiteSpace = true; while (parser.PeekChars(1) != null) { var cleanFieldRowCells = parser.ReadFields().Select( f => f.Trim(new[] { ' ', '"' })); Console.WriteLine(String.Join(" | ", cleanFieldRowCells)); } } }
这似乎产生以下(正确):
这是处理引号括起来的字符串,有引号的最佳方法吗?
你可以通过将HasFieldsEnclosedInQuotes
设置为false
来省略引用字符吗?
using (var parser = new TextFieldParser(@"Path")) { parser.HasFieldsEnclosedInQuotes = false; parser.Delimiters = new[]{","}; while(parser.PeekChars(1) != null) { string[] fields = parser.ReadFields(); } }
您可以手动删除引号:
var cleanFields = fields.Select(f => f.Trim(new[]{ ' ', '"' }));