- ベストアンサー
VB 解析でデータを抜き出す方法
- VB 解析でデータを抜き出す方法が分からない
- 抜き出したいのは、特定の文字列と数値
- どなたかご教示よろしくお願いいたします
- みんなの回答 (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)
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
すいません訂正です。 空文字があるのを無視してしまいました。 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 ごめんなさ~い
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
またまた失礼します >時などの文字列と<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
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
再び失礼します。 データがファイルに記入されている場合のことを考慮して、 かなりレトロなサンプルを作成しましたので、参考になればと思います。 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行で終わっちゃいますね。
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
こんにちは もしかして、これって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)
http://okwave.jp/qa/q7864978.html この質問の方ですよね? 上記質問の回答にも書きましたが、Webクエリでの取り込みならばExcel上でデータ処理&必要データファイル保存を行い、VB上でファイルデータ読み込み処理実行の方が処理しやすいと思います Excel上での処理ができない事情があるのであれば HTMLタグの部分をすべて他の区切り文字に変更する < から >までを,(カンマ)に置き換え、カンマが連続する場合は単一のカンマに置き換え これでデータ自体はCSV形式にデータになります