.net解析csv(C#导表工具)

时间:2021-06-12 02:28:33

前言

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

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

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

性能测试

本次性能测试结果来自:.NET Core中的CSV解析库

当测试100000行数据的时候

.net解析csv(C#导表工具)

当测试1000000行数据的时候

.net解析csv(C#导表工具)

从测试结果上看

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. 解析csv数据绘制曲线图

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

  2. CSV&period;js – 用于 CSV 解析和编码的 JS 工具库

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

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

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

  4. Postgresql的导表

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

  5. java opencsv解析csv文件

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

  6. 使用ANTLR解析CSV和JSON

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

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

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

  8. php解析&period;csv文件

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

  9. 支持MySql的数据库自动分表工具DBShardTools发布

    支持MySql的数据库自动分表工具DBShardTools发布 前段时间参与了公司的一个项目,这个项目的特点是数据量.访问量都比较大,考虑使用数据库水平分表策略,Google了大半天,竟然没有找到分表 ...

随机推荐

  1. Linux 常用命令(持续补充)

    常用命令: command &:将进程放在后台执行 ctrl + z:暂停当前进程 并放入后台 jobs:查看当前后台任务 bg( %id):将任务转为后台执行 fg( %id):将任务调回前 ...

  2. 相机变换与Ray-Casting

    p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify; orphans: 0; widows ...

  3. 开源一个C&num;写的Android和IOS都能跑的 打击感强的RPG玩玩。

    攒到 250楼再统一发一次代码,各位 给力啊 156楼之前的兄弟 都已经发送代码了!各位查收一下!   156楼之后的兄弟要晚上统一发送 200楼之前的兄弟都已经发送代码了!  各位查收一下!!!顺便 ...

  4. Angular&period;js表单以及与Bootatrap的使用

    首先从angular.js的目录开始,如下图,知道了我们要学什么,然后再开始有目的的学习与对比. 1.从表达式开始: ng-app指令初始化一个 AngularJS 应用程序. ng-init指令初始 ...

  5. JNI NDK开发Crash错误定位 调试

    总结: 搜索backtrace  然后: $ /d/android-ndk-r10c/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86 ...

  6. rnqoj-82-又上锁妖塔-dp

    又是一个敢想就敢做的题目... 同时记录更新两个状态 dp[i] :第i层是飞上去的 df[i]  :第i层是走上去的 dp[i]=min(df[i-1],df[i-2]); df[i]=min(dp ...

  7. HDOJ 2058 The sum problem

    Problem Description Given a sequence 1,2,3,--N, your job is to calculate all the possible sub-sequen ...

  8. Oracle day03 连表查询

    为什么要表连接进行查询? 查询部门名称为SALES的员工信息 如何进行表的连接查询? 两种方式:Sql 1992 和sql1999 sql1992sql分类    1.笛卡尔积 (表乘表)    2. ...

  9. 重开Vue2&period;0

    目录: 内容: 一.Vue内部指令: 1.v-if v-else&v-show v-if与v-show都是选择性显示内容的指令,但是二者之间有区别: 1.v-if:判断是否加载,在需要的时候加 ...

  10. &lbrack;原&rsqb;&lbrack;unreal&rsqb;&lbrack;UE&rsqb;&lbrack;spark&rsqb;分析unreal engine 虚幻引擎的粒子编辑器&colon;Cascade

    参考:https://www.raywenderlich.com/270-unreal-engine-4-particle-systems-tutorial (使用了一个飞机射击游戏的粒子来展示,全英 ...