我正在使用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
表示为DateTime
,Where
表示为string
,但是HowMuch
成为名为HowMuch (Money)
的字符串属性:
是否有办法在CsvProvider中使用我自己的类,还是不可能?
根据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对该列要求使用不同的格式。