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

  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に参照
設定しておくことをオススメします。
  仮に参照設定していない場合でも正常に動作しますが、記述の際に自動メン
バ表示や自動データヒントといったコード補完機能が働きません。


Access2000



戻る


Excel Word Access VBA! モーグ