• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB 解析)

VB 解析でデータを抜き出す方法

このQ&Aのポイント
  • VB 解析でデータを抜き出す方法が分からない
  • 抜き出したいのは、特定の文字列と数値
  • どなたかご教示よろしくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

度々です。 ファイルの場合でWebBrowserコントロールを使う方法です。 通常のファイルを読み込んで、html形式にして保存します。 Public Class Form1 Const SUORS_PAS As String = "C:\testfile.txt" '元のファイル Const HTML_FILE As String = "C:\testfile.html" 'htmlのファイル Private Sub f() Handles MyBase.Shown WebBrowser1.Visible = False Dim dt As String = IO.File.ReadAllText(SUORS_PAS, System.Text.Encoding.GetEncoding("shift-jis")) Dim writer As New IO.StreamWriter(HTML_FILE, False, System.Text.Encoding.GetEncoding("utf-8")) writer.WriteLine("<html><body><table>" & dt & "</table></body></html>") writer.Close() WebBrowser1.Navigate(HTML_FILE) End Sub Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted ListBox1.Items.Clear() For Each txt As HtmlElement In WebBrowser1.Document.GetElementsByTagName("td") If txt.InnerText = Nothing Then txt.InnerText = " " End If ListBox1.Items.Add(txt.InnerText) Next End Sub End Class

その他の回答 (5)

回答No.5

すいません訂正です。 空文字があるのを無視してしまいました。 Public Class Form1 Private Sub f() Handles MyBase.Shown 'WebBrowserコントロールを非表示にする WebBrowser1.Visible = False 'WebBrowserコントロールに対象のURLページを表示 WebBrowser1.Navigate("http://localhost:57599/WebSite1/HtmlPage.html") End Sub 'WebBrowser1_DocumentCompletedイベントハンドラー Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted ListBox1.Items.Clear() For Each htm As HtmlElement In WebBrowser1.Document.GetElementsByTagName("td") If htm.InnerText = Nothing Then htm.InnerText = " " '空文字を忘れました。 End If ListBox1.Items.Add(htm.InnerText) Next End Sub End Class ごめんなさ~い

回答No.4

またまた失礼します >時などの文字列と<class="data_0_0">1017.5</td>の間の1017.5などの数値 なんか違うみたいです。 <td style="white-space:nowrap">1</td>の1の値も必要だと思いますが? ちがうかな~ これって<テーブル></テーブル>の表みたいなものですね。 <tr class="mtx" style="text-align:right;"><td style="white-space:nowrap">1</td> ↑の行が最後の表の一番右に表示される値だと思います。 よってWebBrowserコントロールを使う場合は<class="data_0_0">1017.5</td>の比較だけでは取得できませんね。 <td style="white-space:nowrap">1</td>も対象にする必要がありま~す。 変更のサンプルを掲載します。 Public Class Form1 Private Sub f() Handles MyBase.Shown 'WebBrowserコントロールを非表示にする WebBrowser1.Visible = False 'WebBrowserコントロールに対象のURLページを表示 WebBrowser1.Navigate("対象のURL") End Sub 'WebBrowser1_DocumentCompletedイベントハンドラー Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted ListBox1.Items.Clear() For Each htm As HtmlElement In WebBrowser1.Document.GetElementsByTagName("td") ListBox1.Items.Add(htm.InnerText) Next End Sub End Class

回答No.3

再び失礼します。 データがファイルに記入されている場合のことを考慮して、 かなりレトロなサンプルを作成しましたので、参考になればと思います。 Public Class Form1 Private Sub f() Handles MyBase.Shown ListBox1.Items.Clear() Dim reader As New IO.StreamReader("C:\testfile.txt", System.Text.Encoding.GetEncoding("shift-jis")) Dim itm() As String 'class=で区切った場合の配列 Dim forword() As String '"<"で区切った場合の配列 Dim back() As String '">"で区切った場合の配列 Dim st As String st = reader.ReadToEnd 'ファイルを読み込む itm = Split(st, "class=") '"class="で区切る For Each txt As String In itm If txt.Contains("data_0_0") Then txt = txt.Replace("""", "") '"をなくす forword = txt.Split("<") '"<"で区切る back = forword(0).Split(">") '">"で区切る If back(1) <> "" Then '空文字は無視する ListBox1.Items.Add(back(1)) End If End If Next End Sub End Class このような場合はLINQを使うと3、4行で終わっちゃいますね。

回答No.2

こんにちは もしかして、これってWebサイトのページから読み込むんですか? そうだとするとWebBrowserコントロールを使うと簡単に取得できます。 1.フォームにWebBrowserコントロールを貼り付けます。 2.<class="data_0_0">の文字が沢山あるようですので.フォームにListBoxを貼りつけます。 3.下記のコードの「WebBrowser1.Navigate(対象URL)」にURLを入力してコピペしてください。 Public Class Form1 Private Sub f() Handles MyBase.Shown 'WebBrowserコントロールを非表示にする WebBrowser1.Visible = False 'WebBrowserコントロールに対象のURLページを表示 WebBrowser1.Navigate(対象URL) End Sub 'WebBrowser1_DocumentCompletedイベントハンドラー Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted 'リンクのページが複数の時の対処  1度で対象ページが読み込まれる場合は不要です If sender.url.ToString <> e.Url.ToString Then Exit Sub End If '<class="data_0_0">の文字をListBoxに表示 For Each htm As HtmlElement In WebBrowser1.Document.All If htm.GetAttribute("classname") = "data_0_0" Then ListBox1.Items.Add(htm.InnerText) End If Next End Sub End Class サイト名がわかりませんの未検証ですが、基本的にこんな感じです。 違ってましたらごめんなさい。

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

http://okwave.jp/qa/q7864978.html この質問の方ですよね? 上記質問の回答にも書きましたが、Webクエリでの取り込みならばExcel上でデータ処理&必要データファイル保存を行い、VB上でファイルデータ読み込み処理実行の方が処理しやすいと思います Excel上での処理ができない事情があるのであれば HTMLタグの部分をすべて他の区切り文字に変更する < から >までを,(カンマ)に置き換え、カンマが連続する場合は単一のカンマに置き換え これでデータ自体はCSV形式にデータになります

関連するQ&A