先日投稿した、VBAのファイルを扱うためのクラスに、入力処理を足してみました!
「書くんじゃなくて読込みもしたいんだが」
という方、ご覧下さいませ!
ファイル管理クラス
ファイルの読込みを追加したので、晴れて
「ファイル出力用クラス」から「ファイル管理クラス」へグレードアップです!
コチラがソースの全文です。
前回との差分は、「readFile関数」くらいですね。
Option Explicit Const COPEN_TYPE_NONE = 1000 Const COPEN_TYPE_INPUT = 1001 Const COPEN_TYPE_OUTPUT = 1002 Const COPEN_TYPE_APPEND = 1003 Public OPEN_TYPE_NONE As Integer Public OPEN_TYPE_INPUT As Integer Public OPEN_TYPE_OUTPUT As Integer Public OPEN_TYPE_APPEND As Integer Public fileName As String ' ファイル名 Public openType As Integer ' ファイルオープンタイプ Public isInitialized As Boolean ' 初期化完了フラグ Public fileNo As Integer ' コンストラクタ Private Sub Class_Initialize() OPEN_TYPE_NONE = COPEN_TYPE_NONE OPEN_TYPE_INPUT = COPEN_TYPE_INPUT OPEN_TYPE_OUTPUT = COPEN_TYPE_OUTPUT OPEN_TYPE_APPEND = COPEN_TYPE_APPEND End Sub ' 初期化処理 Public Sub Initialize(fname As String, openType As Integer, fileNo As Integer) fileName = fname isInitialized = True Me.fileNo = fileNo Select Case openType Case COPEN_TYPE_INPUT Open fileName For Input As #Me.fileNo Me.openType = COPEN_TYPE_INPUT Case COPEN_TYPE_OUTPUT Open fileName For Output As #Me.fileNo Me.openType = COPEN_TYPE_OUTPUT Case COPEN_TYPE_APPEND Open fileName For Append As #Me.fileNo Me.openType = COPEN_TYPE_APPEND Case Else isInitialized = False Me.openType = COPEN_TYPE_NONE End Select End Sub ' 書き込み処理 Public Sub writeFile(text As String) If Me.openType <> COPEN_TYPE_OUTPUT And Me.openType <> COPEN_TYPE_APPEND Then Exit Sub End If Print #Me.fileNo, text End Sub ' 読み込み処理 Function readFile() If Me.openType <> COPEN_TYPE_INPUT Then Exit Function End If If EOF(Me.fileNo) Then ' EOF検知 readFile = "[EOF]" Exit Function End If Dim buf As String Line Input #Me.fileNo, buf readFile = buf End Function ' デストラクタ ' NothingのSet時に発生する Private Sub Class_Terminate() If isInitialized Then Close #Me.fileNo End If End Sub
クラスの使い方
それでは使い方について書いていきます。
「生成と初期化」、「出力」、「終了処理」についての詳細は、コチラをご覧ください!
読込みの方法
まずは「生成と初期化」を行います。
このとき、Initializeのファイルオープンタイプは、「OPEN_TYPE_INPUT」としてください。
' 生成と初期化 Dim file As FileManager Set file = New FileManager Call file.Initialize("入力ファイル.txt", file.OPEN_TYPE_INPUT, 1)
「readFile関数」をコールして、読込みを行います。
Dim str As String str = file.readFile
これで1行読み込まれます。
読込イメージ
例えば、入力ファイルの内容が
AAA BBB CCC
のとき、readFileを3回実行すると
Debug.Print (file.readFile) Debug.Print (file.readFile) Debug.Print (file.readFile) --- 出力 --- AAA BBB CCC
となります。
最終行以上読込んだ場合
readFileは、ファイルの終わり*1をチェックしています。
現在はファイルの終端で実行した場合、「[EOF]」という文字列を返すようにしてます。
なのでこのようにすれば、ファイルを全て読込むことができます。
' 生成と初期化 Dim file As FileManager Set file = New FileManager Call file.Initialize("file.txt", file.OPEN_TYPE_INPUT, 1) Dim str As String Do While True str = file.readFile If str = "[EOF]" Then Exit Do End If Debug.Print str Loop
これで読み込んだファイルの内容が、全て出力されますよ!
参考ページ
コチラのページを参考にさせて頂きました!
ありがとうございます!
Office TANAKA - Excel VBA講座:ファイルの操作[テキストファイルを操作する]
Office TANAKA - Excel VBA関数[EOF関数]
あとがき
これでファイル入出力が、少し楽になるかと思います。
ファイルの入力も出力も、サクサク作っちゃいましょう!
*1:EOF