2011-01-03 3 views
2

私はFileHelpersを介してCSVを動的に読み込み、CSVデータをデータテーブルとして扱おうとしています。私のCSVファイルは同じではありません。それらは、異なる列ヘッダーと異なる列量を持ちます。私はReadStreamAsDTメソッドを使用していますが、FileHelperEngineを初期化する構造化クラスが必要なようです。何か案は?ReadStreamAsDT - FilehelpersとC# - ファイルヘルパーを使用してCSVを動的に読み込む方法

+0

「自分のCSVファイルが同じではない」と言うときは、各CSVファイルに独自の定義があること、あるいはCSVファイルの各レコードが異なる可能性があることを意味しますか? –

+0

あなたはこれを理解したことがありますか?私は、具体的なオブジェクトを与えることなくエンジンをインスタンス化する方法を見つけることができないようです。私は、汎用CSVファイルを汎用データベースに取り込みたいだけです。 –

答えて

4

ファイルからDataTableを作成するには、FileHelpers.RunTimeDelimitedClassBuilderを使用しなければなりませんでした。ここに私の方法です。もっと時間があれば、これをより良く説明します。明らかに

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); 
} 

、そこ検証の多くは、このメソッドに開催される他のロジックと一緒ですが、私はそれに飛び込むために、今多くの時間を持っていません。お役に立てれば!

+0

私は同じアプローチを使用していますが、ファイルサイズが大きい場合は "Out of memory exception"がスローされます。 –

関連する問題