正如其他人所说的那样,自己的CSV解析器很难并且容易出错。我个人的偏好在于与FileHelpers库,并告诉你如何好,易于它是我所包含您数据的工作示例:
using System;
using FileHelpers;
namespace ConsoleApplication1
{
internal class Program
{
public static void Main()
{
/*
Sample data from TestData.csv
"Symbol","Date","Expiry","StrikePrice","Open","High","Low","Close"
"MSF","20090913","03032012","1.233","1.1","14.54","0.07","14.11"
"APL","20111225","31122011","30.09","31.1","33.33","29.11","33.13"
*/
var engine = new FileHelperEngine<StockModel>();
engine.Options.IgnoreFirstLines = 1; // skip the header line
StockModel[] stocks = engine.ReadFile(@"TestData.csv");
Console.Read();
}
}
[DelimitedRecord(",")]
public class StockModel
{
[FieldQuoted('"', QuoteMode.AlwaysQuoted)]
public string Symbol;
[FieldQuoted('"', QuoteMode.AlwaysQuoted)]
[FieldConverter(ConverterKind.Date, "ddMMyyyy")]
public DateTime Date;
[FieldQuoted('"', QuoteMode.AlwaysQuoted)]
[FieldConverter(ConverterKind.Date, "ddMMyyyy")]
public DateTime Expiry;
[FieldQuoted('"', QuoteMode.AlwaysQuoted)]
[FieldConverter(ConverterKind.Decimal, ".")]
public decimal StrikePrice;
[FieldQuoted('"', QuoteMode.AlwaysQuoted)]
[FieldConverter(ConverterKind.Decimal, ".")]
public decimal Open;
[FieldQuoted('"', QuoteMode.AlwaysQuoted)]
[FieldConverter(ConverterKind.Decimal, ".")]
public decimal High;
[FieldQuoted('"', QuoteMode.AlwaysQuoted)]
[FieldConverter(ConverterKind.Decimal, ".")]
public decimal Low;
[FieldQuoted('"', QuoteMode.AlwaysQuoted)]
[FieldConverter(ConverterKind.Decimal, ".")]
public decimal Close;
}
}
[停止滚动您自己的CSV分析器!](http://secretgeek.net/csv_trouble.asp) – Reniuz
您不应该重新发明轮子,使用现有的csv解析器之一像这样:http:// www。 codeproject.com/Articles/9258/A-Fast-CSV-Reader –
正如其他人所说,你应该真的使用第三方框架,如FileHelpers – Kane