指定模式时是否可以在FSharp.Data.CsvProvider中使用自定义类型?

问题描述 投票:0回答:1

我正在使用F#,看起来像这样的CSV:

When,Where,HowMuch
11/24/2019,Germany,100 EUR
11/25/2019,France,100 EUR
11/26/2019,Switzerland,50 CHF
11/27/2019,USA,75 USD

我正在使用CSV Type Provider包中的FSharp.Data来解析此数据。

type CurrencyDetector = CsvProvider<"Currencies.csv">

显然,第一列是日期,第二列是字符串。

对于第三种,我想like使用这种类型:

type Money (amountAndDenomination : string) =

    let parts = amountAndDenomination.Split ' '

    member __.Amount = Decimal.Parse parts.[0]
    member __.Denomination = parts.[1]

我在CsvProvider行中尝试了Schema参数的一些排列,但到目前为止没有任何效果。例如:

type CurrencyDetector = CsvProvider<"Currencies.csv",Schema="When (date),Where (string),HowMuch (Money)">

[When表示为DateTimeWhere表示为string,但是HowMuch成为名为HowMuch (Money)的字符串属性:

Demonstration of type provider properties in use

是否有办法在CsvProvider中使用我自己的类,还是不可能?

f# type-providers f#-data fsharp.data.typeproviders
1个回答
0
投票

根据documentation for the CsvProvider,我认为不可能:

Schema参数:“以逗号分隔的列表中的可选列类型。有效类型是 int,int64,bool,float,decimal,date,guid,string,int?,int64?,bool ?、浮点数,十进制数,日期,guid,int选项,int64选项,bool选项,float选项,十进制选项,日期选项,guid选项和字符串选项您也可以指定单位和名称这样的列:名称(type ),或者您只能覆盖名称。如果您不想指定所有列,则可以按如下名称来引用这些列:ColumnName =类型。“

但是,在上面请注意,[[is]]可以使用units of measure。因此,您可以探索为货币单位创建度量单位。类型提供程序might对该列要求使用不同的格式。

© www.soinside.com 2019 - 2024. All rights reserved.