- ベストアンサー
VB.NETでテキストファイルからHTMLファイルを動的に生成する方法
- VB.NETでテキストファイルからHTMLファイルを動的に生成する方法を教えてください。
- 特定のフォルダ内にあるテキストファイルの中身を解析し、日付順に並べ替えるアルゴリズムを考えたいです。
- また、並び変えたファイルを合成し、単一のHTMLファイルとして出力する方法も教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
後半 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
その他の回答 (6)
- ToOrisugaru
- ベストアンサー率28% (80/280)
通るすがるです。すいません。no5,6は別の回答でした。 忘れてください。
お礼
ありがとうございました
- ToOrisugaru
- ベストアンサー率28% (80/280)
通るすがるです。 先ほどの回答の続きです。 空白をとる場合、=value(XX)の関数を以下の内容に置き換えてみてください。 =IF(ISERR(VALUE(SUBSTITUTE(A1," ","")))=TRUE,0,VALUE(SUBSTITUTE(A1," ","")))
お礼
ありがとうございました
- ToOrisugaru
- ベストアンサー率28% (80/280)
通るしがるです。 =VALUE(xx)で、エラーになるということは、おそらすxxに示した値が 数字として変換できない値を含んでいることが考えられます。 たとえば、”4△4"とか、そのような値(例では△(空白)を取り除いて 再度、value関数で数値変換してみてください。
お礼
ありがとうございました
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
前半 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
お礼
ありがとうございました
- ToOrisugaru
- ベストアンサー率28% (80/280)
はじめまして、通るがると申します。 さて、ご質問の件なのですが、まずファイル名から日付を解析とありますが 日付がユニークであるならば、日付のみ抽出するのでなくファイル名そのものをソートすれば よいことになりますので、ArrayクラスのSortメソッドでいけると思います。 もし、ソートをオリジナルのソートロジックで実施しなければならないのであれば、 ソート方法として色々と考えかたがありますのでそちらを参照してください。 http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/ ファイル名の取得、htmlの作成(合成)についてなのですが、別にhtmlだからといって 特別な操作をするわけではありません。txtもhtml,csvとかもvbからみれば ただのテキストファイルです。 複数のファイルから一つのファイルに結合したいのであれば、全ファイルをメモリに読み込み メモリ上でデータを統合し、拡張子を”.html”として出力すればよいことになります。 もしくは、ファイル出力にもappendモード(追加)もありますのでそちらを使用しても よいことになります。(特にソースの中身を操作する必要がないのであれば) ご質問のことを実現するためには、まずファイル操作についてどのようなことができるのかは 全て頭に叩き込んでから検討すると、どのようにすればよいのかが見えてくると思いますの で頑張ってください。ファイル操作については、(VB.NET ファイル操作)で検索すると 沢山検索できるかと思います。それらを読み理解しそれでも解らなければ、その項目一つ一つ について別途ご質問してください。
お礼
ありがとうございました
- temtecomai2
- ベストアンサー率61% (656/1071)
ファイル名は質問文にある通りの命名規則なら、配列などに入れた状態で、文字列としてソートすればいいんじゃないですかね。 テキストファイルの読み込みと書き出しなら検索すれば出てくるでしょう。 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 としてのヘッダーやフッターの部分もそれぞれテキストファイルに持っておいて連結したら良いと思います。
お礼
ありがとうございます 知らない方法とかもあり勉強しながらですが頑張ってみたいと思います。 参考にします!