gpt4 book ai didi

c# - 带有 TextFieldParser 的 CSV 文本文件解析器 - MalformedLineException

转载 作者:太空狗 更新时间:2023-10-29 20:27:35 27 4
gpt4 key购买 nike

我正在使用 C# 开发 CSV 解析器 TextFieldParser类。

我的 CSV 数据由 , 分隔,字符串由 " 字符括起来。

但是,有时数据行单元格也可以有一个 ",这似乎使解析器抛出异常。

enter image description here

到目前为止,这是我的 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));
}
}
}

这似乎产生了以下(正确):

enter image description here

这是处理用引号引起来的字符串的最佳方式吗?

最佳答案

能否通过将 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[]{ ' ', '"' }));

关于c# - 带有 TextFieldParser 的 CSV 文本文件解析器 - MalformedLineException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22297562/

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