HOME > 即効テクニック > AccessVBA > ファイル操作・他アプリケーションとの連携 > テキストファイル中の文字を削除・置き換える(FSO)

即効テクニック

ファイル操作・他アプリケーションとの連携

テキストファイル中の文字を削除・置き換える(FSO)

(Access 2000/2002)
■ 概要 ■
  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オブジェクトを操作することによって実現します。
今回のサンプルでは対象ファイルの内容を一括して読み込み、引数に応じて文字列の削除・置換を行います。
ファイル内容を直接変更することもできますが、処理中に何らかのトラブルが発生すると元の内容が保証されない危険性があるため、元ファイルをリネームしておいて、元ファイルと同じ名前の新規ファイルに処理済の文字列を書き込んでいます。

FileSystemObjectは、Office2000より正式に採用された新しいオブジェクトで、ファイル、フォルダを操作し、情報を取得するためのメソッドやプロパティがふんだんに揃っています。
今までは非常に煩雑な処理が必要であった、フルパスからファイル名のみを抜き出す作業など、メソッド1つで取得できます。
是非、一度File System Objectを一度使ってみて下さい。


■ 備考 ■
このサンプルコードを記述する際には、Microsoft Scripting Runtimeに参照設定しておくことをオススメします。
仮に参照設定していない場合でも正常に動作しますが、記述の際に自動メンバ表示や自動データヒントといったコード補完機能が働きません。