用C#解析C#中的CSV文件
有没有一种默认/官方/推荐的方式来解析C#中的CSV文件? 我不想推出我自己的解析器。
此外,我还看到过有人使用ODBC / OLE DB通过Text驱动程序读取CSV文件,很多人因为它的“缺点”而不愿意这样做。 这些缺点是什么?
理想情况下,我正在寻找一种方法,通过它可以按列名称读取CSV,并使用第一条记录作为标题/字段名称。 一些给出的答案是正确的,但基本上将文件反序列化为类。
让图书馆为您处理所有细节问题! :-)
检查FileHelpers并保持干爽 - 不要重复自己 - 无需重新发明轮子gazillionth时间....
您基本上只需要通过公共类(以及诸如默认值,替换NULL值等精心设计的属性)来定义数据的形状(CSV中各行中的字段),点文件中的FileHelpers引擎以及宾果 - 您将从该文件中取回所有条目。 一个简单的操作 - 卓越的性能!
CSV解析器现在是.NET Framework的一部分。
添加对Microsoft.VisualBasic.dll的引用(在C#中正常工作,不介意名称)
using (TextFieldParser parser = new TextFieldParser(@"c:temptest.csv"))
{
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
//Process row
string[] fields = parser.ReadFields();
foreach (string field in fields)
{
//TODO: Process field
}
}
}
文档在这里 - TextFieldParser类
CsvHelper(我维护的一个库)会将CSV文件读入自定义对象。
var csv = new CsvReader( File.OpenText( "file.csv" ) );
var myCustomObjects = csv.GetRecords<MyCustomObject>();
有时候你并不拥有你想要阅读的对象。 在这种情况下,您可以使用流畅映射,因为您无法在类上放置属性。
public sealed class MyCustomObjectMap : CsvClassMap<MyCustomObject>
{
public MyCustomObjectMap()
{
Map( m => m.Property1 ).Name( "Column Name" );
Map( m => m.Property2 ).Index( 4 );
Map( m => m.Property3 ).Ignore();
Map( m => m.Property4 ).TypeConverter<MySpecialTypeConverter>();
}
}
链接地址: http://www.djcxy.com/p/45475.html
上一篇: Parsing CSV files in C#, with header
下一篇: Stop Excel from automatically converting certain text values to dates