F#处理csv,按记录解析记录

时间:2012-03-25 12:04:19

标签: csv f#

我是F#的新手基本上我正在尝试使用FileHelpers库按记录导入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,然后将订单存储到队列中。感谢帮助人员

1 个答案:

答案 0 :(得分:6)

engine的类型(称为FileHelperAsyncEngine)仅实现IEnumerable的非通用版本,但它不实现通用IEnumerable<T> F#编译器。

您需要将非泛型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)