たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_FileSystemObjectその5_【TextStreamオブジェクト】テキストファイルの作成・読み取り・書きこみ

FSOを使用して指定してテキストファイルの作成・読み取り・書きこみを行う方法

TextStreamオブジェクトの取得

【CreateTextFile】テキストファイルを作成して操作

FSOオブジェクトのCreateTextFile(または、FolderオブジェクトのCreateTextFile)
書式:
オブジェクト.CreateTextFile("ファイル名",上書きするorしない)
→上書きする:True(規定) / 上書きしない:False

▼記述例▼

  Dim FSO As New FIleSystemObject '外部のオブジェクトの参照を格納
  Dim TextInfo As TextStream '操作したいテキストファイルを格納するための変数を作成
  Set TextInfo = FSO.CreateTextFile("C:\Users\user\Desktop\tama-shi\tamashi.txt" , True) 'TextStreamオブジェクトのインスタンスを生成


【OpenTextFile】【OpenAsTextStream】既存のテキストファイルを開いて操作

FSOオブジェクトのOpenTextFile(または、FileオブジェクトのOpenAsTextStream)
書式:
オブジェクト.OpenTextFile("ファイル名",入出力モード)
→入出力モード:ForReading(規定・読み取り専用) / ForWriting(上書き) / ForAppending(追記)

▼記述例▼

  Dim FSO As New FIleSystemObject '外部のオブジェクトの参照を格納
  Dim TextInfo As TextStream '操作したいテキストファイルを格納するための変数を作成
  Set TextInfo = FSO.OpenTextFile("C:\Users\user\Desktop\tama-shi\tamashi.txt" , ForAppending) 'TextStreamオブジェクトのインスタンスを生成


TextStreamオブジェクトのプロパティ

Column 横方向の位置の取得
Line 縦方向の位置の取得
AtEndOfLine ファイルポインタの位置が行末かどうか
AtEndOfStream ファイルポインタの位置が最後尾かどうか
 他

TextStreamオブジェクトのメソッド

Close テキストファイルを閉じる

Read 指定した文字数を読み込み
ReadAll 全文字を読み込み
ReadLine 1行読み込み
Skip 指定した数の文字数スキップして読み込み
SkipLine 1行スキップして読み込み

Write 指定した文字数を書き込み
WriteLine 1行+改行文字を書き込み
WriteBlankLines 指定した数の改行文字を書き込み(改行文字だけを書き込むのね)
 他

【実践】テキストファイルを開いて書き込み・読み取りを行う記述例

※前提※
以下のVBAを設置するAccessファイルは、以下の場所に格納されている
 "C:\Users\user\Desktop\たま氏"

CreateTextFile

TextStreamオブジェクトのメソッドを使用して、ファイル「tamashi.txt」を作成したあと
テキストファイル内に文字列の書き込みを行う

▼記述例▼

Sub Test_TextStream_1()
  
  Dim FSO As New FIleSystemObject '外部のオブジェクトの参照を格納
  Dim TextInfo As TextStream '操作したいテキストファイルを格納するための変数を作成
  Dim FPath As String 'ファイルのパスを格納するための変数を作成

  FPath = CurrentProject.Path & "\tama-shi\"
  Set TextInfo = FSO.CreateTextFile(FPath & "tamashi.txt", True)  'TextStreamオブジェクトのインスタンスを生成
  TextInfo.WriteLine "たま氏は常に眠い"
  TextInfo.Write "眠すぎて眠いのかどうか判らず"
  TextInfo.WriteLine "寝ているのか起きているのかも判らない"
  TextInfo.Write "おかしい人間になってしまった"

  Set TextInfo = Nothing '念のため参照を解除
  Set FSO = Nothing '念のため参照を解除
  
End Sub


▼処理結果▼
OpenTextFileをかまさなくてもwriteできた


OpenTextFile

TextStreamオブジェクトのメソッドを使用して作成したファイル「tamashi.txt」の中身を読み取って
イミディエイトウィンドウに書き出す

▼記述例▼

Sub Test_TextStream_2()
  
  Dim FSO As New FIleSystemObject '外部のオブジェクトの参照を格納
  Dim TextInfo As TextStream '操作したいテキストファイルを格納するための変数を作成
  Dim FPath As String 'ファイルのパスを格納するための変数を作成

  FPath = CurrentProject.Path & "\tama-shi\"
  Set TextInfo = FSO.OpenTextFile(FPath & "tamashi.txt", ForReading)  'TextStreamオブジェクトのインスタンスを生成
  Debug.Print TextInfo.Read(4)
  TextInfo.SkipLine
  TextInfo.SkipLine
  Debug.Print TextInfo.ReadLine

  Set TextInfo = Nothing '念のため参照を解除
  Set FSO = Nothing '念のため参照を解除
  
End Sub


▼処理結果▼
ちょっと遊んでしまった感あり...