zoukankan      html  css  js  c++  java
  • .net解析csv(C#导表工具)

    前言

    解析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版本是否一致。

  • 相关阅读:
    [Python_3] Python 函数 & IO
    [Python_2] Python 基础
    【一首小诗】每一个难捱的日子都是一首诗
    【排序算法】选择排序(Selection sort)
    【排序算法】冒泡排序(Bubble Sort)
    【待补充】[Python_1] Python 安装
    [IDEA_6] IDEA 集成 Python
    MySQL 的 CURD 操作
    [Spark SQL_1] Spark SQL 配置
    MySQL 基础
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/10150083.html
Copyright © 2011-2022 走看看