当前位置:  开发笔记 > 编程语言 > 正文

使用CsvHelper从单个csv文件中读取多个类

如何解决《使用CsvHelper从单个csv文件中读取多个类》经验,为你挑选了1个好方法。

最近我一直在使用Josh Close'CsvHelper来解析CSV文件,我非常喜欢用于类映射的流畅api.

我正在尝试映射包含多种记录类型的csv文件,文件结构是

C,Comment,Timestamp
I,Class1,Header1,Header2
D,Class1,Data1,Data2
D,Class1,Data1,Data2
...
I,Class2,Header1,Header2,Header3
D,Class2,Data1,Data2,Data3
D,Class2,Data1,Data2,Data3
...
C,Checksum

这是CsvHelper可以处理的东西吗?我已经编写了一个自定义解析器,它基本上可以工作,但它真正做的就是过滤掉特定类的Header和Data字段 - 我真的希望能够做类似的事情

csv.Configuration.RegisterClassMap();
csv.Configuration.RegisterClassMap();

var data1 = csv.GetRecords().ToList();             
var data2 = csv.GetRecords().ToList();

并一次读取文件?这是可能的还是我使用了错误的解析器?

关心戴夫



1> drneel..:

有办法做到这一点; 你只需要手动完成.

    您逐行手动读取csv文件

    检查第一列是否有标识符,表明您需要映射到Class对象.

    检查要映射到的类的第二列.

    将整行映射到给定的类.

    public static void ReadMultiClassCsv()
    {
        var class1Data = new List();
        var class2Data = new List();
    
        using (StreamReader reader = File.OpenText(@"C:\filename.csv"))
        using (var csvReader = new CsvReader(reader))
        {
            //1.  You manually read the csv file row by row
            while (csvReader.Read())
            {
                var discriminator = csvReader.GetField(0);
    
                //2.  Inspect the first column for the discriminator that will indicate that you need to map to a Class object.
                if (discriminator == "D")
                {
                    var classType = csvReader.GetField(1);
    
                    //3.  Inspect the second column for the class to map to.
                    switch (classType)
                    {
                        //4.  Map the entire row to that given class.
                        case "Class1":
                            class1Data.Add(csvReader.GetRecord());
                            break;
                        case "Class2":
                            class2Data.Add(csvReader.GetRecord());
                            break;
                        default:
                            break;
                    }
                }
            }
        }
    }
    

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有