2009年06月02日
NVelocity
テンプレートエンジンがあるみたい
PHPだと
Smarty
とかが有名だし
Perlだと
数か数の
moduleがあるから
それ入れればいいんだけど
しかし
それらは
if
とか
foreach
とか
使うだけだと
重い
単に置換するだけなら
replaceで
いけるけど
問題は
if
と
foreach
をどうやって
実現するかなんだけど
ちょっと
考えて
簡易テンプレートエンジンを
作ってみたいなあ
そうしたら
PCで
Movable type
みたいなのを
FTP
使って
できるような
気がする
そうすると
サーバーに
重いって
文句いわれない
(数々文句いわれ続けてます)
NVelocity NVelocity テンプレート テンプレート
2008年11月05日
CSV形式のファイルの読み込み
"テニス","ラケット","シューズ"
というCSVファイルを
テニス
ラケット
シューズ
と読んでくれます。
下記の例は
FilePathでファイルを指定して
そこに書いてある
サイトのリストを読み込んでいます
"ID","Domain","Directory","URL","Title"
という形式のサイトリストを
List形式のDictionaryに読み込みます
Public Function AllSiteListData(ByVal FilePath As String) As List(Of Dictionary(Of String, String))
Dim FileName As String = gDataPath & "\" & FilePath
Dim SiteData As New List(Of Dictionary(Of String, String))
If IO.File.Exists(FileName) = False Then
MessageBox.Show(FileName & vbCrLf & "がありません", "警告", MessageBoxButtons.OK)
Return SiteData
Exit Function
End If
Using parser As New TextFieldParser(FileName)
parser.TextFieldType = FieldType.Delimited
parser.SetDelimiters(",") ' 区切り文字はコンマ
parser.HasFieldsEnclosedInQuotes = True '単純に,で区切り
Do While Not parser.EndOfData
Dim row As String() = parser.ReadFields()
Dim Item As New Dictionary(Of String, String)
Item("ID") = row(0)
Item("Domain") = row(1)
Item("Directory") = row(2)
Item("URL") = row(3)
Item("Title") = row(7)
SiteData.Add(Item)
Loop
End Using
Return SiteData
End Function
複数行のテキストファイルの読み込み
例として
test.txtに
VB2008
初心者
と2行のテキストファイルがあるとします
Function ReadFile() as Dictionary(Of String,String)
Dim FileName As String = DataPath & "\test.txt"
Dim Data As New Dictionary(Of String, String)
If IO.File.Exists(FileName) = False Then
MessageBox.Show(FileName & vbCrLf & "がありません", "警告", MessageBoxButtons.OK)
Return Data
Exit Function
End If
Dim TextFile As IO.StreamReader
Dim Line As String
Dim i As Integer
TextFile = New IO.StreamReader(FileName)
i = 0
Do While -1
Line = TextFile.ReadLine
Select Case i
Case 0
Data("Soft") = Line
Case 1
Data("Class") = Line
End Select
i = i + 1
If Line Is Nothing Then
Exit Do
End If
Loop
TextFile.Close()
Return Data
End Function
これまでが関数です
この
FunctionはDictionary を返すわけです
Dim Word as New Dictionary(Of String,String)
Word = ReadFile()
Msgbox( Word("Soft"))
MsgBox (Word("Class"))
'ここでファイルの2行目の 初心者とメッセージが出されます
テキストファイルの書き出し
ファイルにデータを書き出してみましょう。
書き出すディレクトリ
テキスト
ファイルの名前
を指定して
指定したディレクトリに指定したファイル名でファイルを書き出します。
'データの書き出し
Public Function SaveData(ByVal DirectoryName As String, ByVal SaveText As String, ByVal FileName As String) As Boolean
'ServerDirectoryがなけばエラーを返す
If IO.Directory.Exists(DirectoryName) = False Then
MsgBox(DirectoryPath & "がありません")
Return False
Exit Function
End If
Dim TextFile As IO.StreamWriter
TextFile = New IO.StreamWriter(DirectoryName & FileName)
TextFile.Write(SaveText)
TextFile.Close()
Return True
End Function
使い方としては
Dim DirectoryName as String = "C:\Test"
Dim SaveText as String = "こんにちは、初めてファイルを書き出します。"
Dim FileName as String = "save.txt"
で
に
文字コードがutf-8で
こんにちは、初めてファイルを書き出します。
と書き出します
Dim SaveText as String=TextBox1.Text.Trim
ここのTrimは
2008年10月30日
ファイルの更新日時と作成日を求める
最終更新日(最後に書き込んだ日時)の求め方の例です。
この例は
VBのbin\debug\Keyword.txtの作成日と更新日を求めます
Dim FileName As String = Application.StartupPath() & "\Keyword.txt
Dim LastDate as Date
If IO.File.Exists(FileName) Then
'ファイルが存在するかどうか確認する
LastDate = IO.File.GetLastWriteTime(FileName)
msgbox("最終更新日は" & LastDate)
'GetLstWriteTimeは最後にファイルが書き込まれた日
LastDate = IO.File.GetCreationTime(FileName)
msgbox("作成日は" & LastDate)
'GetCreationTimeはファイルを作成した日時
Else
msgbox(FileName & " がありません")
'FileNameがなかったらメッセージを出す
End If
という感じで
たとえばローカルに保存してあるHPの更新日を求めることで
そろそろ更新しておかなきゃとかなるわけですね




