C#CSVhelper将记录分隔符放入列表中

时间:2015-03-02 03:08:04

标签: c# asp.net-mvc csvhelper

在我的CSV中,主文件由","分隔。这是正常的。但是,在我的一些记录中,它们由" |"分隔,这就是问题所在。

我的模特:

public class Inventory
{
    public string Year { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public string Trim { get; set; }
    public string Body { get; set; }
    public ICollection<Images> ImageURLS { get; set; }
}

public class Images
{
    public string ImageURLS { get; set; }
}

带有伪代码的我的控制器:

我需要读取记录,如果它看到|,停止,添加到图像列表,跳过|并重复直到结束。

public ActionResult Inventory()
    {
        var listInventory = new List<Inventory>();
        try
        {

            var reader = new CsvReader(new StreamReader(Server.MapPath("~/9712.txt")));
            var invList = reader.GetRecords<Inventory>();

            foreach (var i in invList)
            {
                var vehicle = new Inventory();

                vehicle.Make = i.Make;

                bool split = true;

                while (split)
                {
                    read the string
                    if ("|") then stop.
                    add to vehicle.ImageURLS.Add(string);
                    skip ("|")
                } 
                listInventory.Add(vehicle);
            } 
        }
        catch
        {

        } 
        return View(listInventory);
    }

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但您需要做的是创建一个继承自CsvClassMap的类(根据CsvHelper文档)。在其中,您需要创建自定义转换器。它应该看起来像:

public sealed class MappingClass : CsvClassMap<Inventory>
    {
        public MappingClass()
        {
            AutoMap();
            Map(m => m.ImageURLS).ConvertUsing(r => r.GetField("Images")
                .Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(x => new Image{ImageURLS = x}).ToList());
        }
}