我使用FSharp.Data
转换HTML表数据,即
type RawResults = HtmlProvider<url>
let results = RawResults.Load(url).Tables
for row in results.Table1.Rows do
printfn " %A " row
示例输出:
("Model: Generic", "Submit Date: July 22, 2016")
("Gene: Sequencing Failed", "Exectime: 5 hrs. 21 min.")
~~~ hundreds of more rows ~~~~
我试图将这两个基于列的#34;元素分成单个列序列,最终得到字典结果。
所需的词典键:值结果:
["Model", Generic]
["Submit Date", July 22, 2016]
["Gene", "Sequencing Failed"]
~~~~
你怎么能(或分割?)两列(Column1
&amp; Column2
)来管道这两个列以产生字典结果?
let summaryDict =
results.Table1.Rows
|> Seq.skip 1
|> Seq.iter (fun x -> x.Column1 ......
|> ....
答案 0 :(得分:2)
使用内置的string
API拆分:
。我通常喜欢以咖喱形式包裹String.Split
:
let split (separator : string) (s : string) = s.Split (separator.ToCharArray ())
此外,虽然不是必需的,但在使用双元素元组时,我经常发现使用与此特定数据结构相关的函数定义辅助模块很有用。您可以在这样的模块中添加各种功能(例如curry
,uncurry
,swap
等等,但在这种情况下,您只需要一个功能:
module Tuple2 =
let mapBoth f g (x, y) = f x, g y
使用这些构建块,您可以轻松地将每个元组元素拆分为:
,如此FSI会话所示:
> [
("Model: Generic", "Submit Date: July 22, 2016")
("Gene: Sequencing Failed", "Exectime: 5 hrs. 21 min.") ]
|> List.map (Tuple2.mapBoth (split ":") (split ":"));;
val it : (string [] * string []) list =
[([|"Model"; " Generic"|], [|"Submit Date"; " July 22, 2016"|]);
([|"Gene"; " Sequencing Failed"|], [|"Exectime"; " 5 hrs. 21 min."|])]
此时,您仍然需要去除前导空格,以及将数组转换为所需格式,但我相信您可以从此处获取(否则,请询问)。