DOBON.NETプログラミング道掲示板

■ 「新規作成」から投稿できます。
■ マルチポストされた投稿を見つけたときは、その投稿に返信することによりご報告ください。その際は匿名で投稿し、マルチポストされている場所を併記してください。
■ スパム対策のため、メールアドレスの先頭に"_"という文字が付加されています。
RSS 2.0 RSS 2.0 | RSS 0.91 | 携帯電話用 | 自分専用のアイコンを使用するには | 掲示板への要望 | 管理人に連絡 | お気楽掲示板
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
NomalWindowsMediaPlayerで次のURLを指定しても反映されない。(2) | Nomal"−"を縦書きにしたい(9) | Nomal.NET6.0 のWinFormにWPFのユーザーコントロールを配置したい(4) | NomalDataGridViewの列にコンボボックスを表示する(2) | Nomalデータグリッドビューの特定の列ヘッダの色(2) | NomalVB-Report10→11への移行(4) | Nomalデフォルトプリンタの用紙向き変更(0) | NomalASP.net デバッグ時の .js ファイルの変更が反映されない(1) | NomalpictureBoxとlabelの重ね合わせ(2) | NomalWindowsエクスプローラへのドロップ先フォルダの取得(4) | Nomal入力値を元に描画させたい(2) | NomalVBで開いたExcelでのイベントを取得するには(4) | NomalデザイナでSystemColorsのような色一覧から選択できるようにしたい(0) | NomalTaskの入れ子の待ち方2(4) | NomalTaskの入れ子の待ち方(5) | NomalVisualStudio2019 以降の検索ダイアログが正常に動作しない(2) | NomalUsingの使い方が間違っている?(4) | Nomal//./の意味は?(2) | Nomalバイナリーファイルの結合と分解(2) | NomalVSTOとWebView2の共存って可能?(2) | Nomal表の最後の行の下にDropできない(1) | NomalCookieの勉強を始めました。(2) | NomalDataGridViewの特定セルにボタンを配置する方法(3) | NomalDataGridViewのセル結合部分にボタンを表示する方法(3) | Nomal複数のPageに分かれる場合のスクレ―ピング(6) | NomalTask.Runの使い方(4) | NomalPictureBox のサイズを設定する(2) | NomalProcessクラスMainModuleプロパティでアクセス拒否(3) | NomalLINQでControlsをEnable=Falseに設定(3) | Nomalランダムファイルを高速化させたい(5) | Nomalプロセス間の通信(相互)(2) | NomalC#をVBに変換する方法が分かりません(1) | NomalPictureBoxに動的に画像を表示する(1) | NomalYahooのHPで、検索文字の入力ができない(3) | NomalWebView2のEncodeの問題?(5) | NomalWinFormでChromeをSeleriumで操作しているが、Closeの仕方(2) | Nomal印刷部数の固定(1) | NomalWinformでのDataGridView Comboboxのデータ追加削除が出来ない(3) | Nomalプログラムについて。(2) | Nomal拡張子関連付けのサンプルで削除時 例外発生(1) | Nomalユーザーコントロールをフォームで使用した時のエラー(6) | NomalマルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する(12) | Nomal画像の大きさを取得するには(4) | Nomalファイルがドライブ内で占有する容量(3) | NomalC#FormのXボタンイベントで、e.Cancel が使えない(2) | NomalAxWindowsMediaPlayerでプレイリストの途中から再生するには(2) | NomalWebView2でJavaScriptの実行の終了イベント(4) | NomalDataTableのDataRowVersion毎のInt型値の比較がうまくいかない(5) | NomalGPTかMBRを判断したい(2) | Nomalアセンブリ言語について。(1) | Nomalマクロについて。(3) | NomalDLL内のスレッドからイベントを発行すると、受信したフォームでラベルが更新できない(3) | Nomalアセンブリ言語について。(20) | Nomalシステムコールについて。(2) | Nomal Parallel.Forで思ったより早くならない(5) | NomalAngleSharp.Scripting.JavaScriptの使い方(2) | NomalDataAdapterで2回目のUpDateが出来ない(6) | NomalForm1イベントの選択が出来なくなりました。(9) | Nomalデザーナー時の継承先formのサイズ(0) | Nomalコンソールではなくテキストボックスに文字列を出力したい(7) | NomalAngleSharpのクエリー文2(4) | Nomalコーディングについて。(3) | Nomaldll修正時、それを参照しているexeのリビルド要否(2) | NomalAngleSharpのクエリー文(2) | Nomalデフォルトプロパティを使いたい(6) | Nomalテキストボックスでの制御(7) | NomalUSBカメラをピクチャボックスに表示(3) | Nomal二次元配列内の文字の置き換え(3) | Nomalcolor型を引数にする方法(2) | NomalVSプロジェクト作成方法の違いによる、プラグイン機能を持つアプリケーションへの影響について(6) | NomalInputボタンが押せない(4) | NomalWebBrowserのDocumentCompletedイベントの切り替え(3) | NomalEndConnectでのエラー(2) | Nomalボタンクリック時のLeaveイベントについて(1) | Nomalエクセルのデータを配列に読込んだ時の配列要素番号について(2) | Nomalorder by で抽出したデータをDataTableに入れてForEachでDataRow取得した際の順番(2) | Nomal非同期プログラミング時のConsole.WriteLineの動作(4) | NomalC#からストアドにDecimalを渡すと値が丸められる(4) | Nomalインスタンスの型を文字列で指定したい(2) | NomalSendKeys.Sendが効いていない(2) | Nomal他のプロジェクトのコントロールがツールボックスに表示されない(3) | Nomal複数のテキストボックス間のTextChangedイベントが相互干渉しないようにしたい(9) | Nomal呼び出し元によってWebApi側の処理速度に差が出る(1) | NomalPanelのDock=Topだとうまくいかない。代替案。(2) | Nomal.NetでのIPv6の比較(5) | Nomal.Net 5.0 におけるDLL参照問題?(7) | Nomal追加コントロールのtabindex値を既存の間に設定する方法(1) | NomalVB.net非同期処理でtextboxに出力したい(2) | NomalToolStripStatusLabelの空白部分を埋めたい(2) | NomalOracle への OleDb 接続に失敗する(3) | Nomal正規表現で株価を取得したい(1) | NomalVB.NETで作成したDLLをVB6.0から呼び出す(3) | Nomalデザイナで編集・チェックアウトキャンセルすると(3) | Nomal親スレッドへ処理の移譲(7) | NomalクラスによるGetBytes関数のエンディアンの違い(2) | Nomal[VB.NET]Excelのプロセスが終了しない(2) | NomalC#をVBに変換した際の強制的な参照渡し(2) | Nomal.Net 5.0 におけるServiceControllerの代替クラス(3) | Nomal新たにshowしたフォームでのボタンのクリック(5) | NomalVB.NETからRDゲートウェイを利用したリモートデスクトップ接続(4) |



■記事リスト / ▼下のスレッド
■34762 / 親記事)  AngleSharpのクエリー文2
□投稿者/ Wan 一般人(15回)-(2021/06/08(Tue) 21:03:53)
  • アイコン環境/言語:[Windows10 VisualStudio2019 VB.net WindowsForm] 
    分類:[.NET] 

    Dim tmp = doc.QuerySelectorAll("h2")
    で、次のような
    {AngleSharp.Html.Dom.HtmlHeadingElement}のコレクションが返されたとします。
    <h2 class="hdg-l2-03"><span>ねずみ</span></h2>
    <h2 class="hdg-l2-03"><span>うし</span></h2>
    <h2 class="hdg-l2-03"><span>とら</span></h2>
    <h2 class="hdg-l2-03"><span>うさぎ</span></h2>
    <h2 class="hdg-l2-03"><span>たつ</span></h2>
    <h2 class="hdg-l2-03"><span>へび</span></h2>
    これを、
    Dim tmp2 = doc.QuerySelectorAll("h2").??????
    とLINQを続ける?ことによって
    ねずみ
    うし
    とら
    うさぎ
    たつ
    へび
    のようなコレクションを取得するLINQってどうやって書けばいいのでしょうか?
    また、tmpの各要素に対してQuerySelector文を適用してコレクションを取得することは出来るのでしょうか?
    (現在、tmpをFor Eachで回してQuerySelectorをかけています。
    
    詳しい方いらっしゃいましたご教授の程宜しくお願い致します。
    

違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■34763 / ResNo.1)  Re[1]: AngleSharpのクエリー文2
□投稿者/ Hongliang 大御所(604回)-(2021/06/08(Tue) 21:35:09)
  • アイコン例示されているものならこれだけも十分ですが。
    foreach (var text in tmp.Select(h => h.TextContent))

    > tmpの各要素に対してQuerySelector文を適用してコレクションを取得
    こんな?
    foreach (var text in tmp.SelectMany(h => h.QuerySelectorAll("span")).Select(s => s.TextContent))

    // セレクタだけだとテキストノードを選択できないな…。
違反を報告
引用返信
■34765 / ResNo.2)  Re[2]: AngleSharpのクエリー文2
□投稿者/ Wan 一般人(16回)-(2021/06/09(Wed) 08:00:00)
  • アイコンHongliang様
    早速のご指導有難う御座います。

    SelectManyってこうやって使うのですね?
    勉強になります。
    セレクタだけだとテキストノードを選択できないとのことで、
    For Eachは避けられないことを理解しました。

    大変助かります。
    有難う御座いました。
解決み!
違反を報告
引用返信
■34767 / ResNo.3)  Re[3]: AngleSharpのクエリー文2
□投稿者/ 魔界の仮面弁士 大御所(1347回)-(2021/06/09(Wed) 11:50:42)
  • アイコンNo34765に返信(Wanさんの記事)
    > セレクタだけだとテキストノードを選択できないとのことで、
    CSS セレクタは、「要素(Element)」ノードを対象とするものだからですね。
    QuerySelectorAll の結果が INode ではなく IElement のコレクションなのもそのため。

    XSLT などでも使われる XPath であれば、テキストノードや
    属性ノードを直接選択することもできます。


    > For Eachは避けられないことを理解しました。

    'Imports AngleSharp.Dom
    'Imports AngleSharp.XPath

    '--------------------
    ' QuerySelectorAll は CSS セレクタを使うため、結果は常に要素ノード
    Dim tmp0() As IElement = doc.QuerySelectorAll("h2").ToArray()

    '' 要素ノード配下のテキストノードを得るためには、
    '' TextContent プロパティや Text 拡張メソッドを使う
    Dim tmp1() As String = doc.QuerySelectorAll("h2.hdg-l2-03>span").Select(Function(n) n.TextContent).ToArray()
    Dim tmp2() As String = doc.QuerySelectorAll("h2[class]>span").Select(Function(n) n.Text()).ToArray()
    Dim tmp3() As String = doc.QuerySelectorAll("h2[class='hdg-l2-03']>span").Select(Function(n) n.InnerHtml).ToArray()
    Dim tmp4() As String = doc.QuerySelectorAll("h2 span").Select(Function(n) n.OuterHtml).ToArray()

    '--------------------
    ' SelectSingleNode / SelectNodes は XPath を使うため、結果は汎用ノードであり、
    ' 要素ノード以外の処理にも使える。CSS セレクタとは別構文。
    Dim tmp5() As INode = doc.Body.SelectNodes("//h2").ToArray()

    '' 要素だけでなくテキストノードやコメントノードも取得してみる
    Dim tmp6() As IElement = doc.Body.SelectNodes("//span").OfType(Of IElement)().ToArray()
    Dim tmp7() As String = doc.Body.SelectNodes("//h2/span/text()").Select(Function(n) n.NodeValue).ToArray()
    Dim tmp8() As IText = doc.Body.SelectNodes("//h2/span/text()").OfType(Of IText)().ToArray()
    Dim tmp9() As IComment = doc.Body.SelectNodes("//comment()").OfType(Of IComment)().ToArray()
解決み!
違反を報告
引用返信
■34775 / ResNo.4)  Re[4]: AngleSharpのクエリー文2
□投稿者/ 魔界の仮面弁士 大御所(1352回)-(2021/06/10(Thu) 09:56:56)
  • アイコン2021/06/10(Thu) 09:57:36 編集(投稿者)

    # 解決済みチェックを外してしまっていたので再チェック

    No34767に追記(魔界の仮面弁士の記事)
    > XSLT などでも使われる XPath であれば、テキストノードや
    > 属性ノードを直接選択することもできます。
    > 'Imports AngleSharp.XPath

    「属性ノード」について補足。

    AngleSharp.XPath で属性ノードを選択した場合(例:"h2/@class")、
    属性(IAttr)そのものではなく、その属性を持った要素ノードが返されてしまう
    問題がありましたが、これには破壊的修正が入るようです。
    今後リリースされる版では、正しく属性を返せるようになるでしょう。

    https://github.com/AngleSharp/AngleSharp.XPath/issues/23
    https://github.com/AngleSharp/AngleSharp.XPath/pull/24
    https://github.com/AngleSharp/AngleSharp.XPath/pull/25
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-4]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34760 / 親記事)  コーディングについて。
□投稿者/ コルム 一般人(1回)-(2021/06/08(Tue) 16:14:26)
  • アイコン
    分類:[その他] 

    コーディングとは、コンピュータにコード入力する事を言います。 転じてプログラミングの意味で使われますが、プログラムコードを書くこと全般を言います。 プログラムコードはふつうソースコードと呼びます。 ソースコードとは普通はテキストファイルの形で保存されるコードのことです。 アセンブリ言語もテキストファイルに書き込んでゆきます。 マシン語は、基本的にはテキストファイルではなく、実行形式のバイナリファイルそのままをバイナリエディタや専用エディタで編集します。 C言語中のインラインアセンブラのように、そこにマクロ命令でマシン語を書き込む事も出来るには出来ます。 勿論、マクロアセンブラ(MASM)のようなアセンブリ言語でもマクロ命令でマシン語コードを記述出来ます。 大昔まで言えば、穿孔テープを使っていた頃のコンピュータなら、テープに穴を空ける作業もコーディングです。 穿孔テープは穴の有無を2進数で示していて、そこに必要に応じてチェックサムなどを付けたものですが、これは紛れもなくマシン語です。 これら全てを総じてコーディングと呼びます。 ですから、アセンブリ言語もマシン語もそれを書くことはコーディングです。

    以下四つの質問に答えていただけると幸いです。
    @テキストファイルとは何でしょうか?
    A マシン語は、基本的にはテキストファイルではなく、実行形式のバイナリファイルそのままをバイナリエディタや専用エディタで編集します。 C言語中のインラインアセンブラのように、そこにマクロ命令でマシン語を書き込む事も出来るには出来ます。 勿論、マクロアセンブラ(MASM)のようなアセンブリ言語でもマクロ命令でマシン語コードを記述出来ます。
    ここの意味がわかりません。もう少し詳しく教えて頂きたいです。
    Bチェックサムとは何でしょうか?
    よろしくお願いします。

    Cテキストは文字コードが割り当てられた、16進数でいう0x20〜7f のものです。
    マシンコードは8bitなら全部 0x00〜oxff 全部の値があり得ます

    よろしくお願いできればと思います。
    引用先
    https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10244362355

違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■34761 / ResNo.1)  Re[1]: コーディングについて。
□投稿者/ 魔界の仮面弁士 大御所(1345回)-(2021/06/08(Tue) 17:48:25)
  • アイコンNo34760に返信(コルムさんの記事)
    > 引用先
    > https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10244362355

    引用なのか、それともマルチポストなのか…。


    > @テキストファイルとは何でしょうか?
    可読文字のデータのみで構成されたファイルのことです。

    テキストファイルは、バイナリファイルの一種ではありますが、多くの場合、
    テキストファイルの対義語としてバイナリファイルという言葉が使われます。

    同じ文字であっても、「文字コード」が異なれば、データ化した時のバイナリ列は異なります。
    また、そのバイナリ内容から、どの文字コードで保存されたデータなのかを完全に判断することはできません。

    たとえば ASCII という文字コードで「+XwFY6w-」という 8 文字をファイルに保存すると
    2B,58,77,46,59,36,77,2D という 8 バイトのテキストファイルが生成されるのですが、
    これを ASCII ではなく、誤って UTF-7 でデコードしてしまうと、
    「弁士」という 2 文字として解釈されることになります。

    あるいは、EUC-JP という文字コードで「珎瑕」という 2 文字をファイルに保存すると
    E0,DD,E0,EA で示される 4 バイトのテキストファイルとなりますが、
    これを Shift_JIS でデコードすると「珈琲」という 2 文字に化けることになります。


    > Bチェックサムとは何でしょうか?
    入力ミスやデータの破損を防ぐために使われる、検算の仕組みの一つです。

    元データのそれぞれの値を足し合わせた「合計値」を記録しておき、
    それをチェックサム値として、元データと共に受け渡します。

    データを受け取る側は、受け取ったデータを同じように計算して、
    合計値が異なっていれば、データが間違っていることを検出できるわけです。

    チェックサムと似たような仕組みとして、
    チェックデジットという物もあります。こちらの説明は省略。


    > Cテキストは文字コードが割り当てられた、16進数でいう0x20〜7f のものです。
    これは正確な表現ではありませんね。

    恐らくは ASCII などの 7bit 系の文字コードを指した説明だとは思いますが、
    ほとんどの文字コードにおいては、「タブ文字」や「改行文字」のために、
    0x00〜0x1f の範囲が割り当てられることがあるためです。

    また、8bit 系の文字コードでは 0x80〜0xff の範囲も使われることになります。
違反を報告
引用返信
■34764 / ResNo.2)  Re[2]: コーディングについて。
□投稿者/ コルム 一般人(2回)-(2021/06/09(Wed) 03:18:12)
  • アイコンNo34761に返信(魔界の仮面弁士さんの記事)
    Aについて教えていただけないでしょうか?すみません。
違反を報告
引用返信
■34821 / ResNo.3)  Re[3]: コーディングについて。
□投稿者/ Heiki 一般人(3回)-(2021/07/02(Fri) 21:22:10)
  • アイコンNo34764に返信(コルムさんの記事)
    > ■No34761に返信(魔界の仮面弁士さんの記事)
    > Aについて教えていただけないでしょうか?すみません。
    すみません 横から失礼します。
    > マシン語は、基本的にはテキストファイルではなく、実行形式のバイナリファイルそのままをバイナリエディタや専用エディタで編集します。
    これは、マシン語は人間が読んだり書いたりできるようなものではないので、文章用であるテキストエディタでは編集に向きません。そのため、マシン語はマシン語に特化したバイナリエディタで編集するのです。

    > C言語中のインラインアセンブラのように、そこにマクロ命令でマシン語を書き込む事も出来るには出来ます。
    これは、gccなどのCコンパイラにある機能で、C言語にない命令(例えばHLTなど)をC言語のソースコードに記述するときに用います。
    asm("hlt");
    を使うとインラインアセンブラが使えます。ただし、VC++では書き方が異なります。

    > 勿論、マクロアセンブラ(MASM)のようなアセンブリ言語でもマクロ命令でマシン語コードを記述出来ます。
    これは直接埋め込むということでいいでしょうか?
    それはできます。これもまた書き方はアセンブラ依存なので、MASMとNASMでは書き方が異なります。
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-3]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34755 / 親記事)  dll修正時、それを参照しているexeのリビルド要否
□投稿者/ 沢庵 一般人(1回)-(2021/06/02(Wed) 21:21:28)
  • アイコン環境/言語:[VB2017] 
    分類:[.NET] 

    現在、以下の2つのプロジェクトを含む
    ソリューションMySol1.slnがあります。
    
    ■MyLibプロジェクト(DLL)
    Public Class MyXxxx
        Enum XxxxEnum
            Xxxx1
            Xxxx2
        End Enum
        Sub New(ByVal xxx As ExxxEnum)
            '省略
        End Sub
        Sub Calc()
            Select Case yyy
            Case XxxxEnum.Xxxx1
                '省略
            Case XxxxEnum.Xxxx1\2
                '省略
            End Select
        End Sub
    End Class
    ■MyApp1プロジェクト(EXE) ※MyLib.dllを参照。
    Public Class Main
        Private Sub MySub1()
            Dim xxx = New MyLib.MyXxxx(MyLib.MyXxxx.XxxxEnum.Xxxx2)
        End Sub
    End Class
    
    ビルドし、同一フォルダに
    MyLib.dll
    MyApp1.exe
    を格納して、使用しています。
    
    今回、別件でMyLibプロジェクトを修正しました。
    MyLibプロジェクトは他のソリューションでも使用しています。
    
    ■MyLibプロジェクト(DLL)
    Public Class MyXxxx
        Enum XxxxEnum
            Xxxx1
            Xxxx2
            Xxxx3     'Enumに1つメンバを追加。
        End Enum
        Sub New(ByVal xxx As ExxxEnum)
            '省略
        End Sub
        Sub Calc()
            Select Case yyy
            Case XxxxEnum.Xxxx1
                '省略
            Case XxxxEnum.Xxxx2
                '省略
            Case XxxxEnum.Xxxx3     'Case分岐追加。
                '省略
            End Select
        End Sub
    End Class
    
    この場合、フォルダに格納するモジュールは
    MyLib.dllだけの差し替えで問題ありませんでしょうか?
    
    フォルダに格納されるファイルは
    下記のような状態でも、MyApp1.exeは問題ないでしょうか?
    
    MyLib.dll    '修正版でビルドしたファイルで差し替え
    MyApp1.exe   '古いMyLibでビルドしたファイルのまま
    
    プロパティを削除したり、メソッドを削除したり、
    
    メソッドの引数を変更した場合は、参照しているexeをリビルドしないといけない
    とは思うのですが、
    Enumのメンバーを追加した時に、リビルドが必要かどうかを教えてください。
    
    

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34756 / ResNo.1)  Re[1]: dll修正時、それを参照しているexeのリビルド要否
□投稿者/ 魔界の仮面弁士 大御所(1344回)-(2021/06/02(Wed) 22:18:26)
  • アイコン2021/06/02(Wed) 22:50:19 編集(投稿者)

    No34755に返信(沢庵さんの記事)
    > MyLibプロジェクトは他のソリューションでも使用しています。
    > この場合、フォルダに格納するモジュールは
    > MyLib.dllだけの差し替えで問題ありませんでしょうか?

    Enum が Private であれば問題ありませんが、
    Public だとしたら、「他のソリューション」の実装次第だと思います。
    要件次第では、問題になることがあるでしょう。

    すなわち『値の網羅性』をどう扱うべきであるのか…ということです。


    追加した値そのものは、呼び出す側(EXE)をリビルドせずとも、
    DLL を入れ替えた時点ですぐに使えるようになります。

    Enum.GetValues / GetNames で得た配列情報を ComboBox に表示したり
    ToDictionary 拡張メソッドに渡していた場合も、リビルドせずに
    ただちに新しい値が反映されます。

    後はその新値が何を意味するのかが重要になるというわけですね。


    たとえばリビルドせずに新値が渡された場合、相手が C# で
    switch 式 (≠switch ステートメント)に使われていたとしたら、
    網羅性チェックにより、新値に対するスイッチが存在しないために
    SwitchExpressionException (.NET Core 3.x / .NET 5 / .NET 6)
    InvalidOperationException (.NET Framework) の例外になってしまいます。
    https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/switch-expression

    ※リビルドすれば、コンパイル警告 CS8509 によって新値への対応漏れを検出できます。


    VB には列挙値に対する網羅式が実装されていませんが、
    それでも Select Case や If で受けている場合には、
    当初想定されていない列挙値に対する取り扱いが肝になる点は変わりません。

    ・想定外なら無視する
     (一番単純だが、仕様変化時に対処漏れが発生しやすい。)

    ・想定外なら例外にする
     (実装漏れを防ぐという意味では、ある意味安全ではある)

    ・想定外なら既定値扱いにする
     (実行時エラーを防ぐための措置。良し悪しはケースバイケース。)


    さらに Flags 属性付の列挙型の場合は、マスク判定に影響が出るケースもあるでしょう。


    あるいは Enum.TryParse メソッドや IsDefined メソッドによるガード句についても考慮が必要です。
    たとえば System.Environment.GetFolderPath(SpecialFolder) メソッドには

     If Not System.Enum.IsDefined(GetType(SpecialFolder), 引数) Then
      Throw New ArgumentException(…)
     End If

    に相当するガード句があるため、列挙値が増えれば意味合いも変化します。
    (従来は例外になっていた値が、列挙値に加わったことで通過してしまうわけで)
違反を報告
引用返信
■34759 / ResNo.2)  Re[2]: dll修正時、それを参照しているexeのリビルド要否
□投稿者/ 沢庵 一般人(2回)-(2021/06/07(Mon) 20:33:30)
  • アイコンリビルドせずに、DLLファイルだけ差し替えて、EXEを動作確認して、
    エラーが発生しないようであれば、
    そのままDLLだけ差し替えようと思います。

    ありがとうございました。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34752 / 親記事)  AngleSharpのクエリー文
□投稿者/ Wan 一般人(11回)-(2021/06/02(Wed) 15:59:18)
  • アイコン環境/言語:[Windows10 VisualStudio2019 VB.net WindowsForm] 
    分類:[.NET] 

    下記のHtmlDocumentに対して、下記のコードを実行すると
    次のような結果が戻ります。
    
    2017/03
    900億100万-4.7%
    1112億4100万+0.3%
    1077億5200万-5.2%
    1635億9700万+4.7%
    4725億9100万-0.6%
    
    これを、
    
    2017/03
    900億100万
    1112億4100万
    1077億5200万
    1635億9700万
    4725億9100万
    
    この様にするクエリ文はどのように書けばいいのですか?
    (要するに子の要素を全て除外する?)
    CSSセレクタを色々呼んでみたのですが、いっこうに分かりません。
    
    ググってみると
    '.news-box li:not(.news)'
    ['.news-box li.news', '.articles-box li:article']
    '.news-box li:first-child'
    'li:not(.news):not(.article)'
    のようなセレクタ表記がありますが、上手く活用できません。(内容が理解できない)
    APIセレクタは、CSSセレクタと同一なのでしょうか?
    どのようなキーワードで検索すれば、APIセレクタに対する情報を得ることが出来ますでしょうか?
    
    詳しい方いらっしゃいましったらご教授頂ければ幸いに存じます。
    
    
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim parser = New AngleSharp.Html.Parser.HtmlParser
         Dim HtmlDocument = parser.ParseDocument(HtmlText)
         Dim Elements = HtmlDocument.QuerySelectorAll("td")
         For Each Lop In Elements
           Debug.Print(Lop.TextContent)
         Next
    End Sub
    
    Dim HtmlText As String = "
    <html>
       <table>
         <body>
           <tbody>
             <tr class='odd'>
               <td class='weaken'>2017/03</td>
                <td>900億100万<br><span class='weaken co_br'>-4.7%</span></td>
                <td>1112億4100万<br><span class='weaken co_red'>+0.3%</span></td>
                <td>1077億5200万<br><span class='weaken co_br'>-5.2%</span></td>
                <td>1635億9700万<br><span class='weaken co_red'>+4.7%</span></td>
                <td>4725億9100万<br><span class='weaken co_br'>-0.6%</span></td>
              </tr>
            </tbody>
          </table>
        </body>
      </html>"
    
    
    

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34754 / ResNo.1)  Re[1]: AngleSharpのクエリー文
□投稿者/ 魔界の仮面弁士 大御所(1343回)-(2021/06/02(Wed) 16:50:46)
  • アイコンNo34752に返信(Wanさんの記事)
    > この様にするクエリ文はどのように書けばいいのですか?

    このパターンなら、クエリは変えずに

     'Debug.Print(Lop.TextContent)
     Debug.Print(Lop.FirstChild.TextContent)

    で良いのでは。
違反を報告
引用返信
■34757 / ResNo.2)  Re[2]: AngleSharpのクエリー文
□投稿者/ Wan 一般人(13回)-(2021/06/03(Thu) 20:23:46)
  • アイコン誠にお恥ずかしい質問大変失礼しました!
    新しいもので、視野が狭ばってました!

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▲上のスレッド
■34747 / 親記事)  デフォルトプロパティを使いたい
□投稿者/ Wan 一般人(9回)-(2021/05/28(Fri) 10:13:10)
  • アイコン環境/言語:[Windows10 VisualStudio2019 VB.net WindowsForm] 
    分類:[.NET] 

    WebClientを使ってHtmlDocumentを取得してゴリゴリして各要素を取得したいと考えています。既に、クラスの作成は終わっています。
    Dim myHtmlData As New HtmlData
    myHtmlData.HtmlDocument = WebClient.DownloadString(Uri)
    myHtmlData.GetElementByTagName("a")
    のように、一旦インスタンス化してHtmlDocumentに代入した後に、メソッドを使う形になっています。これを、次のように使えるようにする方法を教えて頂けないでしょうか?
    Dim myHtmlData As New HtmlData = WebClient.DownloadString(Uri)
    myHtmlData.GetElementByTagName("a")

    HtmlDocumentプロパティは、String型なので、拡張メソッドでGetElementByTagNameを追加する方法も考えたのですが、全てのString型変数に拡張メソッドが表示されるので、余り好ましく無く感じています。
    HtmlDocumentをDefault指定すると配列にする必要(Indexが必要)になるので、少しずれると思っています。
    String型は、継承出来ないし・・・・
    何か?いい解決方法があれば教えて頂けないでしょうか?
    宜しくお願い致します。

違反を報告
引用返信

▽[全レス6件(ResNo.2-6 表示)]
■34749 / ResNo.2)  Re[1]: デフォルトプロパティを使いたい
□投稿者/ 魔界の仮面弁士 大御所(1341回)-(2021/05/28(Fri) 11:33:46)
  • アイコン2021/05/29(Sat) 15:23:53 編集(投稿者)

    No34747に返信(Wanさんの記事)
    > WebClientを使ってHtmlDocumentを取得してゴリゴリして
    > 各要素を取得したいと考えています。既に、クラスの作成は終わっています。

    HtmlDocument というのは、
    System.Windows.Forms.HtmlDocument クラスのことでしょうか?

    これを WebBrowser 以外から使うのは無理ですね。


    System.Windows.Forms.HtmlDocument ではなく、
    COM の IHTMLDocument2 インターフェイスなら使えますが。

    Dim htmlDoc As New mshtml.HTMLDocument()
    DirectCast(htmlDoc, IPersistStreamInit).InitNew()
    Dim doc As mshtml.IHTMLDocument2 = htmlDoc.createDocumentFromUrl("https://dobon.net/vb/", "")


    > 既に、クラスの作成は終わっています。
    HTML の解析が目的なら、AngleSharp や HtmlAgilityPack がお手軽です。


    > HtmlDocumentプロパティは、String型なので
    ん…。

    HtmlDocument クラスではなく、自作の
    HtmlDocument プロパティの話でしたか。


    > Dim myHtmlData As New HtmlData = WebClient.DownloadString(Uri)

    Uri という変数名は、System.Uri クラスと競合してしまうので、
    別の名前にした方が良いと思いますよ。


    案1) Public Sub New(contents As Sring) を実装する。
     Dim myHtmlData As New HtmlData(WebClient.DownloadString(Uri))

    案2) Public Shared Function Create(url As String) As HtmlData を実装する
     Dim myHtmlData As HtmlData = HtmlData.Create(Uri)
違反を報告
引用返信
■34750 / ResNo.3)  Re[2]: デフォルトプロパティを使いたい
□投稿者/ Wan 一般人(10回)-(2021/05/29(Sat) 10:51:13)
  • アイコンHongliangさん
    ご指導有難う御座います。
    確かに、コンストラクタで解決できますが、
    Excel VBAで
    Range("A1").Value="柿の種"を
    Range("A1")="柿の種"と書けることを
    VB.Netでもできないかな?っと言うのが始まりです。
    VB.NetでString型の場合
    Dim Range As String
    Range = "柿の種"
    とすれば値が代入できますよね?
    これを、独自のClassで出来ないかな?
    という質問でした。
    有難う御座いました。

    魔界の仮面弁士さま
    いつもお世話になっております。
    初めのうちは、Dom解析のために、WebBrowser.Navigateで読み込んでいましたが、
    WebClientに変えて、独自でグリグリとDom解析していました。
    今回教えて頂いた、AngleSharpメッチャ便利です。
    この際、コードを全て書き換えることにしました。
    いつも便利なツールを教えて頂き大変助かっております。
    有難う御座いました。


解決み!
違反を報告
引用返信
■34751 / ResNo.4)  Re[3]: デフォルトプロパティを使いたい
□投稿者/ 魔界の仮面弁士 大御所(1342回)-(2021/05/29(Sat) 15:20:51)
  • アイコンNo34750に返信(Wanさんの記事)
    > Range("A1")="柿の種"と書けることを

    いや……それと
    > Dim myHtmlData As New HtmlData = WebClient.DownloadString(Uri)
    は文法的に繋がらないですよね?


    > VB.Netでもできないかな?っと言うのが始まりです。
    最初の質問にあった
     Dim myHtmlData As New HtmlData = WebClient.DownloadString(Uri)
    は二重代入になるので NG ですが、代わりに
     Dim myHtmlData As HtmlData = WebClient.DownloadString(Uri)
    ならできます。これはデフォルトプロパティではなく、変換演算子のオーバーロードという手法です。

    Module Module1
      Sub Main()
        Dim r As HtmlData = "<html></html>"
      End Sub
    End Module

    Public Class HtmlData
      Public Property HtmlDocument As String
      Public Shared Widening Operator CType(contens As String) As HtmlData
        Return New HtmlData() With {.HtmlDocument = contens}
      End Operator
    End Class



    でもって、VBA の Range オブジェクトについては、内部的には
     Range("A1").[_Default] ="柿の種"
    として処理されます。

    Range オブジェクトには、"_Default" という名前のプロパティがあり、
    これはディスパッチ ID が 0 (DISPID_VALUE) に設定されているため、
    VBA 的には「既定のメンバー」呼び出しの意味になります。

    VBA 的にいえば、これは
     Public Property Let [_Default](Optional RowIndex As Variant, Optional ColumnIndex As Variant, ByVal vNewValue As Variant)
     Public Property Get [_Default](Optional RowIndex As Variant, Optional ColumnIndex As Variant) As Variant
    な定義に相当します。(実際には、VBA の構文では表現しきれないのですが)

    VBScript の GetRef 関数も、既定のメンバーを持つオブジェクトを返します。
    (こちらは、既定のプロパティでは無く規定のメソッドです)


    一方 VB.NET の場合、「既定のメンバー」は作れません。
    ただし「既定のプロパティ」なら作れます。Default Property ですね。


    残念ながら VB.NET の Default Property では、「省略されていない引数が 1 つ以上」必要という制限があります。
    とはいえ、VB として『宣言』できないだけで、他言語で作られたものであれば、
    引数のない既定のプロパティを呼び出すこともできます。(サンプルとして作成した DLL を添付しておきます)

    なお、既定のプロパティを呼び出す際には、丸括弧が必須となります。

      Dim myHtmlData As New HtmlData()
      myHtmlData() = "<html></html>"
      Dim x = myHtmlData() 'これは As String になる
      Dim y = myHtmlData  'これは As HtmlData になる。
解決み!
イメージ
test.zip
/1KB
違反を報告
引用返信
■34753 / ResNo.5)  Re[4]: デフォルトプロパティを使いたい
□投稿者/ Wan 一般人(12回)-(2021/06/02(Wed) 16:12:13)
  • アイコン再び丁寧なご指導有難う御座います。

    VBではできないことが判りました。

    サンプルとして作って頂いたDLLの使い方がよく分からないので
    試すことができませんでした。
    スキルが上がったら、再チャレンジしたいと思いまます。

    有難う御座いました。
違反を報告
引用返信
■34758 / ResNo.6)  Re[5]: デフォルトプロパティを使いたい
□投稿者/ Wan 一般人(14回)-(2021/06/03(Thu) 20:24:54)
  • アイコン忘れ
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-6]






Mode/  Pass/


- Child Tree -