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

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

Ответы [ 2 ]

4 голосов
/ 18 мая 2011

Мне пришлось использовать 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 голос
/ 17 ноября 2011

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

...