• ベストアンサー

VB.NETでテキストファイルの解析についてヒントをいただけないでしょ

VB.NETでテキストファイルの解析についてヒントをいただけないでしょうか? 通常のテキストファイルなのですが中身は 「<div class=・・・」といったようなタグが記述されています。 特定のクラス名を見つけたらそのデータをテキストボックスに反映させたいのですがテキストファイルのタグを解析するメソッドなどが見つかりません。xmlではないのでその解析は使えないと思うのですが・・・どのようにやるのがいいものでしょうか?

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

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

Microsoft.mshtmlを利用すると、html構成を解析できます。 Microsoft.mshtmlは要参照設定です。 Imports System.IO Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load   'ファイルを読む   Dim l_strBuff As String = ReadTextSJIS(New FileInfo("C:\20100101AAA.txt"))   'そちらの作りがわからないので、取得した分だけテキストボックスをコンテンツに追加   テキストボックス作成(l_strBuff) End Sub Private Function ReadTextSJIS(ByVal p_fInf As FileInfo) As String   Return System.IO.File.ReadAllText(p_fInf.FullName, Encoding.GetEncoding("shift_jis")) End Function Private Sub テキストボックス作成(ByVal p_strBuff As String)   Dim a As New mshtml.HTMLDocument   Dim l_htmDoc As New mshtml.HTMLDocument   l_htmDoc.open("<html />")   Dim l_htmDiv As mshtml.HTMLDivElement = l_htmDoc.createElement("DIV")   l_htmDoc.appendChild(l_htmDiv)   l_htmDiv.innerHTML = p_strBuff   '中の要素数でループ   For Each l_htmItem As mshtml.IHTMLElement In l_htmDiv.children     Dim l_txt As New TextBox     Me.form1.Controls.Add(l_txt)     'クラス名を取得し設定する     l_txt.CssClass = l_htmItem.className     'テキスト内容を取得し設定する     l_txt.Text = l_htmItem.innerText   Next End Sub

mr-r00
質問者

お礼

大変さんこうになりました。 もっと勉強していきたいと思います ありがとうございました

その他の回答 (2)

回答No.2

>タグを解析するメソッドなどが見つかりません。xmlではないのでその解析は使えない そんな事はありません。 XML同様、マークアップ言語であるHTMLのであれば、書式が整っていたら解析は行えます。 方法はいくつかありますが、例が <div class=・・・ だけでは何とも。。。 以前に質問をされていた http://okwave.jp/qa/q5819786.html の関連ですよね? その質問の20100101AAA.txtなどの内容にタグが入っているってことかな? http://okwave.jp/qa/q5886640.html という質問をしているところをみると、テキストボックスっていうのはASP.NETでのですか?それとも単なるクライアントアプリ? >をテキストボックスに反映 とは、そのテキストボックスのクラス名に設定するってこと?それとも、内容をTextプロパティに出力ってこと? まずは実データの中身をダミーデータに置き換えて公開してください。 そして「この様な出力を行いたい」という結果例も載せてください。 それ以外にも、載せれる情報は可能な限り公開をしてください。

mr-r00
質問者

お礼

ご回答ありがとうございます。 ファイルの中身ですが、 <div class="div1">てすと</div> <div class="div2">テスト</div> <div class="div3">TEST</div> <div class="div4">test</div> <div class="div5">tesuto</div> といったような単純構造です。 テキストボックスはASPNETのものでその内容をTextプロパティに出力を考えていました

回答No.1

例えば (1)テキストファイルを読み込み、StringReaderクラスを生成し、ReadLineメソッドで1行ずつ読み込む。 (2)読み込んだ1行の文字列から「<div class=」をInStrメソッドで検索。 (3)見つかれば、その先のクラス名を判定し、目的のクラス名ならデータを処理。 (4)次の1行を読み込み、繰り返し。 というようなやり方はどうでしょうか? クラス名が1つならいっそのこと「class=クラス名」をInStrメソッドで探した方が早そうですが。

mr-r00
質問者

お礼

ありがとうございました

関連するQ&A