Retrosheet event record mapping completed
The Retrosheet project has kind of sat around for a while untouched, so I figured I would finish up the reading of the event records. I have decided to break the project into separate files, as if I kept it in one file, it would be obscenely long.
So, here is the main Program.cs file:
Program.cs
using System; using System.Collections.Generic; using System.Linq; namespace RetrosheetReader { class Program { static List<Team> teamList; static List<Player> playerList; static List<Event> eventList; const string DATA = "c:\\baseball_data\\"; static void Main(string[] args) { Console.WriteLine("Retrosheet Reader"); Console.WriteLine(); teamList = Team.GetTeamList(DATA); playerList = Player.GetPlayerList(DATA); eventList = Event.GetEventList(DATA); Console.WriteLine("Number of teams: " + teamList.Count().ToString()); Console.WriteLine("Number of players: " + playerList.Count().ToString()); Console.WriteLine("Number of events: " + eventList.Count().ToString()); Console.WriteLine(); Console.Write("Strike any key to end..."); Console.ReadKey(); } } } |
There are now 3 class files, one each for a team, player, and event. The event file is the one with the most new stuff going on.
Team.cs
using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace RetrosheetReader { class Team { int year; string city; string nickname; string abbreviation; string league; public Team(int y, string[] a) { year = y; abbreviation = a[0]; league = a[1]; city = a[2]; nickname = a[3]; } public static List<Team> GetTeamList(string dir) { int y; string s; string[] splitLine; List<Team> teamList = new List<Team>(); List<string> tfs = Directory.GetFiles(dir, "team*").ToList(); foreach (string tf in tfs) { y = Convert.ToInt32(Path.GetFileName(tf).Substring(4)); StreamReader sr = new StreamReader(tf); while ((s = sr.ReadLine()) != null) { splitLine = s.Split(','); if (splitLine.Count() == 4) { teamList.Add(new Team(y, splitLine)); } } } return teamList; } } } |
Player.cs
using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace RetrosheetReader { class Player { int year; string team; string playerID; string firstName; string lastName; string bats; string throws; string position; public Player(int y, string[] a) { year = y; playerID = a[0]; lastName = a[1]; firstName = a[2]; bats = a[3]; throws = a[4]; team = a[5]; position = a[6]; } public static List<Player> GetPlayerList(string dir) { int y; string s; string[] splitLine; List<Player> playerList = new List<Player>(); List<string> rfs = Directory.GetFiles(dir, "*.ros").ToList(); foreach (string rf in rfs) { y = Convert.ToInt32(Path.GetFileName(rf).Substring(3).Split('.')[0]); StreamReader sr = new StreamReader(rf); while ((s = sr.ReadLine()) != null) { splitLine = s.Split(','); if (splitLine.Count() == 7) { playerList.Add(new Player(y, splitLine)); } } } return playerList; } } } |
Event.cs
using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace RetrosheetReader { class Event { string gameID; // 0, A string visitingTeam; // 1, B int inning; // 2, C int battingTeam; // 3, D int outs; // 4, E int balls; // 5, F int strikes; // 6, G string pitchSequence; // 7, H int visitorScore; // 8, I int homeScore; // 9, J string batter; // 10, K string batterHand; // 11, L string resBatter; // 12, M string resBatterHand; // 13, N string pitcher; // 14, O string pitcherHand; // 15, P string resPitcher; // 16, Q string resPitcherHand; // 17, R string catcher; // 18, S string firstBase; // 19, T string secondBase; // 20, U string thirdBase; // 21, V string shortstop; // 22, W string leftField; // 23, X string centerField; // 24, Y string rightField; // 25, Z string firstRunner; // 26, AA string secondRunner; // 27, AB string thirdRunner; // 28, AC string eventText; // 29, AD bool leadoffFlag; // 30, AE bool pinchHitFlag; // 31, AF int defensivePosition; // 32, AG int lineupPosition; // 33, AH int eventType; // 34, AI bool batterEventFlag; // 35, AJ bool abFlag; // 36, AK int hitValue; // 37, AL bool shFlag; // 38, AM bool sfFlag; // 39, AN int outsOnPlay; // 40, AO bool doublePlayFlag; // 41, AP bool triplePlayFlag; // 42, AQ int rbiOnPlay; // 43, AR bool wildPitchFlag; // 44, AS bool passedBallFlag; // 45, AT int fieldedBy; // 46, AU string battedBallType; // 47, AV bool buntFlag; // 48, AW bool foulFlag; // 49, AX string hitLocation; // 50, AY int numErrors; // 51, AZ int firstErrorPlayer; // 52, BA string firstErrorType; // 53, BB int secondErrorPlayer; // 54, BC string secondErrorType; // 55, BD int thirdErrorPlayer; // 56, BE string thirdErrorType; // 57, BF int batterDest; // 58, BG int runner1Dest; // 59, BH int runner2Dest; // 60, BI int runner3Dest; // 61, BJ string playOnBatter; // 62, BK string playOnRunner1; // 63, BL string playOnRunner2; // 64, BM string playOnRunner3; // 65, BN bool sbRunner1Flag; // 66, BO bool sbRunner2Flag; // 67, BP bool sbRunner3Flag; // 68, BQ bool csRunner1Flag; // 69, BR bool csRunner2Flag; // 70, BS bool csRunner3Flag; // 71, BT bool poRunner1Flag; // 72, BU bool poRunner2Flag; // 73, BV bool poRunner3Flag; // 74, BW string respPitcher1; // 75, BX string respPitcher2; // 76, BY string respPitcher3; // 77, BZ bool newGameFlag; // 78, CA bool endGameFlag; // 79, CB bool pinchRunner1; // 80, CC bool pinchRunner2; // 81, CD bool pinchRunner3; // 82, CE string removedForPR1; // 83, CF string removedForPR2; // 84, CG string removedForPR3; // 85, CH string removedForPH; // 86, CI int posRemovedForPH; // 87, CJ int fielderWithPO1; // 88, CK int fielderWithPO2; // 89, CL int fielderWithPO3; // 90, CM int fielderWithA1; // 91, CN int fielderWithA2; // 92, CO int fielderWithA3; // 93, CP int fielderWithA4; // 94, CQ int fielderWithA5; // 95, CR int eventNum; // 96, CS public Event(string[] a) { gameID = a[0].Replace("\"", ""); visitingTeam = a[1].Replace("\"", ""); inning = Convert.ToInt32(a[2]); battingTeam = Convert.ToInt32(a[3]); outs = Convert.ToInt32(a[4]); balls = Convert.ToInt32(a[5]); strikes = Convert.ToInt32(a[6]); pitchSequence = a[7].Replace("\"", ""); visitorScore = Convert.ToInt32(a[8]); homeScore = Convert.ToInt32(a[9]); batter = a[10].Replace("\"", ""); batterHand = a[11].Replace("\"", ""); resBatter = a[12].Replace("\"", ""); resBatterHand = a[13].Replace("\"", ""); pitcher = a[14].Replace("\"", ""); pitcherHand = a[15].Replace("\"", ""); resPitcher = a[16].Replace("\"", ""); resPitcherHand = a[17].Replace("\"", ""); catcher = a[18].Replace("\"", ""); firstBase = a[19].Replace("\"", ""); secondBase = a[20].Replace("\"", ""); thirdBase = a[21].Replace("\"", ""); shortstop = a[22].Replace("\"", ""); leftField = a[23].Replace("\"", ""); centerField = a[24].Replace("\"", ""); rightField = a[25].Replace("\"", ""); firstRunner = a[26].Replace("\"", ""); secondRunner = a[27].Replace("\"", ""); thirdRunner = a[28].Replace("\"", ""); eventText = a[29].Replace("\"", ""); leadoffFlag = a[30].Contains('T'); pinchHitFlag = a[31].Contains('T'); defensivePosition = Convert.ToInt32(a[32]); lineupPosition = Convert.ToInt32(a[33]); eventType = Convert.ToInt32(a[34]); batterEventFlag = a[35].Contains('T'); abFlag = a[36].Contains('T'); hitValue = Convert.ToInt32(a[37]); shFlag = a[38].Contains('T'); sfFlag = a[39].Contains('T'); outsOnPlay = Convert.ToInt32(a[40]); doublePlayFlag = a[41].Contains('T'); triplePlayFlag = a[42].Contains('T'); rbiOnPlay = Convert.ToInt32(a[43]); wildPitchFlag = a[44].Contains('T'); passedBallFlag = a[45].Contains('T'); fieldedBy = Convert.ToInt32(a[46]); battedBallType = a[47].Replace("\"", ""); buntFlag = a[48].Contains('T'); foulFlag = a[49].Contains('T'); hitLocation = a[50].Replace("\"", ""); numErrors = Convert.ToInt32(a[51]); firstErrorPlayer = Convert.ToInt32(a[52]); firstErrorType = a[53].Replace("\"", ""); secondErrorPlayer = Convert.ToInt32(a[54]); secondErrorType = a[55].Replace("\"", ""); thirdErrorPlayer = Convert.ToInt32(a[56]); thirdErrorType = a[57].Replace("\"", ""); batterDest = Convert.ToInt32(a[58]); runner1Dest = Convert.ToInt32(a[59]); runner2Dest = Convert.ToInt32(a[60]); runner3Dest = Convert.ToInt32(a[61]); playOnBatter = a[62].Replace("\"", ""); playOnRunner1 = a[63].Replace("\"", ""); playOnRunner2 = a[64].Replace("\"", ""); playOnRunner3 = a[65].Replace("\"", ""); sbRunner1Flag = a[66].Contains('T'); sbRunner2Flag = a[67].Contains('T'); sbRunner3Flag = a[68].Contains('T'); csRunner1Flag = a[69].Contains('T'); csRunner2Flag = a[70].Contains('T'); csRunner3Flag = a[71].Contains('T'); poRunner1Flag = a[72].Contains('T'); poRunner2Flag = a[73].Contains('T'); poRunner3Flag = a[74].Contains('T'); respPitcher1 = a[75].Replace("\"", ""); respPitcher2 = a[76].Replace("\"", ""); respPitcher3 = a[77].Replace("\"", ""); newGameFlag = a[78].Contains('T'); endGameFlag = a[79].Contains('T'); pinchRunner1 = a[80].Contains('T'); pinchRunner2 = a[81].Contains('T'); pinchRunner3 = a[82].Contains('T'); removedForPR1 = a[83].Replace("\"", ""); removedForPR2 = a[84].Replace("\"", ""); removedForPR3 = a[85].Replace("\"", ""); removedForPH = a[86].Replace("\"", ""); posRemovedForPH = Convert.ToInt32(a[87]); fielderWithPO1 = Convert.ToInt32(a[88]); fielderWithPO2 = Convert.ToInt32(a[89]); fielderWithPO3 = Convert.ToInt32(a[90]); fielderWithA1 = Convert.ToInt32(a[91]); fielderWithA2 = Convert.ToInt32(a[92]); fielderWithA3 = Convert.ToInt32(a[93]); fielderWithA4 = Convert.ToInt32(a[94]); fielderWithA5 = Convert.ToInt32(a[95]); eventNum = Convert.ToInt32(a[96]); } public static List<Event> GetEventList(string dir) { string s; string[] splitLine; List<Event> eventList = new List<Event>(); List<string> efs = Directory.GetFiles(dir, "*.csv").ToList(); foreach (string ef in efs) { Console.WriteLine("Reading events in " + ef); StreamReader sr = new StreamReader(ef); while ((s = sr.ReadLine()) != null) { splitLine = s.Split(','); if (splitLine.Count() == 97) { eventList.Add(new Event(splitLine)); } } } return eventList; } } } |
I have zipped up the solution if you would like to work with it:
Next up will come some actual analysis of the data, now that it is completely being read in and stored.