2012-03-25 10 views
2

私はF#の初心者です。基本的には、FileHelpersライブラリを使用してレコードごとにcsvレコードをインポートしようとしています。だから私はキューに各オブジェクトを配置することができます。F#処理csv、レコードごとにレコードを解析する

let importOrders (filePath:string) = do 
     let engine = new FileHelpers.FileHelperAsyncEngine(typeof<DataTypes.Order.OrderType>) 
     engine.BeginReadFile(filePath) 
     for o in engine do 
     unProccessedData.Enqueue(o) 

しかし、エンジンが価値のある型ではないということは列挙できますが、IEnumerableを実装しています。誰でも可能な修正や別のアプローチに関する提案がありました。

レコードごとにcsvレコードを処理し、それぞれをorderTypeに変換してからキューに格納できるようにする必要があります。ヘルプみんな

答えて

6

ためのおかげで(FileHelperAsyncEngineと呼ばれている)engineのタイプはIEnumerableの非ジェネリックバージョンを実装していますが、それはF#コンパイラによって必要とされる一般的なIEnumerable<T>を実装していません。

非汎用型IEnumerableを汎用型IEnumerable<obj>(または、コレクション内の値のタイプに応じて、汎用タイプの他のインスタンス化)にキャストする必要があります。以下はそのトリックを行う必要があります:

let importOrders (filePath:string) = 
    let engine = new FileHelpers.FileHelperAsyncEngine(typeof<OrderType>) 
    engine.BeginReadFile(filePath) 
    for o in engine |> Seq.cast<obj> do // NOTE: Conversion using Seq.cast 
     unProccessedData.Enqueue(o) 
+0

完璧! :)それは完璧な意味があります。乾杯! – Abstract