C#使用Linq to csv读取.csv文件数据
前言:今日遇到了一个需要读取CSV文件类型的EXCEL文档数据的问题,原本使用NPOI的解决方案直接读取文档数据,最后失败了,主要是文件的类型版本等信息不兼容导致。其他同事有使用linq to csv的Nuget包,获取CSV文件数据的方式,感觉写法非常简单,且很快实现了我的需求,现分享给大家参考使用:
LinqToCsv官方资料:https://www.codeproject.com/Articles/25133/LINQ-to-CSV-library
1-引用Nuget包:LinqToCsv:https://www.nuget.org/packages/LinqToCsv
2-创建CSV帮助类:
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()
{
//首列数据是否含有列名
FirstLineHasColumnNames = true,
//是否启用CsvColumn属性标记
EnforceCsvColumnAttribute = true,
//是否忽略未知的行
IgnoreUnknownColumns = true,
//是否启用OutputFormat格式转换数据
UseOutputFormatForParsingCsvValue = true,
//是否启用属性下标读取数据
UseFieldIndexForReadingData = true,
//文本编码格式
TextEncoding = Encoding.UTF8
};
return _csv.Read<T>(path, _fileDescription).ToList();
}
}
3-创建接受类T:
备注:
特性-Name:表示映射的列名;
FieldIndex:映射的位置;举例中未按照顺序写全,请自行补充;
CanBeNull:是否可以为Null;
OutputFormat:数据格式化字符串方式; 启用时间格式使用yyyyMMddHHmmss自己根据数据调整; 含有小数点位的标记为C; 其他的类型请查阅资料
public class WP
{
/// <summary>
/// 管理代码
/// </summary>
[CsvColumn(Name = "Administration Code", FieldIndex = , CanBeNull = false)]
public string AdministrationCode { get; set; }/// <summary>
/// 日期
/// </summary>
[CsvColumn(Name = "Date", FieldIndex = , CanBeNull = false, OutputFormat = "yyyy-MM-dd HH:mm:ss")]
public DateTime Date { get; set; }/// <summary>
/// 支付金额
/// </summary>
[CsvColumn(Name = "Amount", FieldIndex = , CanBeNull = false, OutputFormat = "C")]
public decimal Amount { get; set; }
}
4-使用方式:
CSVHelper.Read<OrderTransaction.WP>(filePath);
5-待解决疑问:
上面的代码可以解决规范的CSV文件数据的读取(即CSV文件中不包含其他杂乱数据),如果文档的前几行含有一些其他说明信息的话,那么数据的读取可能遇到问题。而包里并没有提供可以设置开始读取数据的行数,所以,有点遗憾!
C#使用Linq to csv读取.csv文件数据的更多相关文章
- spark.read.csv读取CSV文件 ArrayIndexOutOfBoundsException报错
通过 spark.read.csv读取CSV文件时,遇到 到 ArrayIndexOutOfBoundsException报错,初步判断是缺少参数导致,放百度看看,没找引起问题相关的参数. 第一个看到 ...
- sas通过IMPORT过程读取外部文件数据
SAS通过IMPORT过程读取外部文件数据 使用IMPORT过程导入带分隔符的文件外,Microsoft Access数据库文件.Miscrosft Excel工作簿. dBase文件.JMP文件.S ...
- 上传读取Excel文件数据
/// <summary> /// 上传读取Excel文件数据 /// 来自http://www.cnblogs.com/cielwater /// </summary> // ...
- Unity 用C#脚本读取JSON文件数据
读取JSON文件数据网上有很多方法吗,这里采用SimpleJSON,关于SimpleJSON的介绍参考以下链接:http://wiki.unity3d.com/index.php/SimpleJSON ...
- spring 框架的xml文件如何读取properties文件数据
spring 框架的xml文件如何读取properties文件数据 第一步:在spring配置文件中 注意:value可以多配置几个properties文件 <bean id="pro ...
- Android - 读取JSON文件数据
Android读取JSON文件数据 JSON - JavaScript Object Notation 是一种存储和交换文本信息的语法. JSON对象在花括号中书写.用逗号来分隔值. JSON数组在方 ...
- python使用h5py读取mat文件数据,并保存图像
1 安装h5py sudo apt-get install libhdf5-dev sudo pip install h5py 假设你已经安装好python和numpy模块 2 读取mat文件数据 i ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- python3 读取txt文件数据,绘制趋势图,matplotlib模块
python3 读取txt文件数据,绘制趋势图 test1.txt内容如下: 时间/min cpu使用率/% 内存使用率/% 01/12-17:06 0.01 7.61 01/12-17:07 0.0 ...
随机推荐
- Codeforces Round #451 (Div. 2) A B C D E
Codeforces Round #451 (Div. 2) A Rounding 题目链接: http://codeforces.com/contest/898/problem/A 思路: 小于等于 ...
- redis数据类型--zset
数据结构: zset是有序的,不运行重复的,带有分值score的 数据结构对比: 操作命令: zadd myzset 10 java 20 python 20 ruby 40 mysql 50 php ...
- 关于CSS选择器连续性的问题
在html中有以下结构: --- ----- <div class="row100"> <div class="col"> <di ...
- ST MCU的UID
ST MCU芯片中的绝大部分都内置一串96位唯一标识码[unique ID].时不时有人问起这个东西,尤其最近感,觉询问它的人甚是热闹.这里跟大家一起简单分享下. 上面说了ST MCU芯片中的绝大部分 ...
- 香港6合彩数据分析 V1.0
最近写了个VBA小工具,分析香港6合彩中奖的概率,得出的结果不尽人意,但至少不会让你赔钱,嘿嘿! 点此链接获取 密码:3u65
- 常见的linux快捷方式和英文错误提示
第5章 linux常见的快捷方式 Ctrl +l 清屏的意思 2 Ctrl +c 退出当前的进程 3 Ctrl +w 删除光标到空格之间的信息 4 Ctrl +a 快速移动到光标行首 5 Ctrl + ...
- flask之分析线程和协程
flask之分析线程和协程 01 思考:每个请求之间的关系 我们每一个请求进来的时候都开一个进程肯定不合理,那么如果每一个请求进来都是串行的,那么根本实现不了并发,所以我们假定每一个请求进来使用的是线 ...
- plsql修改某一行数据
plsql修改某一行数据时, 在查询语句后面加上for update,再点击
- 用canvas写飞机大战
1.老规矩,当我们开始做项目的时候,我们第一步就是要进行分析,当我们的游戏开始做的时候我们要把一整个游戏分成五个阶段来写: 五个阶段和我方飞机的生命值,还有游戏的得分情况如下: //游戏欢迎状态 co ...
- python的memory_profiler模块使用
本文主要介绍了python内存分析工具: memory_profiler,可以展示每一行代码执行所增加的内存,方便做内存调优和排除bug memory_profiler是第三方模块,需要安装才能使用 ...