【问题标题】:ReadStreamAsDT - Filehelpers and C# - How do I dynamically read in a CSV using filehelpers?ReadStreamAsDT - Filehelpers 和 C# - 如何使用 filehelpers 动态读取 CSV?
【发布时间】:2011-11-18 03:27:45
【问题描述】:

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

【问题讨论】:

  • 当您说“我的 CSV 文件将不一样”时,您的意思是每个 CSV 文件都有自己的定义,还是 CSV 文件中的每条记录可能不同?
  • 你有没有想过这个问题?如果不给它一个具体的对象,我似乎找不到一种方法来实例化引擎。我只想将任何 CSV 文件提取到通用数据库中。

标签: c# filehelpers


【解决方案1】:

我必须使用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);
}

显然,围绕此方法进行了大量验证以及其他逻辑,但我现在没有太多时间深入研究它。希望这会有所帮助!

【讨论】:

  • 我使用相同的方法,但是当文件很大时它会抛出“内存不足异常”。
【解决方案2】:

您是否尝试过使用 http://www.codeproject.com/KB/database/CsvReader.aspx ?你可以利用这个库的解析。它快速可靠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2012-05-24
    • 2015-12-07
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多