zoukankan      html  css  js  c++  java
  • C#使用Linq to csv读取.csv文件数据2_处理含有非列名数据的方法(说明信息等)

      第一篇博客为:https://www.cnblogs.com/lxhbky/p/11884474.html

      本文主要是为了解决上面博客遗留的一个含有不规范数据的一种方法,目前暂时没有从包里发现可以从第N行读取数据方法,但是我们可以假设一种情况来兼容目前的数据:

      

      超级假设:假设Excel所有的数据都是我要收集的数据,不管是否有数据或者是不规范的数据,那么我可以将接受类的数据类型统一改为string,其他保持不变。

      (这里注意通过改造属性的set方法来兼容的方式,本人已经试过,行不通;另外也测试了decimal?可为null的数据类型也不行,不是直接蹦了就是各种报错)

      改造接受类如下:

    public class WP
            {
                /// <summary>
                /// 管理代码
                /// </summary>
                [CsvColumn(Name = "Administration Code", FieldIndex = 1)]
                public string AdministrationCode { get; set; }
                /// 日期
                /// </summary>
                [CsvColumn(Name = "Date", FieldIndex = 4)]
                public string Date { get; set; }
                /// <summary>
                /// 支付金额
                /// </summary>
                [CsvColumn(Name = "Amount", FieldIndex = 8)]
                public string Amount { get; set; }
            }

      帮助类略作修改:

      

    public class CSVHelper
        {
            public static List<T> Read<T>(string path, CsvFileDescription fileDescription) where T : class, new()
            {
                CsvContext _csv = new CsvContext();
                return _csv.Read<T>(path, fileDescription).ToList();
            }
            public static List<T> Read<T>(string path) where T : class, new()
            {
                CsvContext _csv = new CsvContext();
                CsvFileDescription _fileDescription = new CsvFileDescription()
                {
                    //(默认)数据分隔符(默认“,”)
                    SeparatorChar = ',',
                    //(由true改为false,当成数据处理)首列数据是否含有列名
                    FirstLineHasColumnNames = false,
                    //是否启用CsvColumn属性标记
                    EnforceCsvColumnAttribute = true,
                    //是否忽略未知的行
                    IgnoreUnknownColumns = true,
                    //(移除属性格式化配置)是否启用OutputFormat格式转换数据
                    //UseOutputFormatForParsingCsvValue = true,
                    //是否启用属性下标读取数据
                    UseFieldIndexForReadingData = true
                };
                return _csv.Read<T>(path, _fileDescription).ToList();
            }
    
        }

      总结:上述代码可兼容CSV文件中含有不规范的数据了!不规范数据处理:通过程序的方式自己过滤掉;数据类型转换:再定义一个含有正常类型属性的类,自己转换吧。

  • 相关阅读:
    C++默认参数
    C语言中volatile关键字的作用
    CURL超时处理
    C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
    unix时间戳和localtime
    !!的用处
    linux中grep和egrep的用法
    非阻塞,send后马上close消息能成功发出去吗
    .hpp与.h的区别
    14课作业答疑
  • 原文地址:https://www.cnblogs.com/lxhbky/p/11885408.html
Copyright © 2011-2022 走看看