忍者ブログ

指定したテキストファイルの文字列を置換して、別名保存(上書き)するVBScript

2022年06月18日
定期的な作業で、文字列を置換してコマンドを実行することが結構ある。

例えばログ取得。YYYYMMなど、年月の部分を書き換えて
SQLで実行したり、コマンドプロンプトで取得したり。

手作業で日付を変えるのがめんどくさいので、
置換するvbscriptを作ってみた。




前に学習した文字列で複数の引数を受け渡す仕様に。
視認性を上げるために、区切り文字は「■」に設定。

本当は出力ファイルの存在チェックをして、
ない場合はエラーにする処理をいれるべきなんだけど、今回は割愛。

※ 意図しないところが置換されないようキーワードで事前検索を


以下、ソース。テキストファイルの ダウンロード



const iFile = "D:\VBS\testdata\iFile.txt"
const oFile = "D:\VBS\testdata\oFile.txt"

const sTxt = "検索文字1■検索文字2■検索文字3
const rTxt = "置換文字1■置換文字2■置換文字3

call rpTxtFile(iFile,oFile,sTxt,rTxt)

'iFileを開きsTxtをrTxtに置換してoFileとして上書き保存
sub rpTxtFile(iFile,oFile,sTxt,rTxt)

'引数文字列を配列に変換
dim sArr:sArr = split(sTxt,"■")
dim rArr:rArr = split(rTxt,"■")
if ubound(sArr) <> ubound(rArr) then errorEnd("引数のサイズが合っていません。")

'入力ファイルの存在確認
dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
if FSO.FileExists(iFile)=False then errorEnd("入力ファイルがありません。")

'入力ファイルを開き、変数に格納
Dim inputFile: Set inputFile = FSO.OpenTextFile(iFile, 1, False, 0)
Dim sqlText
Do Until inputFile.AtEndOfStream
sqlText = inputFile.ReadAll
Loop
inputFile.Close' バッファを Flush してファイルを閉じる

dim k
for k = 0 to ubound(sArr)
sqlText = replace(sqlText,sArr(k),rArr(k))
next

'出力ファイルを開き、テキストを書き込み(本当はフォルダの存在チェックをすべし)
Dim wMode:wMode = 2 '2:書き込みモード
With FSO.OpenTextFile(oFile, wMode, True, 0)
.Write sqlText
.Close
End With
end sub

sub errorEnd(msg)
msgbox msg
Wscript.Quit
end sub

関連記事
テキストファイルの文字列を置換して上書きするVBScript


PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字