
VB.NETでテキストファイルからHTMLファイルを動的に生成したいのですがどのようにやればできるかヒントをいただけないでしょうか?
とあるフォルダに下記のようなファイルがあるとします。
20100101AAA.txt
20091008AAA.txt
20100202AAA.txt
20070707AAA.txt
20100412AAA.txt
また、ファイルの中身は
<div id = 'AAA'>それぞれのファイルの内容</div>
<div id = 'BBB'>それぞれのファイルの内容</div>
です。
まず、ファイル名から日付を解析して新しい順番に並べるアルゴリズムを考えたいのですがどのようにしたらいいか困っています。
また、並び変えたファイルを動的に合成して一つの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
No.5
- 回答日時:
通るしがるです。
=VALUE(xx)で、エラーになるということは、おそらすxxに示した値が
数字として変換できない値を含んでいることが考えられます。
たとえば、”4△4"とか、そのような値(例では△(空白)を取り除いて
再度、value関数で数値変換してみてください。
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
No.2
- 回答日時:
はじめまして、通るがると申します。
さて、ご質問の件なのですが、まずファイル名から日付を解析とありますが
日付がユニークであるならば、日付のみ抽出するのでなくファイル名そのものをソートすれば
よいことになりますので、ArrayクラスのSortメソッドでいけると思います。
もし、ソートをオリジナルのソートロジックで実施しなければならないのであれば、
ソート方法として色々と考えかたがありますのでそちらを参照してください。
http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/al …
ファイル名の取得、htmlの作成(合成)についてなのですが、別にhtmlだからといって
特別な操作をするわけではありません。txtもhtml,csvとかもvbからみれば
ただのテキストファイルです。
複数のファイルから一つのファイルに結合したいのであれば、全ファイルをメモリに読み込み
メモリ上でデータを統合し、拡張子を”.html”として出力すればよいことになります。
もしくは、ファイル出力にもappendモード(追加)もありますのでそちらを使用しても
よいことになります。(特にソースの中身を操作する必要がないのであれば)
ご質問のことを実現するためには、まずファイル操作についてどのようなことができるのかは
全て頭に叩き込んでから検討すると、どのようにすればよいのかが見えてくると思いますの
で頑張ってください。ファイル操作については、(VB.NET ファイル操作)で検索すると
沢山検索できるかと思います。それらを読み理解しそれでも解らなければ、その項目一つ一つ
について別途ご質問してください。

No.1
- 回答日時:
ファイル名は質問文にある通りの命名規則なら、配列などに入れた状態で、文字列としてソートすればいいんじゃないですかね。
テキストファイルの読み込みと書き出しなら検索すれば出てくるでしょう。
http://www.google.com/search?hl=ja&lr=lang_ja&ie …
どうせなら HTML としてのヘッダーやフッターの部分もそれぞれテキストファイルに持っておいて連結したら良いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでPowerPointからExcelにデ...
-
BCPユーティリティの使用法_...
-
fortranでのcsvファイルを出力...
-
特定フォルダ内のテキストファ...
-
テキストファイルを直接置換す...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトのエラーに...
-
バッチでテキストファイルから...
-
#include <Windows.h>というヘ...
-
binファイルを解凍したいの...
-
.txtではなく.logの方が良いの...
-
win10の「フォト」で、「次へ」...
-
xcopyで特定のファイルのみをコ...
-
ExcelVBAのDirでスペース含むフ...
-
バッチ処理でファイルの中身を...
-
これってパソコンの最適化が完...
-
バッチファイルの内容を表示さ...
-
Latexで図番号だけを「図1.1」...
-
コマンドプロンプトでフォルダ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ある文字列を含む行の抽出
-
VBAでPowerPointからExcelにデ...
-
特定フォルダ内のテキストファ...
-
BCPユーティリティの使用法_...
-
Excel.VBA テキストファイルを...
-
access vbaでCSVファイルを文...
-
VB6側からテキストファイルをク...
-
VBAで新しい日付順にファイルを...
-
時間短縮のために、テキストフ...
-
fortranでのcsvファイルを出力...
-
複数行の文字列を変数として使...
-
ソースコードの差分がある行番...
-
テキストファイルの行頭に文字...
-
ページレイアウトをHTMLファイ...
-
unicode文字列(日本語)のファイ...
-
複数のCSVの指定行だけを残し、...
-
C言語でのファイルの読み込み方
-
正規表現を使って、日英の2行...
-
VBScriptについて教えてください!
-
VBAで任意のフォルダ内のファイ...
おすすめ情報