使用 CSVHelper 无需 Header 即可读取 CSV 文件
Read CSV files without Header using CSVHelper
我有很多没有header的CSV文件,需要在C#中阅读。我手动将 header 添加到这些文件之一,并使用以下代码使用 CSVHelper 我可以读取文件并在 GridView 中显示它们。
现在我的问题是,没有 header 我如何读取这些文件?或者如何在第一行使用 CSVHelper 添加 header(新记录)?
public Form1()
{
InitializeComponent();
List<Festival> records;
var config = new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = ";" };
using (var reader = new StreamReader(@"File8.csv"))
using(var csv = new CsvReader(reader, config))
{
records = csv.GetRecords<Festival>().ToList();
}
dataGridView1.DataSource = records;
}
Class
public class Festival
{
public string Day { get; set; }
public string Start { get; set; }
public int Lenght { get; set; }
public string FilmName { get; set; }
public float Rating { get; set; }
}
csv 样本
Mi;22:15;110;A;8
Mi;19:00;106;B;8
Mi;19:15;97;C;8.2
向目标成员添加列索引映射属性:
public class Festival
{
[Index(0)]
public string Day { get; set; }
[Index(1)]
public string Start { get; set; }
[Index(2)]
public int Lenght { get; set; }
[Index(3)]
public string FilmName { get; set; }
[Index(4)]
public float Rating { get; set; }
}
并在配置中指定HasHeaderRecord = false
:
var config = new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = ";", HasHeaderRecord = false };
如果不想修改目标模型,implement a ClassMap
instead:
public sealed class FestivalMap : ClassMap<Festival>
{
public FooMap()
{
Map(f => f.Day).Index(0);
Map(f => f.Start).Index(1);
Map(f => f.Lenght).Index(2);
Map(f => f.FilmName).Index(3);
Map(f => f.Rating).Index(4);
}
}
并在获取记录之前像这样注册(您仍然需要在配置中指定HasHeaderRecord = false
):
csv.Context.RegisterClassMap<FestivalMap>();
records = csv.GetRecords<Festival>().ToList();
我有很多没有header的CSV文件,需要在C#中阅读。我手动将 header 添加到这些文件之一,并使用以下代码使用 CSVHelper 我可以读取文件并在 GridView 中显示它们。
现在我的问题是,没有 header 我如何读取这些文件?或者如何在第一行使用 CSVHelper 添加 header(新记录)?
public Form1()
{
InitializeComponent();
List<Festival> records;
var config = new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = ";" };
using (var reader = new StreamReader(@"File8.csv"))
using(var csv = new CsvReader(reader, config))
{
records = csv.GetRecords<Festival>().ToList();
}
dataGridView1.DataSource = records;
}
Class
public class Festival
{
public string Day { get; set; }
public string Start { get; set; }
public int Lenght { get; set; }
public string FilmName { get; set; }
public float Rating { get; set; }
}
csv 样本
Mi;22:15;110;A;8
Mi;19:00;106;B;8
Mi;19:15;97;C;8.2
向目标成员添加列索引映射属性:
public class Festival
{
[Index(0)]
public string Day { get; set; }
[Index(1)]
public string Start { get; set; }
[Index(2)]
public int Lenght { get; set; }
[Index(3)]
public string FilmName { get; set; }
[Index(4)]
public float Rating { get; set; }
}
并在配置中指定HasHeaderRecord = false
:
var config = new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = ";", HasHeaderRecord = false };
如果不想修改目标模型,implement a ClassMap
instead:
public sealed class FestivalMap : ClassMap<Festival>
{
public FooMap()
{
Map(f => f.Day).Index(0);
Map(f => f.Start).Index(1);
Map(f => f.Lenght).Index(2);
Map(f => f.FilmName).Index(3);
Map(f => f.Rating).Index(4);
}
}
并在获取记录之前像这样注册(您仍然需要在配置中指定HasHeaderRecord = false
):
csv.Context.RegisterClassMap<FestivalMap>();
records = csv.GetRecords<Festival>().ToList();