Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    bleis-tift
    @bleis-tift
    なるほどなるほど、XmlElementまでたどり着くけど、こいつもIEnumerableだけど末端だからそれ以降進まなくなるのね
    で、結局構造を写し取っただけの空のseqのネストが出力される、と
    結論:DebuggerDislpayは見ていない。%Aの内部でSystem.Collections.IEnumerableに対する特別処理が入っていて、そこで列挙されて文字列化される。
    もう一つ結論:XmlDocumentは捨てよう
    Yukitoshi Suzuki
    @yukitos
    +1 to discard XmlDocument :)
    callmekohei
    @callmekohei
    +1 to discard XmlDocument :)
    Yukitoshi Suzuki
    @yukitos
    この間F#談話室に来ていたフランスの人?からTwitterで質問があって、
    Mac上のXamarinでパッケージのインストールにこけるらしいんですが何かご存じのかたいませんかしら
    im a noobie.im sure the answer is simple. but i don't understand how to install a package on a F# solution. specifically i had an error while installing the package spreads (which i talked about few days ago)
     and when im navigating in a solution, i see the button for upgrading package for example but the button for installing package is greyed and not accessible
    bleis-tift
    @bleis-tift
    Mac・・・
    Kouji Matsui
    @kekyo
    Xamarin...
    pocketberserker
    @pocketberserker
    おうちに かえらないと かんきょうが ない
    Yukitoshi Suzuki
    @yukitos
    僕も環境持ってないのでなんともかんとも。
    omanuke
    @omanuke
    packageってNuget?
    adacola
    @adacola
    かいしゃに いかないと かんきょうが ない
    Yukitoshi Suzuki
    @yukitos
    Nugetなんですかね?F#ソリューションでパッケージをインストールしようとしたっていうことしか聞いてないんですけども。
    Spreadsというパッケージらしいです
    omanuke
    @omanuke
    んー、on a F# solutionいうからNugetでXamarinStudioでNugetパッケージのインスコどすんのって話にも読めるが…Mac使ってるけどXamarinStudioよーしらんす
    Yukitoshi Suzuki
    @yukitos
    なるほどどうもです。@all
    callmekohei
    @callmekohei

    < <titel> ... </title> に挟まれた文字列を取り出す方法について>

    本当に度々すみません。先ほどの件、9割できました!ありがとうございます。そこでタグに囲まれた文字列のみ取り出したいのですが、、、、。なにかいい方法ありますでしょうか?お知恵を拝借できれば嬉しいです!

    #r @"../lib/FSharp.Data.dll"
    #r @"../../System.Xml.Linq.dll"
    open FSharp.Data
    open System.Xml.Linq
    
    module Test_XML =
    
        let url =  "http://rss.weather.yahoo.co.jp/rss/days/8210.xml"
    
        let xname s = XName.Get s
        let xd = System.Xml.Linq.XDocument.Parse ( Http.RequestString ( url ) )
    
        ( xd.Descendants <| xname "title" ) 
        |> List.ofSeq
        |> printfn "%A"

    結果

    [<title>Yahoo!天気・災害 - 福岡(福岡)の天気</title>;
     <title>【 29日(火) 福岡(福岡) 】 晴後曇 - 18℃/8℃ - Yahoo!天気・災害</title>;
     <title>【 30日(水) 福岡(福岡) 】 晴時々曇 - 21℃/12℃ - Yahoo!天気・災害</title>;
     <title>【 31日(木) 福岡(福岡) 】 曇後雨 - 19℃/11℃ - Yahoo!天気・災害</title>;
     <title>【 1日(金) 福岡(福岡) 】 曇時々雨 - 20℃/11℃ - Yahoo!天気・災害</title>;
     <title>【 2日(土) 福岡(福岡) 】 晴時々曇 - 23℃/11℃ - Yahoo!天気・災害</title>;
     <title>【 3日(日) 福岡(福岡) 】 曇時々雨 - 23℃/12℃ - Yahoo!天気・災害</title>;
     <title>【 4日(月) 福岡(福岡) 】 曇時々雨 - 18℃/11℃ - Yahoo!天気・災害</title>;
     <title>【 5日(火) 福岡(福岡) 】 曇時々晴 - 20℃/9℃ - Yahoo!天気・災害</title>;
     <title>【 福岡地方 】注意報があります - Yahoo!天気・災害</title>]
    bleis-tift
    @bleis-tift
    mapしてValueだかなんだかに変換すればいいのでは?
    あと、個人的には順次パイプラインの右側に置くのは、ofXxxじゃなくてtoXxxの方が好みです
    (* こっち側はseq *) |> Seq.toList |> (* こっち側はlist *)
    こんな風に、型とモジュール名、関数名と型名が一致するので
    Yukitoshi Suzuki
    @yukitos
    XElementの使い方は最初よく分からないですよねえ。そのあたりから調べるのが吉です。
    callmekohei
    @callmekohei
    ブレイスさん!ユキトスさん!ありがとうございます!できましたっ!超感動です!
    #r @"../../System.Xml.Linq.dll"
    open FSharp.Data
    open System.Xml.Linq
    
    module Test_XML =
    
        let url =  "http://rss.weather.yahoo.co.jp/rss/days/8210.xml"
    
        let xname s = XName.Get s
        let xd = System.Xml.Linq.XDocument.Parse ( Http.RequestString ( url ) )
    
        ( xd.Descendants <| xname "title" )
        |> Seq.map (fun xe -> xe.Value ) 
        |> Seq.toList
        |> printfn "%A"
    ["Yahoo!天気・災害 - 福岡(福岡)の天気"; "【 29日(火) 福岡(福岡) 】 晴後曇 - 18℃/8℃ - Yahoo!天気・災害";
     "【 30日(水) 福岡(福岡) 】 晴時々曇 - 21℃/12℃ - Yahoo!天気・災害";
     "【 31日(木) 福岡(福岡) 】 曇後雨 - 19℃/11℃ - Yahoo!天気・災害";
     "【 1日(金) 福岡(福岡) 】 曇時々雨 - 20℃/11℃ - Yahoo!天気・災害";
     "【 2日(土) 福岡(福岡) 】 晴時々曇 - 23℃/11℃ - Yahoo!天気・災害";
     "【 3日(日) 福岡(福岡) 】 曇時々雨 - 23℃/12℃ - Yahoo!天気・災害";
     "【 4日(月) 福岡(福岡) 】 曇時々雨 - 18℃/11℃ - Yahoo!天気・災害";
     "【 5日(火) 福岡(福岡) 】 曇時々晴 - 20℃/9℃ - Yahoo!天気・災害";
     "【 福岡地方 】注意報があります - Yahoo!天気・災害"]
    これで、雨の日も大丈夫!(笑)
    Yukitoshi Suzuki
    @yukitos
    :clap:
    omanuke
    @omanuke
    どうでもいいですが、自分はここからはListなんや!という気概が感じられるのでList.ofSeqのほうが好きです(´・ω・`)
    bleis-tift
    @bleis-tift
    せっかく -> の順番で流れているんだから、その順番に沿った語順を選んでます
    普通の関数適用の形で書くときは ofXxx 使いますね
    (List.ofSeq xs) をわざわざ (xs |> Seq.toList) とは書かない的な
    MIYAZAKI Shohei
    @hafuu
    ofSeqtoListも全然意識してないし毎回指が動いた方を使ってるわ
    bleis-tift
    @bleis-tift
    あとは、{値} |> {モジュール名(値の型に相当)}.hogehoge {引数} って並ばせることが多いので、それに倣う、という意味もあります
    パイプラインに流す値の型とモジュール名は一致させておく、という感じです
    MIYAZAKI Shohei
    @hafuu

    https://twitter.com/ue_dai/status/714718780576899073

    型拡張で何か解決できないかなーとか思ったけど無理だった。inlineなんだからZeroプロパティを解決してくれてもいいのに…

    type Set<'T when 'T : comparison> with
      static member Zero = Seq.empty<'T>
    Array.sum ([||] : Set<_>[])
    型拡張と型制約で色々遊べた気がするけど、勘違いだったかなぁ
    型拡張には固有拡張と任意拡張の2種類があって挙動が違うから、それで勘違いしたのかな
    bleis-tift
    @bleis-tift
    FsControlの出番ですね!
    MIYAZAKI Shohei
    @hafuu
    FsControl使っても、既存の関数に対しては無理じゃない?
    bleis-tift
    @bleis-tift
    既存の関数をシャドーイングだ!
    MIYAZAKI Shohei
    @hafuu
    新しいsum作れば良いのか
    そうそう
    type Hoge() =
      static member (+) (x: Hoge, y: Hoge) = Hoge()
    
    type Hoge with
      static member Zero = Hoge()
    
    Array.sum ([||] : Hoge[])
    これは固有拡張だからOK。Setの例は任意拡張だからNG

    リフレクションで型をチェックするときは、その型に対して固有拡張が使用されますが、任意拡張は使用されません。

    だって

    callmekohei
    @callmekohei

    <再:文字化け回避に関して>

    昨日アダコーラさんに教えていただいた方法でやってみたのですが、うまくいきません。たぶんContentType HttpContentTypes.Htmlの部分のような気がするのですが、、、。お知恵を頂けると嬉しいです。

    #r @"../lib/FSharp.Data.dll"
    #r @"../../System.Xml.Linq.dll"
    open FSharp.Data
    open FSharp.Data.HttpRequestHeaders
    open System.Xml.Linq
    
    module Test =
    
        let url = "http://www.aozora.gr.jp/index_pages/person81.html" 
    
        Http.RequestString (  url , headers = [ ContentType HttpContentTypes.Html] )
        |> XDocument.Parse 
        |> printfn "%A"

    結果

    vimの動作が不能になる。。。
    adacola
    @adacola
    set no
    setの配列の和集合を求めるだけならSet.unionMany使えばいいと思いますが、あくまでArray.sumでやりたいんだろうか…
    adacola
    @adacola

    再掲

    Http.RequestStringとかを使って文字列としてダウンロードしてからHtmlDocument.Parseを呼ぶのがいいと思われますが、どうやらそのサイトは適切にリクエストヘッダを指定しないとまともにレスポンス返してくれないっぽいのでがんばってくださいw

    callmekohei
    @callmekohei
    はい。がんばります!(^_^;; アダコーラさん、すいません。。。
    adacola
    @adacola
    この問題はF#というよりサイトクロールの話になるのでこれ以上ここでやる話でもないと思われます。(サイトごとに対処方法異なったりするのでキリがないですし)
    一応ヒントだけ教えると、そのページはブラウザだと普通に取得できるのでブラウザが送っているリクエストを真似ればいいです!
    callmekohei
    @callmekohei
    アダコーラさん、ありがとうございます!(感謝!ヤサシイ、、、。
    adacola
    @adacola
    あ、その後無事レスポンスが取れても文字化けしてるので、その回避はHttp.RequestStringresponseEncodingOverride = "(ここに正しい文字コード名)"の引数を追加すればいいです