韜晦日記

韜晦日記

Rietveldよりもプログラミングメインになりつつある

Rietveld解析初心者による備忘録とつぶやき

ファイルの文字列を一括置換して上書きする【VBA】

一気にファイルの文字列を置換したい。

ファイルの中に置換したい文字列が複数存在しているとします。 こんな時にコードの量も少なく、シンプルな書き方がないか考えてみました。 付け焼刃で書いてるので自信ないですが、個人的なメモで書き残しておきます。

やり方としては

  1. FSOを使ってファイルを一気に読み込み
  2. 文字列を置換.
  3. Split関数で配列化.
  4. ファイル上書き用の関数に渡してファイルに上書き.

文字列の置換のところは文字列を配列に格納してforで回せばより大量に処理ができるようになると思います。

    Dim read_text_row As String '読み込み用テキスト
    Dim replace_text_row() As String ' 書き込み用テキスト
    Dim file_path ' 置換したいファイル
    file_path = "C:\Files\test.txt" ' 置換したいファイルパス
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    With FSO.GetFile(file_path).OpenAsTextStream
    
    read_text_row = .ReadAll '最後まで読み込み
    read_text_row = Replace(read_text_row, "置換前の文字列1", "置換後の文字列1")
    read_text_row = Replace(read_text_row, "置換前の文字列2", "置換後の文字列2")
    read_text_row = Replace(read_text_row, "置換前の文字列3", "置換後の文字列3")
    read_text_row = Replace(read_text_row, "置換前の文字列4", "置換後の文字列4")

    replace_text_row = Split(read_text_row, vbCrLf)
    .Close
    End With
    Set FSO = Nothing ' 開放
    
    Call Output_File(replace_text_row, plot_file_oripath) 

以下はファイル上書き用の関数です。

Sub Output_File(rep_text() As String, ByVal rep_file_path)
    Dim i As Long
    Open rep_file_pathFor Output As #1
    
    For i = 1 To UBound(rep_text)
        Print #1, rep_text(i)
    Next i
    Close #1
End Sub

ただ、このコードだとWindowsで扱うような改行コード(キャリッジ リターンとライン フィードの組み合わせ)にしか対応していません。
まあ、改行コードを判定してそれぞれSplitする改行コードを指定してあげればよいと思いますが。 ややこしいことはしていないので何となく個人的にわかりやすいコードな気がします。

以上