• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB.NETでテキストファイルからHTMLファイルを動的に生成したいの)

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

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

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

  • ベストアンサー
回答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