2017-10-06 4 views
0

F#では、Webクエリから抽出されたリストにレコードタイプを後付けすることは可能ですか?F# - レコードをHTMLクエリリストに追加

let customers = 
    organization.CssSelect("div.Customers") 
    |> List.map(fun a -> a.InnerText().Trim(), a.AttributeValue("href")) 
    // [("1 A abcdef Alpha"); ("2 C aabbcc Bravo")] 

type Customer = {id:string; loc:string; code:string; name:string} 

これで、後で処理するために「customers.id」または「customers.name」にアクセスできます。もしそうなら、どうですか?

答えて

1

私はあなたが何を意味するか理解していれば、その後、そこには組み込みのマジックこのためにはありませんが、私はList.map 1以上を行うと、レコードを作成するコードを書くことは、魔法の後ろに隠れて価値があるものではありませんと思う:

type Customer = {id:string; loc:string; code:string; name:string} 

let customers = 
    organization.CssSelect("div.Customers") 
    |> List.map (fun a -> a.InnerText().Trim(), a.AttributeValue("href")) 
    |> List.map (fun (id, name) -> { id = id; name = name; code = ""; loc = "" }) 

データをレコードに適合させるためにいくつかの魔法を使用した場合、多くのチェックを失う可能性があります(たとえばリフレクションを使用する場合)、loccodeのようなレコードフィールドのデフォルト値を明示的に指定する方法が失われますこの例では、

+1

トーマス、返信いただきありがとうございます。問題のWebページを制御できないため、Webレスポンスからレコードデータを抽出しようとしています。[( "1 A abcdef Alpha"); ( "2 C aabbcc Bravo")] - 可能であれば、理想的にはすべてのフィールドを処理したいと考えています。私はそうすることでいくつかの妥当性チェックを失うことに同意して喜んでいます。さて、私は機能プログラミングに関するあなたの本を本当に楽しんでいました! – matekus

+0

@matekusありがとう!もっとチェックされていないが柔軟なアプローチとしては、解析されたデータを辞書やマップで表すことができます。Map 'キーはWebサイトの内容と値を解析した値に基づいています。それはレコードほど素晴らしいものではありませんが、Webから来るものを解析することができます。 –

+0

ありがとうTomas。私はその勧告を探求します。 – matekus