ReadStreamAsDT - Filehelpers和C# - 如何使用filehelpers动态读取CSV?

时间:2011-01-03 15:27:21

标签: c# filehelpers

我正在尝试通过FileHelpers动态读取CSV并将CSV数据作为数据表使用。我的CSV文件不一样。它们将具有不同的列标题和不同的列数。我正在使用ReadStreamAsDT方法,但它似乎仍然需要一个结构化的类来初始化FileHelperEngine。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我必须使用FileHelpers.RunTimeDelimitedClassBuilder从文件中创建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?您可以利用此库的解析。它快速可靠。