テキストファイル読み込み用クラス

これまでC# で作成してきた「SourceToHTML」を、VB.NET に焼きなおしてみます。

Reader.vb


'********************************************************************************************************
'* テキストファイル 読み込み用クラス
'********************************************************************************************************
Public Class Reader
Private Const EOF As Char = ControlChars.NullChar
Private Const NEWLINE As Char = ControlChars.Cr

Private textReader As System.IO.StreamReader
Private IsOpen As Boolean = False
Private fileName As String = ""
Private readBuffer As String = ""
Private readIndex As Integer = -1
Private FileExists As Boolean = True
'----------------------------------------------------------------------------------------------------
' 初期化
'----------------------------------------------------------------------------------------------------
Public Sub New(ByVal fileName As String)
Me.fileName = fileName
End Sub
'----------------------------------------------------------------------------------------------------
' 終了
'----------------------------------------------------------------------------------------------------
Protected Overrides Sub Finalize()
Close()
End Sub
Private Sub Close()
'OPENしてたら
If (IsOpen) Then
'CLOSEする
textReader.Close()
textReader = Nothing
IsOpen = False
End If
End Sub
'----------------------------------------------------------------------------------------------------
' 入力ファイルから1文字ずつ読む
'----------------------------------------------------------------------------------------------------
Public Function getChar() As Char

'ファイルがなければ、EOFを返す
If (Not FileExists) Then Return EOF

'まだOPENしてなかったら
If (Not IsOpen) Then
'ファイルがあれば
If (System.IO.File.Exists(fileName)) Then
'OPENする
textReader = New System.IO.StreamReader(fileName, System.Text.Encoding.GetEncoding("Shift_JIS"))
IsOpen = True
Else
'ファイルがなければ、EOFを返す
FileExists = False
Return EOF
End If
End If

'現在位置が初期化されていたら (読み込み用バッファが空っぽ)
If (readIndex < 0) Then
'次の行を読む
readBuffer = textReader.ReadLine()

'次の行がなければ
If (readBuffer Is Nothing) Then Return EOF

'現在位置を行の先頭に位置づける
readIndex = 0
End If

'現在位置が読み込み用バッファの最後に達したら
If (readIndex >= readBuffer.Length) Then
'現在位置を初期化する
readIndex = -1
'改行コードを返す
Return NEWLINE
End If

'読み込み用バッファから1文字返し、現在位置を1つ進める
getChar = readBuffer.Chars(readIndex)
readIndex += 1
End Function
End Class