C# CSV助手如何读取具有多个标题行的CSV文件
我正在使用CsvHelper编写一个csv文件,其中包含多个标题行,位于不同的位置(标题具有一定数量的列,但名称不同)。每个标题后的行数不同C# CSV助手如何读取具有多个标题行的CSV文件,c#,.net,csv,header,csvhelper,C#,.net,Csv,Header,Csvhelper,我正在使用CsvHelper编写一个csv文件,其中包含多个标题行,位于不同的位置(标题具有一定数量的列,但名称不同)。每个标题后的行数不同 是否可以使用CsvHelper查找/迭代csv文件中的不同标题行(可能通过搜索标题列的名称或部分名称),并在每个标题后迭代读取记录?您必须手动执行此操作,逐行读取并决定要执行的操作 开始的示例: CSV文件: 测试1,测试2,测试3 A、 1,富 TestA,TestB,Test3 B、 07a0fca2-1b1c-4e44-b1be-c2b05da5af
是否可以使用CsvHelper查找/迭代csv文件中的不同标题行(可能通过搜索标题列的名称或部分名称),并在每个标题后迭代读取记录?您必须手动执行此操作,逐行读取并决定要执行的操作 开始的示例: CSV文件: 测试1,测试2,测试3 A、 1,富 TestA,TestB,Test3 B、 07a0fca2-1b1c-4e44-b1be-c2b05da5afc7,棒材
void Main()
{
使用(var reader=new StreamReader(“path\\to\\file.csv”))
使用(var csv=new CsvReader(reader,CultureInfo.InvariantCulture))
{
csv.Configuration.HasHeaderRecord=false;
csv.Configuration.RegisterClassMap();
csv.Configuration.RegisterClassMap();
var fooRecords=新列表();
var=新列表();
而(csv.Read())
{
开关(csv.GetField(0))
{
案例“A”://或“Test1”
...
打破
案例“B”://或“TestA”
...
打破
违约:
抛出新的InvalidOperationException(“未知记录类型”);
}
}
}
}
示例和文档:
您能将CSV文件拆分为多个文件,每个文件都有一个标题吗?这当然是有可能的,但我会从一开始就编写多个文件,而不是一个。但我们的想法是只使用一个CSV文件,因为所有标题都有某种结构。只是标题列的名称和每个标题后的行数是不同的。好吧,几个文件将是“以干净的方式”的障碍。如果你不想目录中杂乱无章的几个文件,可以将它们捆绑在一个zip中?谢谢你的链接,这很有帮助。我必须改变一点,以便能够读取所有记录,直到识别出下一个标题行。另一个问题是,我的csv文件有两个固定列和一些从列表生成的动态列。如果行结构无法映射到固定结构,示例将如何更改?dynamic records=csv.GetRecords();
void Main()
{
using (var reader = new StreamReader("path\\to\\file.csv"))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.RegisterClassMap<FooMap>();
csv.Configuration.RegisterClassMap<BarMap>();
var fooRecords = new List<Foo>();
var barRecords = new List<Bar>();
while (csv.Read())
{
switch (csv.GetField(0))
{
case "A": // Or "Test1"
...
break;
case "B": // Or "TestA"
...
break;
default:
throw new InvalidOperationException("Unknown record type.");
}
}
}
}