我正在尝试通过FileHelpers动态读取CSV并将CSV数据作为数据表使用。我的CSV文件不一样。它们将具有不同的列标题和不同的列数。我正在使用ReadStreamAsDT方法,但它似乎仍然需要一个结构化的类来初始化FileHelperEngine。有什么想法吗?
答案 0 :(得分:4)
我必须使用FileHelpers.RunTime
和DelimitedClassBuilder
从文件中创建DataTable
。这是我的方法。如果我有更多时间,我会更好地解释。
private static DataTable CreateDataTableFromFile(byte[] importFile) {
var cb = new DelimitedClassBuilder("temp", ",") { IgnoreFirstLines = 0, IgnoreEmptyLines = true, Delimiter = "," };
var ms = new MemoryStream(importFile);
var sr = new StreamReader(ms);
var headerArray = sr.ReadLine().Split(',');
foreach (var header in headerArray) {
cb.AddField(header, typeof(string));
cb.LastField.FieldQuoted = true;
cb.LastField.QuoteChar = '"';
}
var engine = new FileHelperEngine(cb.CreateRecordClass());
return engine.ReadStreamAsDT(sr);
}
显然,围绕这种方法有很多验证以及其他逻辑,但我现在没有太多时间深入研究它。希望这有帮助!
答案 1 :(得分:1)
您是否尝试过使用http://www.codeproject.com/KB/database/CsvReader.aspx?您可以利用此库的解析。它快速可靠。