拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用CSVHelper读取没有标题的CSV档案

使用CSVHelper读取没有标题的CSV档案

白鹭 - 2022-01-23 2181 0 0

我有很多没有标题的 CSV 档案,需要在C# 中读取它我手动将标题添加到这些档案之一,并使用以下代码使用CSVHelper我可以读取档案并将它们显示在 GridView 中。

现在我的问题是,如何在没有标题的情况下读取这些档案?或者如何在第一行使用CSVHelper添加标题(新记录)

 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;
    }

班级

 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

uj5u.com热心网友回复:

向目标成员添加列索引映射属性:

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 };

如果不需要修改目标模型,请改为实作ClassMap

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();
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *