在c# . net中读取CSV而不输入字段名

  • 本文关键字:字段 CSV net 读取 c# .net csv
  • 更新时间 :
  • 英文 :


我需要读取一个CSV文件用作c# . net框架中的数组。相当于例如

var animalList = new List<Animal>()
{
new Animal{Name = "German Shepherd",
Height = 25,
Weight = 77},
new Animal{Name = "Chihuahua",
Height = 7,
Weight = 4.4},
};

但存储和读取的CSV文件,列Name,Height,Weight。我可以看到有或没有在线包的方法,例如使用Lumen CSV Reader包。但是,我有两个问题:

  1. 理想情况下,我想这样做,而不安装任何东西(如流明CSV阅读器包)
  2. 我的CSV有数千个字段,所以
public class SearchParameters  
{  
public string FirstName{ get; set; }  
public string LastName{ get; set; }  
public string Email{ get; set; }  
}  

在教程中编写的是不切实际的,因为我不想写出所有字段的名称。我想从CSV的头中读取它们。有人知道怎么做吗?

CSV文件非常大(多达1,000列和20,000行-大多数元素是布尔值:True或False)。读取它们不一定是世界上最有效的事情(但我需要系统查询最后的数组)。).

有些包允许使用某种记录类型处理csv文件,然后您可以通过索引/标题名称读取(找不到我记得的那个)。但是考虑到输入的大小,我不确定常规的csv反序列化器将如何执行。

请考虑,如果没有表示记录的底层类,那么在某些时候,您将不得不告诉代码使用什么类型(每次访问属性时)。您可以编写一个(例如)python脚本,基于前两行为类创建*.cs文件,并将其编译到项目中。

关于不使用任何包…你可以写一些简单的代码,把这行分开。如果可以保证所有字段都不包含逗号(或分隔符)和换行符,那么它可以工作—但是您仍然需要编写一个动态程序,该程序将使用属性匹配csv记录,并以某种方式为该类型找到适当的反序列化器。我强烈建议使用库,比如CsvHelper。

作为旁注,如果您愿意考虑其他选择,我会将此内容加载到键值数据库中(您可以使用RDBMS模拟它,尽管它不会非常快)。使用SQL可能更容易。

TL,博士

  • 选项1:用脚本生成一个类,然后使用nuget包来处理序列化(类似于'spray and pray'方法)- linq将像正常的
  • 一样可用
  • 选项2:使用数据库,这更适合大型数据集

相关内容

  • 没有找到相关文章

最新更新