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文件中含有不规范的数据了!不规范数据处理:通过程序的方式自己过滤掉;数据类型转换:再定义一个含有正常类型属性的类,自己转换吧。

  • 相关阅读:
    YZR.Data 事务处理(Tranaction)
    啊Ran讲微信开发(.net) :公众号(服务号)+自定义服务器(OAuth授权登录)
    啊Ran讲微信开发(.net) 目录结构
    啊Ran讲微信开发(.net) :公众号(订阅号)+自定义服务器(自定义菜单)
    js和jQuery的总结
    Javascript重要解析
    IntelliJ-项目配置,解决no artifacts的warnings
    农夫过河问题(java版)
    redis安装常见问题
    idea 项目中 maven 编译出错Fatal error compiling: 无效的目标发行版: 1.8 -> [Help 1] 解决方法
  • 原文地址:https://www.cnblogs.com/lxhbky/p/11885408.html
Copyright © 2011-2022 走看看