ReadStreamAsDT - Filehelpers и C# - Как мне динамически читать в CSV, используя filehelpers?

Я пытаюсь читать в CSV динамически через FileHelpers и работать с данными CSV в качестве данных. Мои CSV-файлы не будут такими же. Они будут иметь разные заголовки столбцов и различное количество столбцов. Я использую метод ReadStreamAsDT, но он все еще хочет, чтобы структурированный класс инициализировал FileHelperEngine. Есть идеи?

2 ответа

Решение

Я должен был использовать 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);
}

Очевидно, что есть много подтверждений наряду с другой логикой, происходящей вокруг этого метода, но у меня сейчас нет времени, чтобы погрузиться в него. Надеюсь это поможет!

Вы пытались использовать http://www.codeproject.com/KB/database/CsvReader.aspx? Вы можете использовать разбор этой библиотеки. Это быстро и надежно.

Другие вопросы по тегам