いまさらテキストファイルの読み書き

テキストファイルにデータを書き出したい、または読み込みたい。ああ、なんだっけLine Inputだっけなんだっけ? FreeFileいるよな。調べるの面倒くせー

というわけで仕方なくクラスを書くことにしました。コピペで済ませたい人は、このクラスをコピーしてください。それにしてもこのコード書くの何回目だろう。

 

使用例:

Public Sub sample1()

    Dim oTmpFile As FileStream
    Dim buff As String

    Set oTmpFile = New FileStream
    If oTmpFile.OpenReadStream("sample.txt") < 0 Then
        MsgBox "エラーが発生しました" & vbCr & oTmpFile.Error, vbCritical
        Exit Sub
    End If

    Do Until oTmpFile.EOF
        buff = oTmpFile.ReadStream
        Debug.Print buff
    Loop
    oTmpFile.CloseStream
End Sub
  
Public Sub sample2()

    Dim oTmpFile As FileStream
    Dim buff As String
    Dim i As Long

    Set oTmpFile = New FileStream
    If oTmpFile.OpenWriteStream("sample.txt") < 0 Then
        MsgBox "エラーが発生しました" & vbCr & oTmpFile.Error, vbCritical
        Exit Sub
    End If

    For i = 0 To 9
        oTmpFile.WriteStream "Hello World: " & i
    Loop
    oTmpFile.CloseStream

End Sub

 

クラス名: FileStream

Option Explicit
Private m_iFileNum As Integer
Private m_sError As String

Public Function OpenWriteStream(pFile As String) As Long

    On Error GoTo Error
    m_iFileNum = FreeFile
    Open ThisWorkbook.Path & "\" & pFile For Output As #m_iFileNum
    OpenWriteStream = 0
    Exit Function
Error:
    m_sError = Error$
    OpenWriteStream = -1
End Function

Public Function OpenReadStream(pFile As String) As Long
    On Error GoTo Error
    m_iFileNum = FreeFile
    Open ThisWorkbook.Path & "\" & pFile For Input As #m_iFileNum
    OpenReadStream = 0
    Exit Function
Error:
    m_sError = Error$
    OpenReadStream = -1
End Function

Public Function EOF() As Boolean
    EOF = VBA.EOF(m_iFileNum)
End Function

Public Sub WriteStream(pBuff As String)
    Print #m_iFileNum, pBuff
End Sub

Public Function ReadStream() As String
    Dim buff As String
    Line Input #m_iFileNum, buff
    ReadStream = buff
End Function

Public Sub CloseStream()
    If m_iFileNum > 0 Then Close #m_iFileNum
    m_iFileNum = -1
End Sub

Private Sub Class_Initialize()
    m_iFileNum = -1
End Sub

Private Sub Class_Terminate()
    If m_iFileNum > 0 Then Close #m_iFileNum
End Sub

Public Property Get Error() As String
    Error = m_sError
End Property 

VBAの編集画面っぽい色を付けてみたんですが、あまりにも面倒なのでもう2度とやらないと思います。

 更新:2019/11/26
HTMLで色付きのフォーマットに書き換えて、HTML編集モードでペーストすればカラーパレットを何十回もクリックしなくても済むということを思いついたのでコードを書いてみました。

 

 更新:2019/12/15 

<pre></pre>とCSSで記述するやり方にコードを書き換えました。