リザルトを加工しよう!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はこれ、ちょっとやな予感。
テキストファイルにコピペ
変換実行!!
やはり・・・
ポイントのつかない人は空白ですか・・・0にしてほしい。
リタイヤ組は順位とポイントが空白・・・ごもっとも。
走行できなかった人も同じです。
人数も少ないし、これ位は手で加工します。
今晩はインディーでフリー走行なので、今日はここまで。
仕事しなくちゃ・・・・
プログラムソース
'*******************************************************
' 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