motogp fan

motogp ファンによる、雑ブログ、ガジェットネタも

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

CSV化も4回目、精度が上がってきました。
今回は使いまわしが出来る様にライダーやチームの変換ルールを外部ファイル化しました。
また、決勝PDFのレイアウトにも対応します。
ところで抽象化って何?

ライダー変換ルールテーブル

 下記の様に:で区切った設定ファイルを作成。

変換後の文字に空白は使いません(都合が悪いから)。


Cal CRUTCHLOW:クラッチロー
Andrea IANNONE:イアンノーネ
Hiroshi AOYAMA:青山
Claudio CORTI:Claudio.CORTI
Alex DE ANGELIS:デ.アンジェルス

チーム&マシン変換ルールテーブル

 同様に:で区切った設定ファイルを作成。

ところで、区切り文字がカンマ「,」ではなく、コロン「:」なのか気になる人もいるでしょう。
理由はスコット・レディングのチーム名にカンマが入っているからでした。
これ「EG 0,0 Marc VDS」、嫌がらせとしか思えない・・・


元名:新名
Repsol Honda Team:RepsolHonda
Movistar Yamaha MotoGP:MovistarYamaha
EG 0,0 Marc VDS:EG00MarcVDS
Octo Pramac Racing:PramacRacing
Ducati Team:DucatiTeam
Team SUZUKI ECSTAR:TeamSUZUKI
CWM LCR Honda:LCR.Honda
Monster Yamaha Tech 3:YamahaTech3
Aspar MotoGP Team:Aspar
Avintia Racing:AvintiaRacing
Aprilia Racing Team Gresini:ApriliaGresini
AB Motoracing:AB.Motoracing
E-Motion IodaRacing Team:E-MotionIodaRacing
Athina Forward Racing:AthinaForwardRacing
YAMAHA FORWARD:YAMAHA.FORWARD

表題テーブル

 表題は予選と決勝で切り替える必要があり、対応できるように考えました。
先頭の1文字にシングルコーテーション「'」はコメント行。
先頭の2文字に「'!」は書き出しファイル名を設定できるように工夫しています。
予選と、決勝の切り替えはコメントを付けたり消したりで対応します。

'! 表題をカンマ区切りで設定 完成ファイル名:result.csv
' FP:QT用表題
'順位:車番:ライダー:国籍:チーム:バイク:タイム:記録周:周回数:トップ差:差:最高速
' RACE用表題
順位:ポイント:車番:ライダー:国籍:チーム:バイク:タイム:最高速:トップ差

 決勝リザルトを加工

それでは決勝リザルトを変換してみましょう。

 元PDFはこれ、ちょっとやな予感。

f:id:motagp:20150807075015j:plain

テキストファイルにコピペ

f:id:motagp:20150807075154j:plain

変換実行!!

f:id:motagp:20150807075316j:plain

やはり・・・
ポイントのつかない人は空白ですか・・・0にしてほしい。
リタイヤ組は順位とポイントが空白・・・ごもっとも。
走行できなかった人も同じです。

人数も少ないし、これ位は手で加工します。
今晩はインディーでフリー走行なので、今日はここまで。
仕事しなくちゃ・・・・

 

プログラムソース

 

f:id:motagp:20150807080200j:plain


'*******************************************************
' MotoGPのリザルトを加工するVBS 空白をカンマに置換
' パターンFP,QT
'*******************************************************
' New    2015.8.5 mota2
' update 2015.8.6 mota2 表題追加
' update 2015.8.7 mota2 ライダー、チーム名を外部ファイル化
'*******************************************************

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 objRD = objFSO.OpenTextFile(strScriptPath+"\db-rider.txt", cRead) 
'チームファイル
Set objTM = objFSO.OpenTextFile(strScriptPath+"\db-team.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 arrRD(100,1)
Do Until objRD.AtEndOfStream
  i = i + 1
  strLine = objRD.ReadLine
  arrFl = Split(strLine,":")
  arrRD(i,0) = arrFl(0)
  arrRD(i,1) = arrFl(1)
Loop
iRDMax = i

'チームファイル読み込みループ
i = -1
dim arrTM(50,1)
Do Until objTM.AtEndOfStream
  i = i + 1
  strLine = objTM.ReadLine
  arrFl = Split(strLine,":")
  arrTM(i,0) = arrFl(0)
  arrTM(i,1) = arrFl(1)
Loop
iTMMax = i

'元ファイル読み込みループ
strOutAll = null
Do Until objIN.AtEndOfStream
  '1行読込
  strLine = objIN.ReadLine
  'ライダー名を置換
  For i = 0 To iRDMax
    strLine = Replace(strLine,arrRD(i,0),arrRD(i,1))
  Next
  'チーム名を置換
  For i = 0 To iTMMax
    strLine = Replace(strLine,arrTM(i,0),arrTM(i,1))
  Next

  '空白をカンマ化
  strOut = Replace(strLine," ",",")

  '改行追加
  strOutAll = strOutAll & strOut & vbCrLf
Loop

'書き出し
objOUT.WriteLine strOutAll


'後処理
objIN.Close
objHD.Close
objRD.Close
objTM.Close
objOUT.Close
Set objIN = Nothing
Set objHD = Nothing
Set objRD = Nothing
Set objTM = Nothing
Set objOUT = Nothing