经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
.net解析csv(C#导表工具)
来源:cnblogs  作者:赵青青  时间:2018/12/21 10:53:12  对本文有异议

前言

解析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 字段

  1. public static void ParseCsvDemo(string filePath)
  2. {
  3. CsvReader csvReader = null;
  4. using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
  5. {
  6. using (StreamReader reader = new StreamReader(fileStream, Encoding.GetEncoding("GB2312")))
  7. {
  8. csvReader = new CsvReader(reader);
  9. //设置之后,不读取第一列,且列数也会减少
  10. // csvReader.Configuration.HasHeaderRecord = false;
  11. int rowCount = 0;
  12. while (csvReader.Read())
  13. {
  14. //列数
  15. var columnCount = csvReader.Context.Record.Length;
  16. //每行的原始数据
  17. var raw = csvReader.Context.RawRecord;
  18. rowCount = rowCount + 1;
  19. if (rowCount == 2)
  20. {
  21. var fileName = csvReader.GetField<string>(2);
  22. Console.WriteLine("输出名:{0}", fileName);
  23. }
  24. Console.WriteLine("行:{0} ,列:{1},内容:{2}", rowCount, columnCount, raw);
  25. }
  26. }
  27. }
  28. }

注:对于csvhelper提供的映射关系(把表的一行数据结构转成 class类型),我未使用到,因为我们主要是提取表的数据。

使用情景

使用C#开发的导表工具,可以导出excel和csv,支持把excel数据插入到SQL数据库,且Excel的格式可以自定义。

这个项目已开源,可参考我之前的文章:

TableML Excel编译/解析工具

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

遇到问题

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号