Tag: csvhelper

如何使用CsvHelper读取特定行的标题?

我正在尝试读取标题位于第3行的CSV文件: some crap line some empty line COL1,COL2,COl3,… val1,val2,val3 val1,val2,val3 如何告诉CSVHelper标题不在第一行? 我尝试使用Read()跳过2行,但是对ReadHeader()的后续调用会抛出一个已经读取了标头的exception。 using (var csv = new CsvReader(new StreamReader(stream), csvConfiguration)) { csv.Read(); csv.Read(); csv.ReadHeader(); ….. 如果我将csvConfiguration.HasHeaderRecord设置为false ReadHeader()再次失败。

使用CsvHelper从单个csv文件中读取多个类

最近我一直在使用Josh Close’CsvHelper来解析CSV文件,我非常喜欢用于类映射的流畅api。 我正在尝试映射包含多种记录类型的csv文件,文件结构是 C,Comment,Timestamp I,Class1,Header1,Header2 D,Class1,Data1,Data2 D,Class1,Data1,Data2 … I,Class2,Header1,Header2,Header3 D,Class2,Data1,Data2,Data3 D,Class2,Data1,Data2,Data3 … C,Checksum 这是CsvHelper可以处理的东西吗? 我已经编写了一个自定义解析器,它基本上可以工作,但它真正做的就是过滤掉特定类的Header和Data字段 – 我真的希望能够做类似的事情 csv.Configuration.RegisterClassMap(); csv.Configuration.RegisterClassMap(); var data1 = csv.GetRecords().ToList(); var data2 = csv.GetRecords().ToList(); 并一次读取文件? 这是可能的还是我使用了错误的解析器? 关心戴夫

CSVHelper必填字段

解析csv文件时,如何定义特定字段是必需的。 基本上,我想确保给定字段永远不会为空,如果是,那么我想抛出一个exception。 这是映射类: public sealed class DataMapper : CsvClassMap { public DataMapper() { Map(m => m.Field1).Name(“FirstField”); Map(m => m.Field2).Name(“SecondField”); Map(m => m.Field3).Name(“ThirdField”); // this field should be mandatory } } 和用法: List data; using (var sr = new StreamReader(localFilePath)) { var reader = new CsvReader(sr); reader.Configuration.RegisterClassMap(); data = reader.GetRecords().ToList(); } 目前我只是检查数据列表中的结果如下: var numberOfInvalidRecords = data.Count(data […]

如何将EnumConverter与CsvHelper一起使用

我正在使用CsvHelper将类序列化为csv文件 – 直到这里一切正常。 现在我正在尝试找到一种方法将类的枚举属性转换为csv中的int值,因此我可以稍后使用CSV进行批量插入。 我在CsvHelper中发现了EnumConverter类,但我无法弄清楚如何正确使用它,因为我的所有尝试都失败了。 这是我的映射类代码 public sealed class MyMapping : CsvClassMap { public MyMapping() { EnumConverter enumConverter = new EnumConverter(typeof(CalendarExceptionEntityType)); Map(m => m.ExceptionEntityType).Index(0).Name(“EXCEPTION_ENTITY_TYPE”).TypeConverter(enumConverter); Map(m => m.ExceptionEntityIdentifier).Index(1).Name(“EXCEPTION_ENTITY_IDENTIFIER”); Map(m => m.OptionType).Index(2).Name(“OPTION_TYPE”); Map(m => m.StartDatetime).Index(3).Name(“EXCEPTION_START_DATETIME”); Map(m => m.EndDatetime).Index(4).Name(“EXCEPTION_END_DATETIME”); Map(m => m.DataSourceType).Index(5).Name(“DATA_SOURCE_TYPE”); Map(m => m.Description).Index(6).Name(“DESCRIPTION”); } } 和写作部分 using (StreamWriter file = new StreamWriter(filePath, false, Encoding.UTF8)) { CsvWriter […]

使用csvHelper动态创建列

我有一个工作人员,从服务器获取各种字段。 我正在使用CSVHelper包将此类转换为excel表。 工人有像以下字段: class Worker { string name; string phone; string age; Dictionary customerField; } 我可以映射姓名,电话,号码等 class WorkerMap : CsvClassMap { public WorkerMap() { Map(m => m.name); Map(m => m.phone); Map(m => m.age); } } 我通过以下方式生成地图: csv.Configuration.RegisterClassMap(); 写下工人名单: csv.WriteRecords(workerList); 如何将customerField字典映射到Excel工作表,以便Key(字符串)是另一个列名,值(object)是列的值。 CSVHelper是否帮助我们在运行时执行此操作。 我查看了文档。 找不到任何对我有用的东西。

CsvHelper – 将多列读入单个列表

我正在使用CSVHelper读取大量数据 我想知道是否可以读取最后n列并将它们转换为列表 “Name”,”LastName”,”Attribute1″,”Attribute2″,”Attribute3″ 并将数据塑造成这样的东西 public class Person { public string FirstName { get; set; } public string LastName { get; set; } public IList Attributes { get; set; } } 我希望一步到位,我确信我可以有一个中间步骤,我放入一个具有匹配属性属性的对象但是在一个人上做它会很好

使用CsvHelper可以将空格转换为可空吗?

我有一些非常蹩脚的Csv文件我需要解析。 我正在使用CsvHelper,它工作得很棒。 除了我有一些行有空格的地方,我有一个双倍的正常。 文件: 文本,SomeDouble,MoreText “好”,1.23 “好” “坏”,“坏” 如果我尝试将其映射到 public class Test { [CsvField(Name = “Text”)] public string Text { get; set; } [CsvField(Name = “SomeDouble”)] public double? SomeDouble{ get; set; } [CsvField(Name = “MoreText”)] public string MoreText{ get; set; } } 然后我得到这样的错误: CsvHelper.CsvReaderException:尝试读取类型记录时发生错误 行:’2’(从1开始) 场指数:’1’(基于0) 字段名称:’SomeDouble’ 场地价值:” System.Exception:不是Double的有效值。 —> System.FormatException:输入字符串的格式不正确。 System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context,CultureInfo culture,Object value)的System.ComponentModel.DoubleConverter.FromString(String […]

在文件上传时使用CSVHelper

我正在尝试使用CSVhelper插件来读取上传的CSV文件。 这是我的modelBinder类: public class SurveyEmailListModelsModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var csv = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); var file = ((csv.RawValue as HttpPostedFileBase[]) ?? Enumerable.Empty()).FirstOrDefault(); if (file == null || file.ContentLength < 1) { bindingContext.ModelState.AddModelError( "", "Please select a valid CSV file" ); return null; } using (var reader = new StreamReader(file.InputStream)) […]

CsvHelper ConvertUsing不改变输出

我正在尝试使用CsvHelper库的ConvertUsing方法(v 2.4.0)。 我已经阅读了有关ConvertUsing的文档但无法使其工作。 我正在使用一个简单的类: public class Test { public long Id { get; set; } public string Title { get; set; } } 使用此ClassMap : public class TestClassMap : CsvClassMap { public override void CreateMap() { Map(m => m.Id).Name(“id”).ConvertUsing(row => 11111); Map(m => m.Title).Name(“title”).ConvertUsing(row => row.GetField(“title”) + ” 123″); } } 我使用这些代码创建了一个类的实例,然后将其写入CSV: var test = […]

使用CsvHelper编写CSV文件时的自定义转换

我最近一直在做一些CSV阅读和写作,然后跑过CsvHelper ,到目前为止这很棒。 我遇到了一个小问题; 我在读取文件时使用自定义转换器,但是当我将它们写回时,该格式将丢失。 我的CSV格式如下所示: 67,1234-1,20150115,750,20150115,1340,549,549,406,0,FRG 字段20150115,750映射到名为Start (So,01/15/2015 7:50 AM)的单个DateTime字段。 我的class级地图如下所示: public sealed class DutyMap : CsvClassMap { static readonly CultureInfo enUS = new CultureInfo(“en-US”); public DutyMap() { Map(m => m.PersonId).Index(0); Map(m => m.DutyName).Index(1); Map(m => m.Start).ConvertUsing(row => ParseDate(row.GetField(2), row.GetField(3))); Map(m => m.End).ConvertUsing(row => ParseDate(row.GetField(4), row.GetField(5))); Map(m => m.DutyTime1).Index(6); Map(m => m.DutyTime2).Index(7); Map(m => m.FlightTime).Index(8); […]