FileSystemObjectを使用してテキストファイルを取得し、ファイル中の文字
列を一括置き換えする関数です。
● サンプル ●
'【引数説明】
'FileName :対象ファイルのフルパス
'TargetText :置換・削除対象文字列
'NewText :置換する文字列。省略した場合は削除になる
Public Function ReplaceFromFile(FileName As String, _
TargetText As String, _
Optional NewText As String = "")
Dim FSO As FileSystemObject 'ファイルシステムオブジェクト
Dim Txt As TextStream 'テキストストリームオブジェクト
Dim buf_strTxt As String '読み込みバッファ
On Error GoTo Func_Err:
'オブジェクト作成
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Txt = FSO.OpenTextFile(FileName, ForReading)
'全文読み込み
buf_strTxt = Txt.ReadAll
Txt.Close
'元ファイルをリネームして、テンポラリファイル作成
Name FileName As FileName & "_"
'置換処理
buf_strTxt = Replace(buf_strTxt, TargetText, NewText, , , vbBinaryCompare)
'書込み用テキストファイル作成
Set Txt = FSO.CreateTextFile(FileName, True)
'書込み
Txt.Write buf_strTxt
Txt.Close
'テンポラリファイルを削除
FSO.DeleteFile FileName & "_"
'終了処理
Func_Exit:
Set Txt = Nothing
Set FSO = Nothing
Exit Function
Func_Err:
MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description
GoTo Func_Exit:
End Function
● 動作確認 ●
新規のテキストファイルを作成し、マイドキュメントに「test.txt」という
名前で保存します。
ファイルには、以下の文字を書き込んでください。
----------------------------------------
12345678901234567890
12345678901234567890
----------------------------------------
次に標準プロシージャに以下のコードを記述します。
Sub TestReplaceFromFile()
Call ReplaceFromFile("C:\My Documents\test.txt", "1", "S")
Call ReplaceFromFile("C:\My Documents\test.txt", vbCrLf)
End Sub
このプロシージャを実行すると、「test.txt」ファイルは以下のように
なっています。
----------------------------------------
S234567890S234567890S234567890S234567890
----------------------------------------
このように、文字の削除・置換はもちろんのこと、制御文字も操作可能です
し、中身がテキスト形式のファイルであれば同じように処理できます。
● 詳細 ●
File System Objectを使ってテキストファイルを操作するには、下位オブジェ
クトのTextStreamオブジェクトを操作することによって実現します。
今回のサンプルでは対象ファイルの内容を一括して読み込み、引数に応じて
文字列の削除・置換を行います。
File System Objectにはファイル内容を上書きする手段がありませんので、
元ファイルをリネームしておいて、元ファイルと同じ名前の新規ファイルに
処理済の文字列を書き込んでいます。
FileSystemObjectは、Office2000より正式に採用された新しいオブジェクト
で、ファイル、フォルダを操作し、情報を取得するためのメソッドやプロパテ
ィがふんだんに揃っています。
今までは非常に煩雑な処理が必要であった、フルパスからファイル名のみを
抜き出す作業など、メソッド1つで取得できます。
是非、一度File System Objectを一度使ってみて下さい。
● 補足説明 ●
このサンプルコードを記述する際には、Microsoft Scripting Runtimeに参照
設定しておくことをオススメします。
仮に参照設定していない場合でも正常に動作しますが、記述の際に自動メン
バ表示や自動データヒントといったコード補完機能が働きません。
|