リザルトを加工しよう!5 VBSでCSV化(外部ファイル化2) motogp結果を円滑に更新するプロジェクト
コピーしたテキストの空白をカンマに置換してCSV化するプログラム。
10戦のレースレポートで大活躍しました。
運用して使い勝手が悪かった点を改良します。
例で使う資料は10戦の決勝リザルト15位までをコピーしたテキストを利用。
前回の情報
置換設定ファイルを1個に統一
前回はライダーとチーム名の置換ファイルを別々に設けていました。
運用してみて、新しい置換文字が発生した時、何処のファイルだったっけと判断が発生、そもそも分ける必要が無いと結論が出たので統合する事にしました。
おまけ、先頭シングルコーテーション「’」はコメント行とします。
db-replace.txt
' *********************
' 置換文字の設定
' 元名:新名
' *********************
' ライダー名
' *********************
Marc MARQUEZ:マルケス
Valentino ROSSI:ロッシ
Scott REDDING:レディング
実行結果
変換できました。
MotoGPリザルト変換だけじゃなく、いろいろ使えそうです。
ソース
'*******************************************************
' MotoGPのリザルトを加工するVBS 空白をカンマに置換
' パターンFP,QT
'*******************************************************
' New 2015.8.5 mota2
' update 2015.8.6 mota2 表題追加
' update 2015.8.7 mota2 ライダー、チーム名を外部ファイル化
' update 2015.8.13 mota2 変換外部ファイルを1本化
'*******************************************************
Const cRead = 1, cWrite = 2, cAppend = 8
strScriptPath = Replace(WScript.ScriptFullName,WScript.ScriptName,"")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
'元ファイル
Set objIN = objFSO.OpenTextFile(strScriptPath+"\res1.txt", cRead)
'表題ファイル
Set objHD = objFSO.OpenTextFile(strScriptPath+"\db-header.txt", cRead)
'変換ファイル
Set objRE = objFSO.OpenTextFile(strScriptPath+"\db-replace.txt", cRead)
'表題ファイル読み込みループ
Do Until objHD.AtEndOfStream
strHeader = objHD.ReadLine
if left(strHeader,1) = "'" then
if left(strHeader,2) = "'!" then '表題説明
arrFl = Split(strHeader,":")
strOutFile = arrFl(1)
end if
else
':をカンマ化
strHeader = Replace(strHeader,":",",")
exit do
end if
Loop
'完成ファイル
Set objOUT = objFSO.OpenTextFile(strScriptPath & "\" & strOutFile, cWrite, True)
'表題書き出し
objOUT.WriteLine strHeader
'変換ファイル読み込みループ
i = -1
dim arrRE(500,1)
Do Until objRE.AtEndOfStream
i = i + 1
strLine = objRE.ReadLine
if left(strLine,1) <> "'" then
arrFl = Split(strLine,":")
arrRE(i,0) = arrFl(0)
arrRE(i,1) = arrFl(1)
end if
Loop
iREMax = i
'元ファイル読み込みループ
strOutAll = null
Do Until objIN.AtEndOfStream
'1行読込
strLine = objIN.ReadLine
'設定文字を置換
For i = 0 To iREMax
strLine = Replace(strLine,arrRE(i,0),arrRE(i,1))
Next
'空白をカンマ化
strOut = Replace(strLine," ",",")
'改行追加
strOutAll = strOutAll & strOut & vbCrLf
Loop
'書き出し
objOUT.WriteLine strOutAll
'後処理
objIN.Close
objHD.Close
objRE.Close
objOUT.Close
Set objIN = Nothing
Set objHD = Nothing
Set objRE = Nothing
Set objOUT = Nothing