gpt4 book ai didi

c# - 使用 TextFieldParser 时如何跳过格式错误的行?

转载 作者:行者123 更新时间:2023-11-30 16:59:48 28 4
gpt4 key购买 nike

我正在使用 TextFieldParser 来解析 csv 文件。如果它是格式正确的 csv,则 Tt 可以正常工作。但是,在某些情况下,某些行的 csv 格式不正确:

111,2222,"3333',4444, 555

我正在使用这样的代码:

using (Microsoft.VisualBasic.FileIO.TextFieldParser MyReader = new
Microsoft.VisualBasic.FileIO.TextFieldParser(@"C:\myData.csv"))
{
MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
MyReader.SetDelimiters(new string[] { "\t", "," });
MyReader.HasFieldsEnclosedInQuotes = true;
MyReader.TextFieldType = FieldType.Delimited;
MyReader.TrimWhiteSpace = true;
//MyReader.

while (!MyReader.EndOfData)
{
try
{
string[] fields = MyReader.ReadFields();
Debug.WriteLine(fields.Length.ToString());
}
catch (Microsoft.VisualBasic.FileIO.MalformedLineException ex)
{
MessageBox.Show("Line " + ex.LineNumber.ToString() +
"is not valid and will be skipped: " + MyReader.ErrorLine +
"\r\n\r\n" + ex.ToString());
}
}
}

由于某些原因,它捕获了 MalformedLineException,但 MyReader.EndOfData 之后为真,即使它后面有一些行也是如此。

这是设计使然吗?有什么办法让它跳过格式错误的行,并解析它后面的行?

谢谢

最佳答案

我没有找到程序继续读取文件的任何方法。但是试试这段代码。

using Microsoft.VisualBasic.FileIO;
...
private void ReadFunction()
{
using (TextFieldParser MyReader =
new TextFieldParser(@"C:\temp\myData.csv"))
{
int lineRead = 1;
while (!MyReader.EndOfData)
{
try
{
string[] fields = ParseHelper(MyReader.ReadLine(), lineRead++);
Console.WriteLine(fields.Length.ToString());
}
catch (MalformedLineException ex)
{
Console.WriteLine(ex.Message);
}
}
Console.ReadKey();
}
}

private string[] ParseHelper(String line, int lineRead)
{
MemoryStream mem = new MemoryStream(ASCIIEncoding.Default.GetBytes(line));
TextFieldParser ReaderTemp = new TextFieldParser(mem);
ReaderTemp.TextFieldType = FieldType.Delimited;
ReaderTemp.SetDelimiters(new string[] { "\t", "," });
ReaderTemp.HasFieldsEnclosedInQuotes = true;
ReaderTemp.TextFieldType = FieldType.Delimited;
ReaderTemp.TrimWhiteSpace = true;
try
{
return ReaderTemp.ReadFields();
}
catch (MalformedLineException ex)
{
throw new MalformedLineException(String.Format(
"Line {0} is not valid and will be skipped: {1}\r\n\r\n{2}",
lineRead,ReaderTemp.ErrorLine, ex));
}
}

而不是使用 using (Microsoft.VisualBasic.FileIO.TextFieldParser MyReader = new Microsoft.VisualBasic.FileIO.TextFieldParser(@"C:\temp\myData.csv")) 你可以使用 FileStrean读取文本文件并逐行传递给函数 ParseHelper;

希望对你有帮助

关于c# - 使用 TextFieldParser 时如何跳过格式错误的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23230532/

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