我正在尝试通过FileHelpers动态读取CSV,并将CSV数据作为数据表进行处理。我的CSV文件将不会相同。它们将具有不同的列标题和不同数量的列。我使用的是ReadStreamAsDT方法,但它似乎仍然需要一个结构化的类来初始化FileHelperEngine。有什么想法吗?
发布于 2011-05-18 13:58:34
我必须使用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);
}
显然,围绕这个方法有很多验证和其他逻辑发生,但我现在没有太多的时间深入研究它。希望这能有所帮助!
发布于 2011-11-17 19:27:45
你试过使用http://www.codeproject.com/KB/database/CsvReader.aspx吗?你可以利用这个库的解析。它既快又可靠。
https://stackoverflow.com/questions/4585726
复制