private SubstitutionDetails ParsePitchingSub(string desc, string[] words, SubstitutionDetails subDetails) { bool didReplaceSecondaryPlayer = false; string secondaryPlayer = ""; for (int i = 1; i < words.Length; i++) { if (words[i] == "replaces") { subDetails.PlayerOutS = FindName( words, i + 1 ); subDetails.PlayerOut = _players[subDetails.PlayerOutS].ID; } if ((words[i - 1] == "Pitching" && words[i] == "Change:") || words[i].Contains("Pinch")) { subDetails.PlayerInS = FindName( words, i + 1 ); subDetails.PlayerIn = _players[subDetails.PlayerInS].ID; } if (words[i] == "replacing") { subDetails.PlayerOutS = FindName( words, i + 1 ); subDetails.PlayerOut = _players[subDetails.PlayerOutS].ID; } } subDetails.PlayerOutPos = _players[subDetails.PlayerOutS].CurrentPosition; subDetails.PlayerInPos = subDetails.PlayerOutPos; _players[subDetails.PlayerOutS].CurrentPosition = ""; _players[subDetails.PlayerInS].CurrentPosition = subDetails.PlayerInPos; return subDetails; }
public SubstitutionDetails ParseSubstitutionDescription(string ev, string desc) { SubstitutionDetails subDetails = new SubstitutionDetails(); string[] words = CleanDescription( desc ); string tempev = ev.ToLower(); if (tempev == "pitching substitution" || tempev == "offensive sub") subDetails = ParsePitchingSub( desc, words, subDetails ); else if (tempev == "defensive switch" || tempev == "defensive sub") subDetails = ParseDefensiveSub( desc, words, subDetails ); return subDetails; }
private SubstitutionDetails ParseDefensiveSub(string desc, string[] words, SubstitutionDetails subDetails) { bool changedPositions = false; bool isSpecialDefSwitch = false; for (int i = 1; i < words.Length; i++) { if (desc.Contains( "remains in the game as" )) { // event: Defensive Switch, description: James Jones remains in the game as the center fielder. // PlayerOut: , PlayerIn: , ( -1.-1 ) isSpecialDefSwitch = true; subDetails.PlayerInS = FindName( words, i - 1); subDetails.PlayerIn = _players[subDetails.PlayerInS].ID; for(int j = i; j < words.Length; j++) { if (IsPosition( words[j] )) { subDetails.PlayerInPos = _conversion.FindPosition( words[j] ); break; } else if (IsPosition( words[j] + " " + words[j + 1] )) { subDetails.PlayerInPos = _conversion.FindPosition( words[j] + " " + words[j + 1] ); break; } } break; } if (words[i - 1] == "Defensive" && words[i] == "Substitution:") { subDetails.PlayerInS = FindName( words, i + 1 ); subDetails.PlayerIn = _players[subDetails.PlayerInS].ID; } if (words[i] == "replaces") { try { if (IsPosition( words[i + 1] )) { subDetails.PlayerOutS = FindName( words, i + 2 ); subDetails.PlayerOut = _players[subDetails.PlayerOutS].ID; } else if (IsPosition( words[i + 1] + " " + words[i + 2] )) { subDetails.PlayerOutS = FindName( words, i + 3 ); subDetails.PlayerOut = _players[subDetails.PlayerOutS].ID; } } catch (Exception) { } if (!IsPosition( words[i + 1] ) && !IsPosition( words[i + 1] + " " + words[i + 2] )) { subDetails.PlayerOutS = FindName( words, i + 1 ); subDetails.PlayerOut = _players[subDetails.PlayerOutS].ID; } } if (words[i] == "playing") { // event: Defensive Sub, description: Defensive Substitution: Efren Navarro replaces first baseman C. J. Cron, batting 5th, playing first base. // PlayerOut: C.J. Cron, 1B PlayerIn: Efren Navarro, ( -1.-1 ) changedPositions = true; subDetails.PlayerInPos = _conversion.FindPosition( words[i] ); } if (words[i - 1] == "Defensive" && words[i] == "switch") { isSpecialDefSwitch = true; for (int j = i; j < words.Length; j++) { if (words[j] == "from") { subDetails.PlayerOutPos = _conversion.FindPosition( words[j + 1] ); } else if (words[j] == "to") { subDetails.PlayerInPos = _conversion.FindPosition( words[j + 1] ); } else if (words[j] == "for") { subDetails.PlayerOutS = FindName( words, j + 1 ); subDetails.PlayerInS = subDetails.PlayerOutS; subDetails.PlayerOut = _players[subDetails.PlayerOutS].ID; subDetails.PlayerIn = _players[subDetails.PlayerOutS].ID; } } } } if (!isSpecialDefSwitch) { subDetails.PlayerOutPos = _players[subDetails.PlayerOutS].CurrentPosition; //if (!changedPositions) subDetails.PlayerInPos = subDetails.PlayerOutPos; _players[subDetails.PlayerOutS].CurrentPosition = ""; _players[subDetails.PlayerInS].CurrentPosition = subDetails.PlayerInPos; } else _players[subDetails.PlayerInS].CurrentPosition = subDetails.PlayerInPos; return subDetails; }