我需要读取一个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包。但是,我有两个问题:
- 理想情况下,我想这样做,而不安装任何东西(如流明CSV阅读器包)
- 我的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:使用数据库,这更适合大型数据集