テキストファイルの文字列を置換して上書きするVBScript
2021年05月21日
2022/7/7追記
より汎用性の高いソースができたので、ご紹介。
指定したテキストファイルの文字列を置換して、別名保存(上書き)するVBScript
SQLを操作できるフリーソフト「CSE」を使ってSELECT結果をCSV出力すると、
ダブルコーテーション「"」が付いてしまう。
ダブルコーテーションが付いていると既存のツールが動作しないので、
テキストファイルのダブルコーテーションを削除するVBScriptを作ってみた。
また、SELECT結果をエクセルに張り付けるため、
カンマをTABに置換するVBScriptも作った。
ソースは同じで置換する文字が違うだけなので、片方のみソースを掲載。
さんざん使いまわしているファイルをドラッグドロップで動く処理が長いが、
実際の処理はあんまり長くない。
ファイルを編集して上書き保存のやり方がわからず、
テキスト出力して名前を付けて保存の処理にした。
以下、ソース。
より汎用性の高いソースができたので、ご紹介。
指定したテキストファイルの文字列を置換して、別名保存(上書き)するVBScript
SQLを操作できるフリーソフト「CSE」を使ってSELECT結果をCSV出力すると、
ダブルコーテーション「"」が付いてしまう。
ダブルコーテーションが付いていると既存のツールが動作しないので、
テキストファイルのダブルコーテーションを削除するVBScriptを作ってみた。
また、SELECT結果をエクセルに張り付けるため、
カンマをTABに置換するVBScriptも作った。
ソースは同じで置換する文字が違うだけなので、片方のみソースを掲載。
さんざん使いまわしているファイルをドラッグドロップで動く処理が長いが、
実際の処理はあんまり長くない。
ファイルを編集して上書き保存のやり方がわからず、
テキスト出力して名前を付けて保存の処理にした。
以下、ソース。
Option Explicit
'ファイルの文字コードを指定
'const strCode = "UTF-8" ' 文字コード指定 "Shift-Jis" "UTF-8"
const strCode = "Shift-Jis" ' 文字コード指定 "Shift-Jis" "UTF-8"
call main
sub main
'テキストファイルのカンマをTabに置換するVBScript
'ドラッグドロップでファイルを印刷するスクリプト
'http://chuckischarles.hatenablog.com/entry/2018/10/29/002921
'ファイル名の末尾に更新日時を付与するVBScript
'http://gren-dken.hatenablog.com/entry/2013/08/22/000119
'-------------------------------------------------------------------------------------------------------
' 引数が無かった時の処理
If WScript.Arguments.count = 0 then
WScript.Echo "引数が無いため、実行できません。" & vbNewLine & _
"ファイルをドロップしてください。"
WScript.Quit
End If
dim targetPath,changePath
dim FSO
'----------------------------------------------------------------------------------------------------
' ファイルシステムオブジェクト作成
Set FSO = CreateObject("Scripting.FileSystemObject")
'-------------------------------------------------------------------------------------------------------
' フォルダ内ファイルリスト出力
for each targetPath In WScript.Arguments
'----------------------------------------------------------------------------------------------------
' ドロップされた引数がフォルダかファイルかを判定する
If FSO.FolderExists(targetPath) then
' is folder.
WScript.Echo "フォルダがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
ElseIf FSO.FileExists(targetPath) then
' is file.
else
' is unknown.
WScript.Echo "フォルダ 及び ファイル とも認識できないデータがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
End If
' メインモジュール呼び出し
Call ReplaceCtoTab(targetPath)
Next
set FSO = nothing
WScript.Quit 'メイン処理終了
end sub
'-----------------------------------------------------------実質ここから
Sub ReplaceCtoTab(targetPath) 'Delete double-quotation
dim bkPath :bkPath = createFilePath_HeadTail( targetPath, "", "_bk" ) '変換前バックアップファイル名
With CreateObject("Scripting.FileSystemObject")
call .CopyFile(targetPath, bkPath)
end With
Dim strLine'入力用バッファ
dim oBuf '出力用バッファ
' 読み込みファイルの指定 (相対パスなのでこのスクリプトと同じフォルダに置いておくこと)
Dim input
Set input = CreateObject("ADODB.Stream")
input.Type = 2 ' 1:バイナリ・2:テキスト
input.Charset = strCode ' 文字コード指定
input.Open ' Stream オブジェクトを開く
input.LoadFromFile targetPath ' ファイルを読み込む
' 書き出しファイルの指定 (今回は新規作成する)
Dim output: Set output = CreateObject("ADODB.Stream")
output.Type = 2
output.Charset = strCode
output.Open
'◆文字列処理◆
Dim StrText
StrText = input.ReadText(-1) ' -1:全行読み込み・-2:一行読み込み
StrText = replace(StrText,",",chr(9))
output.WriteText StrText, 0 ' 0:文字列のみ書き込み・1:文字列 + 改行を書き込み
' Stream を閉じる
input.Close
' 書き出しファイルの保存
output.SaveToFile targetPath, 2 '1:指定ファイルがなければ新規作成・2:ファイルがある場合は上書き
output.Close
'ログファイルを開く
call OpenTextFileShell(targetPath)
End Sub
'------------------------------
' 出力ファイル名の生成
'------------------------------
Function createFilePath_HeadTail(targetPath ,strHead, strTail)
' const strHead = "" 'ファイル名の先頭につける文字
' const strTail = "_bk" 'ファイル名のお尻につける文字
' ファイルシステムオブジェクト作成
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
dim fo: Set fo = FSO.GetFile(targetPath)
' ファイルパス分割
Dim targetDir: targetDir = FSO.GetParentFolderName(targetPath)
Dim targetBaseName: targetBaseName = FSO.GetBaseName(targetPath)
Dim targetExt: targetExt = FSO.GetExtensionName(targetPath)
' 変更後ファイルパス生成し、返却
createFilePath_HeadTail = targetDir & "\" & strHead & targetBaseName & "_" & strTail & "." & targetExt
End Function
'------------------------------
' CMDで指定したファイルを開く
'------------------------------
sub OpenTextFileShell(FulName)
Dim objWshShell
'シェルオブジェクトの作成
Set objWshShell = WScript.CreateObject("WScript.Shell")
'シェルの実行
objWshShell.Run FulName
end sub
PR
Comment