VB.NETでテキストファイルからHTMLファイルを動的に生成する方法

このQ&Aのポイント
  • VB.NETでテキストファイルからHTMLファイルを動的に生成する方法を教えてください。
  • 特定のフォルダ内にあるテキストファイルの中身を解析し、日付順に並べ替えるアルゴリズムを考えたいです。
  • また、並び変えたファイルを合成し、単一のHTMLファイルとして出力する方法も教えてください。
回答を見る
  • ベストアンサー

VB.NETでテキストファイルからHTMLファイルを動的に生成したいの

VB.NETでテキストファイルからHTMLファイルを動的に生成したいのですがどのようにやればできるかヒントをいただけないでしょうか? とあるフォルダに下記のようなファイルがあるとします。 20100101AAA.txt 20091008AAA.txt 20100202AAA.txt 20070707AAA.txt 20100412AAA.txt また、ファイルの中身は <div id = 'AAA'>それぞれのファイルの内容</div> <div id = 'BBB'>それぞれのファイルの内容</div> です。 まず、ファイル名から日付を解析して新しい順番に並べるアルゴリズムを考えたいのですがどのようにしたらいいか困っています。 また、並び変えたファイルを動的に合成して一つのHTMLを作りたいのですがどのようにしたらいいのでしょうか? 詳しい方よろしくお願いします。

  • mr-r00
  • お礼率93% (480/516)

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

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

後半   Private Sub OutPutHtmlExec(ByVal p_strHtm As String, ByVal p_htmHtml As HtmlGenericControl, ByVal p_enc As Encoding)     Dim l_strRet As String = ""     Using l_fsOut As New System.IO.FileStream(p_strHtm, FileMode.Create)       Using l_hwHtm As New System.Web.UI.HtmlTextWriter(New System.IO.StreamWriter(l_fsOut, p_enc))         p_htmHtml.RenderControl(l_hwHtm)         l_hwHtm.Flush()       End Using     End Using   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 Function FindText(ByVal p_strPath As String, ByVal p_strPtn As String) As DataTable     Dim l_dtbRet As DataTable = FindTextSchema()     Dim l_dInf As New DirectoryInfo(p_strPath)     For Each l_fInf As FileInfo In l_dInf.GetFiles(p_strPtn)       Dim l_drwWk As DataRow = l_dtbRet.NewRow()       l_drwWk("path") = l_fInf.FullName       l_drwWk("date") = DateTime.ParseExact(l_fInf.Name.Substring(0, 8), "yyyyMMdd", Nothing)       l_dtbRet.Rows.Add(l_drwWk)     Next     Return l_dtbRet   End Function   Private Function FindTextSchema() As DataTable     Dim l_dtbRet As New DataTable     l_dtbRet.Columns.Add(New DataColumn("path", GetType(String)))     l_dtbRet.Columns.Add(New DataColumn("date", GetType(Date)))     Return l_dtbRet   End Function End Class

mr-r00
質問者

お礼

ありがとうございます 知らない方法とかもあり勉強しながらですが頑張ってみたいと思います。 参考にします!

その他の回答 (6)

回答No.7

通るすがるです。すいません。no5,6は別の回答でした。 忘れてください。

mr-r00
質問者

お礼

ありがとうございました

回答No.6

通るすがるです。 先ほどの回答の続きです。  空白をとる場合、=value(XX)の関数を以下の内容に置き換えてみてください。  =IF(ISERR(VALUE(SUBSTITUTE(A1," ","")))=TRUE,0,VALUE(SUBSTITUTE(A1," ","")))

mr-r00
質問者

お礼

ありがとうございました

回答No.5

通るしがるです。 =VALUE(xx)で、エラーになるということは、おそらすxxに示した値が 数字として変換できない値を含んでいることが考えられます。 たとえば、”4△4"とか、そのような値(例では△(空白)を取り除いて 再度、value関数で数値変換してみてください。

mr-r00
質問者

お礼

ありがとうございました

回答No.3

前半 Imports System.IO Imports System.IO.Path Imports System.Text Imports System.Web.UI.HtmlControls '←要参照設定[System.Web] Public Class Form1   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     '出力対象情報を取得([探す場所],[検索パターン])     Dim l_dtbData As DataTable = FindText("C:\testdata", "*AAA.txt")     'HTML出力([出力ファイル名],[出力対象情報])     Call OutPutHtml("C:\test.html", l_dtbData)   End Sub   Private Sub OutPutHtml(ByVal p_strHtm As String, ByVal p_dtbData As DataTable)     'エンコード     Dim l_enc As Encoding = Encoding.UTF8     Using l_htmHtml As New HtmlGenericControl("html")       'ヘッダ       Using l_htmHead As New HtmlGenericControl("Head")         l_htmHtml.Controls.Add(l_htmHead)         'エンコード情報の追加         Using l_htmMetaEnc As New HtmlMeta           l_htmHead.Controls.Add(l_htmMetaEnc)           With l_htmMetaEnc             .HttpEquiv = "Content-Type"             .Content = "text/html"             .Attributes("charset") = l_enc.WebName           End With         End Using         'タイトル追加         Using l_htmTitle As New HtmlTitle           l_htmHead.Controls.Add(l_htmTitle)           l_htmTitle.Text = "あうとぷっと"         End Using       End Using       'ぼでー       Using l_htmBody As New HtmlGenericControl("body")         l_htmHtml.Controls.Add(l_htmBody)         '日付順にソート取得         For Each l_drwWk As DataRow In p_dtbData.Select(Nothing, "date")           Dim l_fInf As New FileInfo(l_drwWk("path").ToString())           'DIV作成           Using l_htmDiv As New HtmlGenericControl("div")             l_htmBody.Controls.Add(l_htmDiv)             With l_htmDiv               .ID = "div" & l_fInf.Name               'そのままテキストを出力               .InnerText = ReadTextSJIS(l_fInf)               '改行を置き換える               .InnerHtml = .InnerHtml.Replace(vbCrLf, "<br />")             End With           End Using         Next       End Using       'HTML出力実行       Call OutPutHtmlExec(p_strHtm, l_htmHtml, l_enc)     End Using   End Sub

mr-r00
質問者

お礼

ありがとうございました

回答No.2

はじめまして、通るがると申します。 さて、ご質問の件なのですが、まずファイル名から日付を解析とありますが 日付がユニークであるならば、日付のみ抽出するのでなくファイル名そのものをソートすれば よいことになりますので、ArrayクラスのSortメソッドでいけると思います。 もし、ソートをオリジナルのソートロジックで実施しなければならないのであれば、 ソート方法として色々と考えかたがありますのでそちらを参照してください。  http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/ ファイル名の取得、htmlの作成(合成)についてなのですが、別にhtmlだからといって 特別な操作をするわけではありません。txtもhtml,csvとかもvbからみれば ただのテキストファイルです。 複数のファイルから一つのファイルに結合したいのであれば、全ファイルをメモリに読み込み メモリ上でデータを統合し、拡張子を”.html”として出力すればよいことになります。 もしくは、ファイル出力にもappendモード(追加)もありますのでそちらを使用しても よいことになります。(特にソースの中身を操作する必要がないのであれば) ご質問のことを実現するためには、まずファイル操作についてどのようなことができるのかは 全て頭に叩き込んでから検討すると、どのようにすればよいのかが見えてくると思いますの で頑張ってください。ファイル操作については、(VB.NET ファイル操作)で検索すると 沢山検索できるかと思います。それらを読み理解しそれでも解らなければ、その項目一つ一つ について別途ご質問してください。

mr-r00
質問者

お礼

ありがとうございました

回答No.1

ファイル名は質問文にある通りの命名規則なら、配列などに入れた状態で、文字列としてソートすればいいんじゃないですかね。 テキストファイルの読み込みと書き出しなら検索すれば出てくるでしょう。 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=vb.net+%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&num=50 どうせなら HTML としてのヘッダーやフッターの部分もそれぞれテキストファイルに持っておいて連結したら良いと思います。

関連するQ&A

  • VBでテキスト形式のファイル名称から拡張子を取りたい

    みなさんこんにちは^^ ちょっと困っています。 VB6でコーディングを行っていますが 取得したファイル名称を一旦ワークに落として それを出力ファイル名に利用したいのですが、 拡張子が邪魔をして上手く行きません。 何か拡張子を取るような方法があれば教えて頂きたいのですが! 例)入力ファイル名称 → 変換 → 出力ファイル名称   AAA.TXT AAA_001.TXT BBB_001.TXT BBB_001.TXT

  • 複数のテキストファイルを1つにまとめる

    同一フォルダ内にある複数のテキストファイルの内容を1つにまとめる方法を探しております。 例えば、 a.txt, b.txt, c.txt が同一フォルダにあり、 それぞれの内容が AAA BBB CCC である時に、これらをまとめて matome.txtとして、その内容が AAA BBB CCC となるようなプログラムを書きたいのですが、どの様な方法が考えられますでしょうか。 上の例では3つのテキストファイルですが、実際に処理したいファイルは数百個になる為、一つ一つファイル名を入力する作業が大変で困っております。 同一フォルダ内のファイルをファイル名順に一度に読み込み、まとめる方法がありましたらお教え下さい。

  • CSVに外部テキストファイルを列として追加する方法

    こんにちは。 CSVファイル(base.csv)の先頭列に、別のテキストファイル(add.txt)の中身を新規の列として挿入したいと考えているのですが、よい方法がわかりません。。。 どうのような方法を使えば対応することができるでしょうか? どうぞよろしくお願いいたします。 ■CSVファイル(master.csv) title,developer_name,seller_name,primary_genre_name,application_url AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE ■テキストファイル(add.txt) id 000 111 222 333 ↓ ■目標としたファイル(master.csv) id,title,developer_name,seller_name,primary_genre_name,application_url 000,AAA,BBB,CCC,DDD,EEE 111,AAA,BBB,CCC,DDD,EEE 222,AAA,BBB,CCC,DDD,EEE 333,AAA,BBB,CCC,DDD,EEE

  • テキストファイルの任意の文字以降の文字列を削除したい

    test.txt AAA+あいうえお BBB+かきくけこ CCC+さしすせそ DDD+たちつてと EEE+なにぬねの 上記(test.txt)のようなテキストファイルから、各行の+以降の文字列を削除して、 以下(result.txt)のようなテキストファイルを生成させるプログラムを作成させたいです。 result.txt AAA BBB CCC DDD EEE このようなプログラムを作るにはどのようにすればよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • バッチファイルの正規表現を利用した文字列検索

    お世話になっております。 表題の件について、質問させてください。 『とあるファイルに記述されている文字列を一部抜き出して、 別ファイルとして保存する』というバッチファイルを作成していますが、 うまく抜き出すことができないため、ご教示いただければ幸いです。 例) ・filelist.txt .\aaa\aaa.txt .\aaa\bbb.txt 上記ファイルに対し、「.\aaa\aaa.txt」の一行のみ取り出した 「aaafile.txt」というファイルを生成したいと考えております。 現在、私が考えたコマンドは下記になります。 for /f %%A in ('findstr /r /c:"aaa[^\\].*" filelist.txt') do echo %%A > aaafile.txt このコマンドを実行すると、「.\aaa\bbb.txt」まで抽出してしまい、 意図通りとなりません。 初歩的なミスかもしれませんが、 何卒、よろしくお願いいたします。

  • VB教えてくださいm(__)m

    VBでプログラミングしてるのですが、ある変数”A”には(パス+ファイル名)が入っているのですが、この中からファイル名だけを取得するにはどうすればよいのでしょうか? (d:\aaa\bbb\ccc\ddd.txt → ddd.txt)

  • Cシェルでテキストファイルの行削除方法

    現在、Cシェルの勉強をしていますが、ある文言に完全一致した行のみ削除する方法が分かりません。 例として、下記のようなファイルがあり、"AAA"を指定して削除しようとすると、"AAA_1"までも削除されてしまいます。 例)test.txt AAA aaa AAA_1 aaa BBB bbb CCC ccc お手数ですがご教授いただけると幸いです。 以上、宜しくお願い致します。

  • powershellのファイル名が同一検索

    とある同一フォルダ内に ファイル名 AAA-bbb.txt AAA-ccc.txt 等のファイルがあります。 AAAをキーとして、更新日時が最新の分を 読み込みたいと考えています。 どのように行えばいいのでしょうか。 よろしくお願いいたします

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

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

  • ファイル中の数行を抜き出す処理について(シェル)

    ファイルaaa.txtの2行目から4行目を抜き出し、 ファイルbbb.txtに格納する方法として、 sed -n '2,4p' aaa.txt > bbb.txt がありますが、 変数を使用し、 start=2 end=4 sed -n '${start},${end}p' aaa.txt > bbb.txt とすると、エラーが発生します。 どうすればよろしいのでしょうか。

専門家に質問してみよう