读取CSV行/记录的重复子节?

读取CSV行/记录的重复子节?,csv,csvhelper,Csv,Csvhelper,在CSVHelper中,是否可以从源CSV文件的单行中读取重复的子记录 我正在使用的CSV格式包含以下部分: 所有这些文本都是CSV文件的一行 第一个字段是典型的。。。只是一个固定的标记 第二个字段6指示将有多少重复子记录 因此,以下6个字段块的格式都相同,每个块有4个字段。我想将这6个部分中的每一部分都读入/映射到一个单独的类对象,每个对象都是相同类型的 我可以从中看出,有很多方法可以解析数据,但似乎没有一种方法可以完全映射到这一点。可以将给定行/记录上的所有字段读取为可枚举的值列表或动态大小

在CSVHelper中,是否可以从源CSV文件的单行中读取重复的子记录

我正在使用的CSV格式包含以下部分:

所有这些文本都是CSV文件的一行

第一个字段是典型的。。。只是一个固定的标记

第二个字段6指示将有多少重复子记录

因此,以下6个字段块的格式都相同,每个块有4个字段。我想将这6个部分中的每一部分都读入/映射到一个单独的类对象,每个对象都是相同类型的


我可以从中看出,有很多方法可以解析数据,但似乎没有一种方法可以完全映射到这一点。可以将给定行/记录上的所有字段读取为可枚举的值列表或动态大小的动态对象,但这些方法失去了CSVHelper的大部分好处,即它可以为您将数据映射到对象。

不幸的是,我不认为有一种好的方法可以将CsvHelper的所有映射特性用于您的示例,但是手动构建对象是相当容易的

公共课程 { 公共静态无效字符串[]args { 使用MemoryStream流=新MemoryStream 使用StreamWriter writer=newstreamwriterstream 使用StreamReader=新建StreamReaderstream 使用CsvReader csv=new CsvReaderreader,CultureInfo.InvariantCulture { writer.WriteLineTYPICAL/EXTREME PERIODS,6,夏季最接近最高温度,极端,7/13,7/19,夏季最接近平均温度,典型,6/22,6/28,冬季最接近最低温度,极端,1/20,1/26,冬季最接近平均温度,典型,12/8,12/14,秋季最接近平均温度期间的温度,典型,10/6,10/12,春季-最接近期间平均温度的一周,典型,4/26,5/2; 作者:同花顺; 流位置=0; csv.Configuration.HasHeaderRecord=false; csv.Read; 列表结果=新列表; var rows=csv.GetField1; var指数=2; 对于int i=0;i<行;i++ { var foo=新foo { Description=csv.GetFieldindex, 类型=csv.GetFieldindex+1, 开始=csv.GetFieldindex+2, End=csv.GetFieldindex+3 }; 结果:Addfoo; 指数+=4; } } } } 公开课Foo { 公共字符串说明{get;set;} 公共字符串类型{get;set;} 公共字符串开始{get;set;} 公共字符串结束{get;set;} }
非常感谢-这与我最终所做的非常接近。我也找不到任何方法真正使用它的类映射,但最终这种方法非常有效。
TYPICAL/EXTREME PERIODS,6,
Summer - Week Nearest Max Temperature For Period,Extreme,7/13,7/19,
Summer - Week Nearest Average Temperature For Period,Typical,6/22,6/28,
Winter - Week Nearest Min Temperature For Period,
Extreme,1/20,1/26,Winter - Week Nearest Average Temperature For Period,Typical,12/ 8,12/14,
Autumn - Week Nearest Average Temperature For Period,Typical,10/ 6,10/12,
Spring - Week Nearest Average Temperature For Period,Typical,4/26,5/ 2