【问题标题】:C# CSVhelper in record delimiters into a listC# CSVhelper 将记录分隔符放入列表
【发布时间】:2015-03-02 03:08:04
【问题描述】:

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

【问题讨论】:

  • 而问题究竟是什么......???我查看了您的代码,发现一个问题是,ImageURLS 是图像类型的集合,您不能在其中添加字符串。
  • 问题是我需要分割成一个单独的记录,比如 1.jpg|2.jpg|3.jpg。我需要获取 1.jpg,将其添加到我的收藏中,跳过 |并重复。我不知道如何在单个记录本身中执行此操作。
  • 你的单条记录包含什么?

标签: c# asp.net-mvc csvhelper


【解决方案1】:

我知道这是一个老问题,但您需要做的是创建一个继承自 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());
        }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多