gpt4 book ai didi

c# - 使用 TextFieldParser 处理包含未转义双引号的字段

转载 作者:可可西里 更新时间:2023-11-01 08:26:59 24 4
gpt4 key购买 nike

我正在尝试使用 TextFieldParser 导入 CSV 文件.一个特定的 CSV 文件由于其非标准格式而给我带来了问题。有问题的 CSV 的字段用双引号括起来。当特定字段中存在一组额外的未转义双引号时,就会出现问题。

这是一个突出问题的过度简化的测试用例。我正在处理的实际 CSV 文件的格式并不完全相同,并且有几十个字段,其中任何一个都可能包含这些可能棘手的格式问题。

TextReader reader = new StringReader("\"Row\",\"Test String\"\n" +
"\"1\",\"This is a test string. It is parsed correctly.\"\n" +
"\"2\",\"This is a test string with a comma, which is parsed correctly\"\n" +
"\"3\",\"This is a test string with double \"\"double quotes\"\". It is parsed correctly\"\n" +
"\"4\",\"This is a test string with 'single quotes'. It is parsed correctly\"\n" +
"5,This is a test string with fields that aren't enclosed in double quotes. It is parsed correctly.\n" +
"\"6\",\"This is a test string with single \"double quotes\". It can't be parsed.\"");

using (TextFieldParser parser = new TextFieldParser(reader))
{
parser.Delimiters = new[] { "," };
while (!parser.EndOfData)
{
string[] fields= parser.ReadFields();
Console.WriteLine("This line was parsed as:\n{0},{1}",
fields[0], fields[1]);
}
}

有没有办法使用 TextFieldParser 正确解析具有这种格式的 CSV?

最佳答案

我同意 Hans Passant 的建议,即解析格式错误的数据不是您的责任。但是,根据Robustness Principle ,某些面临这种情况的人可能会尝试处理特定类型的畸形数据。我在下面编写的代码适用于问题中指定的数据集。基本上它会检测格式错误行上的解析器错误,根据第一个字符确定它是否被双引号包裹,然后手动拆分/去除所有包裹的双引号。

using (TextFieldParser parser = new TextFieldParser(reader))
{
parser.Delimiters = new[] { "," };

while (!parser.EndOfData)
{
string[] fields = null;
try
{
fields = parser.ReadFields();
}
catch (MalformedLineException ex)
{
if (parser.ErrorLine.StartsWith("\""))
{
var line = parser.ErrorLine.Substring(1, parser.ErrorLine.Length - 2);
fields = line.Split(new string[] { "\",\"" }, StringSplitOptions.None);
}
else
{
throw;
}
}
Console.WriteLine("This line was parsed as:\n{0},{1}", fields[0], fields[1]);
}
}

我确信有可能编造一个失败的病态示例(例如,字段值中与双引号相邻的逗号)但任何此类示例在最严格的意义上可能是不可解析的,而问题行在尽管格式不正确,但该问题仍可破译。

关于c# - 使用 TextFieldParser 处理包含未转义双引号的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16225909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com