0

filehelpersクラスビルダーを使用しようとしていますが、それをどうするかについて少し混乱しています。

       var cb = new DelimitedClassBuilder("temp", ",") { IgnoreFirstLines = 0, IgnoreEmptyLines = true, Delimiter = ","  };
        var sr = new StreamReader(stream);
        var headerArray = sr.ReadLine().Split(',');
        foreach (var header in headerArray)
        {
            var fieldName = header.Replace("\"", "").Replace(" ", "");
            cb.AddField(fieldName, typeof(string));
        }

        var engine = new FileHelperEngine(cb.CreateRecordClass());
        var result = engine.ReadStream(sr);

DelimitedClassBuilderは、最初のパラメーターとして「className」、次に「delimiter」を取り込みます。

    //
    // Summary:
    //     Creates a new DelimitedClassBuilder.
    //
    // Parameters:
    //   className:
    //     The valid class name.
    //
    //   delimiter:
    //     The delimiter for that class.
    public DelimitedClassBuilder(string className, string delimiter);

次に、この「クラス」のfieldNamesとして後で使用するヘッダーを含むストリームの最初の行を調べます。

最後の行は、残りのすべての情報を読み取り、それをオブジェクト配列[]として返します。その中には「temp」クラスのものがあります。

それでも、実際にそれをクラス「temp」にキャストする方法はわかりません。今のところ、データを取得する方法がよくわかりません。私は私がただのようなことをすることができないことを知っています

result [0] .SomeFieldNameは、fieldNameが実行ごとに変わる可能性があるためです。ですから、これはまた、インデックスなどで取得するようなことをしなければならないのに、そもそもなぜクラスになるのか不思議に思います。

ご覧のとおり、私は非常に混乱しています。

4

1 に答える 1

0

最も簡単な方法は、例に示されています

あなたが使う

DataTable dt = engine.ReadStreamAsDT(sr);

次に、次のような結果にアクセスします。

foreach (DataRow row in dt.Rows) // Loop over the rows.
{
    Console.WriteLine("--- Row ---"); // Print separator.
    foreach (var item in row.ItemArray) // Loop over the columns.
    {
        Console.Write("Item: "); // Print label.
        Console.WriteLine(item); 
        /// the Type of item will be whatever you defined when you
        /// called ClassBuilder.AddField() (String in your example)
    }
}
Console.ReadLine();
于 2012-02-09T15:29:05.127 に答える