前言

解析Excel有知名的NPOI库,(Java语言是POI),但是NPOI是不支持解析csv的。

csv本质上也是文本文件,可以进行差异对比,更利于解决冲突。

本文对解析csv的几个.net的开源库进行调研

性能测试

本次性能测试结果来自:.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 Excel编译/解析工具

TableML-GUI篇(C# 编译/解析 Excel/CSV工具)

遇到问题

问题:未能加载文件或程序集,或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配

解决方案: 使用nuget更新使用到的库或者检查库所依赖的.net framework版本和项目的基于的.net framework版本是否一致。

.net解析csv(C#导表工具)的更多相关文章

  1. Excel导表工具-开源

    功能 支持int.float.bool.string基础类型 支持数组 支持kv 支持枚举 支持unity类型vector3,vector2,color 自动生成csharp类 单个excel中多个s ...

  2. 解析csv数据绘制曲线图

    一个解析csv数据的小工具,所做项目中要查看脉冲图谱,经理就让我这个刚入职的小萌新写了个小程序.同事将csv格式的脉冲数据发给我,我的想法就是,将这些csv里的数据作为纵轴,x++为横轴,绘制出折线图 ...

  3. CSV.js – 用于 CSV 解析和编码的 JS 工具库

    逗号分隔值(CSV )文件用于以以纯文本的形式存储表格化数据(数字和文本). CSV 文件包含任意数量的记录,通过某种换行符分隔,每条记录由字段,其他一些字符或字符串分隔,最常用的是文字逗号或制表符. ...

  4. 【游戏开发】Excel表格批量转换成lua的转表工具

    一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游 ...

  5. Postgresql的导表

    背景 前面已经介绍了常用的备份与恢复了,接下来介绍一下导表. 正文 很多情况,会有把数据导出的需求,轻重缓急总会有特别紧急的情况,但是又不是专业干db的人,还是记录下来,以防不时之需. 针对于导表,个 ...

  6. java opencsv解析csv文件

    记一次使用opencsv解析csv文件时碰到的坑 最近在开发过程中需要解析csv文件,公司用的解析工具是opencsv,在根据opencsv的官方文档去解析时发现csv文件中含有繁体字,使用其自带的C ...

  7. 使用ANTLR解析CSV和JSON

    再续 ANTLR专题 ,有了前面的基础,下面开始用ANTLR写一些有趣且实用的程序. CSV和JSON这两种数据格式对软件开发人员来说最熟悉不过了,一般读写CSV或JSON格式的数据都会借助现成的.比 ...

  8. MindMup 是一个开源的、在线的、简单的思维导图工具

    MindMup是一个开源.在线的思维导图工具:它有以下特点: 开源 在线 导图可存放在网站(公有,要是在不同的终端浏览的话需要记住导图的网址)或google driver(私有),无用户名密码 很方便 ...

  9. php解析.csv文件

    public function actionImport() { //post请求过来的 $fileName = $_FILES['file']['name']; $fileTmpName = $_F ...

随机推荐

  1. openlayers4 入门开发系列之批量叠加 zip 压缩 SHP 图层篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  2. vue 使用 supermap iclient-classic

    1. 2.在组件中: import "@supermap/iclient-classic/libs/SuperMap-8.1.1-16520"; import { MapVLaye ...

  3. Linux系统监控命令详解

    1. top命令 top命令经常用来监控Linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解. 输 ...

  4. SUSE12SP3-Mycat(4)rule.xml配置详解

    简介 rule.xml 里面就定义了我们对表进行拆分所涉及到的规则定义.我们可以灵活的对表使用不同的分片算法, 或者对表使用相同的算法但具体的参数不同.这个文件里面主要有 tableRule 和 fu ...

  5. ES6 模块化笔记

    ES6 模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量. ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入. // ...

  6. VMware端口映射配置步骤

    1:编辑->虚拟网络编辑器 2:点击NAT模式-->NAT设置 3:注意:主机端口就是物理机的端口,虚拟机就是wmware中的系统 点击添加

  7. CSS揭秘—透明边框(一)

    前言: 所有实例均来自<CSS揭秘>,该书以平时遇到的疑难杂症为引,提供解决方法,只能说秒极了,再一次刷新了我对CSS的认知 该书只提供了关键CSS代码,虽然有在线示例代码链接,但访问速度 ...

  8. 理解滑动平均(exponential moving average)

    1. 用滑动平均估计局部均值 滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average),可以 ...

  9. Android上的Badge,快速实现给应用添加角标

    应用角标是iOS的一个特色,原生Android并不支持.或许是因为当时iOS的通知栏比较鸡肋(当然现在已经改进了很多),而Android的通知栏功能强大?所以才出现了一方依赖于数字角标,一方坚持强大的 ...

  10. SpringBoot启动原理及相关流程

    一.springboot启动原理及相关流程概览 springboot是基于spring的新型的轻量级框架,最厉害的地方当属自动配置.那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 二 ...