.net解析csv(C#导表工具)
前言
解析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#导表工具)的更多相关文章
- Excel导表工具-开源
功能 支持int.float.bool.string基础类型 支持数组 支持kv 支持枚举 支持unity类型vector3,vector2,color 自动生成csharp类 单个excel中多个s ...
- 解析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 ...
随机推荐
- SQL 高效运行注意事项(二)
SQL Server高效运行总的来说有两种方式: 一. 扩容,提高服务器性能,显著提高CPU.内存,解决磁盘I/O瓶颈.硬件的提升是立竿见影的,而且是风险小,在硬件更新换代非常快的年代, 当SQLSe ...
- Sql Server 复制数据库
确实很实用 https://www.cnblogs.com/ggll611928/p/7451558.html
- (转)ceph 常用 运维命令--查看信息 - 不错的文档
下面是测试验证环节 1. 创建一个 pool rbd create foo --size 4 --image-format 2 --image-feature layering 2. 挂载和格式化 r ...
- SQL 高级查询(层次化查询,递归)
SQL 高级查询 前面我们写了一下 SQL 的极简入门,今天来说点高级查询.没看到的朋友可以点击下面链接查看. 1 小时 SQL 极速入门(一) 1 小时 SQL 极速入门(二) 1 小时 SQL 极 ...
- C#Npoi
https://download.csdn.net/download/youhmcq/7725559http://www.cnblogs.com/downmoon/archive/2012/04/11 ...
- Hadoop系列003-Hadoop运行环境搭建
本人微信公众号,欢迎扫码关注! Hadoop运行环境搭建 1.虚拟机网络模式设置为NAT 2.克隆虚拟机 3.修改为静态ip 4. 修改主机名 5.关闭防火墙 1)查看防火墙开机启动状态 chkcon ...
- expect实现自动交互由浅入深
expect实现自动交互由浅入深 作为运维人员可以通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet ...
- 批量执行工具PSSH详解
批量执行工具PSSH详解 pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,使用必须在各个服务器上配置好密钥认证访问. 安装pssh包 yum 安 ...
- .NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.预备知识:数据一致性 关于数据一致性的文章,园子里已经有很多了,如果你还不了解,那么可以通过以下的几篇文章去快速地了解了解,有个感性认 ...
- Java进阶篇设计模式之二 ----- 工厂模式
前言 在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模 ...