我正在使用 C# TextFieldParser 类来开发 CSV 解析器。
我的 CSV 数据以
然而,有时数据行单元格中也可能有
似乎产生了以下结果(正确):
我的 CSV 数据以
,
作为分隔符,并且字符串被 "
字符包围。然而,有时数据行单元格中也可能有
"
,这似乎会导致解析器抛出异常。
这是我目前的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 , c
d,e,f
gh,ij
如何处理行单元格数据中的 "
?
更新
根据 Tim Schmelter
的回答,我已将我的代码修改为以下内容:
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
。 - Tim Schmelter"11" Wide"
,我需要能够解析它... - Latheesan