motogp fun

motogp ファンによる、モトgp 結果、モトgp日程を報告するブログ、ガジェットネタも

リザルトを加工しよう!5 VBSでCSV化(外部ファイル化2) motogp結果を円滑に更新するプロジェクト

コピーしたテキストの空白をカンマに置換してCSV化するプログラム。
10戦のレースレポートで大活躍しました。
運用して使い勝手が悪かった点を改良します。

例で使う資料は10戦の決勝リザルト15位までをコピーしたテキストを利用。

f:id:motagp:20150813082220j:plain

 前回の情報

motagp.hatenablog.com

 

 

置換設定ファイルを1個に統一

前回はライダーとチーム名の置換ファイルを別々に設けていました。
運用してみて、新しい置換文字が発生した時、何処のファイルだったっけと判断が発生、そもそも分ける必要が無いと結論が出たので統合する事にしました。

おまけ、先頭シングルコーテーション「’」はコメント行とします。

db-replace.txt


' *********************
' 置換文字の設定
' 元名:新名
' *********************
' ライダー名
' *********************
Marc MARQUEZ:マルケス
Valentino ROSSI:ロッシ
Scott REDDING:レディング

実行結果

f:id:motagp:20150813083137j:plain

変換できました。
MotoGPリザルト変換だけじゃなく、いろいろ使えそうです。

ソース

 

 

f:id:motagp:20150813083717j:plain

 


'*******************************************************
' 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