1

在我的 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);
    }
4

1 回答 1

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());
        }
}
于 2015-06-09T21:10:39.060 回答