首页 > 解决方案 > 如何在运行时检测 Column 数据类型,同时解析带有标题的 CSV 文件

问题描述

我正在使用FileHelpers加载 CSV 数据,(信用 - 搜索时找到了这个答案/搜索结果)。

用户浏览一个目录,选择带有标题的文件,然后上传进行解析。我的问题是——它们是一次性文件,其cols/classes/types 以前不知道

问题:如何在解析时检测列的数据类型?

搜索后,我发现一个名为它的函数提供了记录类型。我需要帮助才能获取记录中的 Col 数据类型。 public Type RecordType { get; }

var fNengine = new FileHelperEngine<AttendeeEventManifesto>();
var fNrecords = engine.ReadFile("AttendeesByEvents.csv"); 

// How to get the Col types?
// HeaderText = typeof(..*notKNown*).GetCsvHeader();
//..var headers = fNrecords.HeaderText();

//foreach (var header in headers)
  //  Console.WriteLine(header.RecordType() + `\n`);     

我也在SO上找到了这个答案,但是@shmap00 提到的运行时助手或他所指的帮助不再存在,我也查看了源代码树。有人可以指出我的链接吗

标签: c#csvparsingtypesfilehelpers

解决方案


您可以使用类构建器在运行时构建您的类,如下所示:

DelimitedClassBuilder cb = new DelimitedClassBuilder("MyProduct", delimiter: ",");

cb.AddField("Name", typeof(string));
cb.LastField.TrimMode = TrimMode.Both;

cb.AddField("Description", typeof(string));
cb.LastField.FieldQuoted = true;
cb.LastField.QuoteChar = '"';
cb.LastField.QuoteMode = QuoteMode.OptionalForBoth;

// etc... e.g., add a date field
cb.AddField("SomeDate", typeof(DateTime));

engine = new FileHelperEngine(cb.CreateRecordClass());

DataTable dt = engine.ReadFileAsDT("test.txt");

推荐阅读