前言
解析Excel有知名的NPOI库,(Java语言是POI),但是NPOI是不支持解析csv的。
csv本质上也是文本文件,可以进行差异对比,更利于解决冲突。
本文对解析csv的几个.net的开源库进行调研
CSVHelper:https://github.com/JoshClose/CsvHelper
CSVHepler中文文档:https://segmentfault.com/a/1190000015396713
性能测试
本次性能测试结果来自:.NET Core中的CSV解析库
当测试100000行数据的时候
当测试1000000行数据的时候
从测试结果上看
Tiny Csv Parser的效率比CSVHelper高很多,内存占用也少很多。
最终结论
当不需要支持字符串换行的时候,请使用Tiny Csv Parser
当需要支持字符串换行的时候,请使用CSVHelper
测试csv
第二行中有人为换行符,在Tiny Csv 和 csv中会解析不出来,而CSVHelper则可以
Make | Model | Comment |
---|---|---|
内容1 | 内容2 | 这是一个换行, 的内容 |
内容2-1 | 内容2-1 | 单行注释 |
CSVHelper示例
如果要读取某行的原始数据,基本内容是在 csvReader.Context
字段
public static void ParseCsvDemo(string filePath)
{
CsvReader csvReader = null;
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(fileStream, Encoding.GetEncoding("GB2312")))
{
csvReader = new CsvReader(reader);
//设置之后,不读取第一列,且列数也会减少
// csvReader.Configuration.HasHeaderRecord = false;
int rowCount = 0;
while (csvReader.Read())
{
//列数
var columnCount = csvReader.Context.Record.Length;
//每行的原始数据
var raw = csvReader.Context.RawRecord;
rowCount = rowCount + 1;
if (rowCount == 2)
{
var fileName = csvReader.GetField<string>(2);
Console.WriteLine("输出名:{0}", fileName);
}
Console.WriteLine("行:{0} ,列:{1},内容:{2}", rowCount, columnCount, raw);
}
}
}
}
注:对于csvhelper提供的映射关系(把表的一行数据结构转成 class类型),我未使用到,因为我们主要是提取表的数据。
使用情景
使用C#开发的导表工具,可以导出excel和csv,支持把excel数据插入到SQL数据库,且Excel的格式可以自定义。
这个项目已开源,可参考我之前的文章:
TableML-GUI篇(C# 编译/解析 Excel/CSV工具)
遇到问题
问题:未能加载文件或程序集,或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配
解决方案: 使用nuget更新使用到的库或者检查库所依赖的.net framework版本和项目的基于的.net framework版本是否一致。
.net解析csv(C#导表工具)的更多相关文章
-
解析csv数据绘制曲线图
一个解析csv数据的小工具,所做项目中要查看脉冲图谱,经理就让我这个刚入职的小萌新写了个小程序.同事将csv格式的脉冲数据发给我,我的想法就是,将这些csv里的数据作为纵轴,x++为横轴,绘制出折线图 ...
-
CSV.js – 用于 CSV 解析和编码的 JS 工具库
逗号分隔值(CSV )文件用于以以纯文本的形式存储表格化数据(数字和文本). CSV 文件包含任意数量的记录,通过某种换行符分隔,每条记录由字段,其他一些字符或字符串分隔,最常用的是文字逗号或制表符. ...
-
【游戏开发】Excel表格批量转换成lua的转表工具
一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游 ...
-
Postgresql的导表
背景 前面已经介绍了常用的备份与恢复了,接下来介绍一下导表. 正文 很多情况,会有把数据导出的需求,轻重缓急总会有特别紧急的情况,但是又不是专业干db的人,还是记录下来,以防不时之需. 针对于导表,个 ...
-
java opencsv解析csv文件
记一次使用opencsv解析csv文件时碰到的坑 最近在开发过程中需要解析csv文件,公司用的解析工具是opencsv,在根据opencsv的官方文档去解析时发现csv文件中含有繁体字,使用其自带的C ...
-
使用ANTLR解析CSV和JSON
再续 ANTLR专题 ,有了前面的基础,下面开始用ANTLR写一些有趣且实用的程序. CSV和JSON这两种数据格式对软件开发人员来说最熟悉不过了,一般读写CSV或JSON格式的数据都会借助现成的.比 ...
-
MindMup 是一个开源的、在线的、简单的思维导图工具
MindMup是一个开源.在线的思维导图工具:它有以下特点: 开源 在线 导图可存放在网站(公有,要是在不同的终端浏览的话需要记住导图的网址)或google driver(私有),无用户名密码 很方便 ...
-
php解析.csv文件
public function actionImport() { //post请求过来的 $fileName = $_FILES['file']['name']; $fileTmpName = $_F ...
-
支持MySql的数据库自动分表工具DBShardTools发布
支持MySql的数据库自动分表工具DBShardTools发布 前段时间参与了公司的一个项目,这个项目的特点是数据量.访问量都比较大,考虑使用数据库水平分表策略,Google了大半天,竟然没有找到分表 ...
随机推荐
-
Linux 常用命令(持续补充)
常用命令: command &:将进程放在后台执行 ctrl + z:暂停当前进程 并放入后台 jobs:查看当前后台任务 bg( %id):将任务转为后台执行 fg( %id):将任务调回前 ...
-
相机变换与Ray-Casting
p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify; orphans: 0; widows ...
-
开源一个C#写的Android和IOS都能跑的 打击感强的RPG玩玩。
攒到 250楼再统一发一次代码,各位 给力啊 156楼之前的兄弟 都已经发送代码了!各位查收一下! 156楼之后的兄弟要晚上统一发送 200楼之前的兄弟都已经发送代码了! 各位查收一下!!!顺便 ...
-
Angular.js表单以及与Bootatrap的使用
首先从angular.js的目录开始,如下图,知道了我们要学什么,然后再开始有目的的学习与对比. 1.从表达式开始: ng-app指令初始化一个 AngularJS 应用程序. ng-init指令初始 ...
-
JNI NDK开发Crash错误定位 调试
总结: 搜索backtrace 然后: $ /d/android-ndk-r10c/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86 ...
-
rnqoj-82-又上锁妖塔-dp
又是一个敢想就敢做的题目... 同时记录更新两个状态 dp[i] :第i层是飞上去的 df[i] :第i层是走上去的 dp[i]=min(df[i-1],df[i-2]); df[i]=min(dp ...
-
HDOJ 2058 The sum problem
Problem Description Given a sequence 1,2,3,--N, your job is to calculate all the possible sub-sequen ...
-
Oracle day03 连表查询
为什么要表连接进行查询? 查询部门名称为SALES的员工信息 如何进行表的连接查询? 两种方式:Sql 1992 和sql1999 sql1992sql分类 1.笛卡尔积 (表乘表) 2. ...
-
重开Vue2.0
目录: 内容: 一.Vue内部指令: 1.v-if v-else&v-show v-if与v-show都是选择性显示内容的指令,但是二者之间有区别: 1.v-if:判断是否加载,在需要的时候加 ...
-
[原][unreal][UE][spark]分析unreal engine 虚幻引擎的粒子编辑器:Cascade
参考:https://www.raywenderlich.com/270-unreal-engine-4-particle-systems-tutorial (使用了一个飞机射击游戏的粒子来展示,全英 ...