first commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
using System.Text.RegularExpressions;
|
||||
using Core.Entities;
|
||||
|
||||
namespace Core.Parsers;
|
||||
|
||||
public class EventDefinitionParser : CsvParserBase
|
||||
{
|
||||
public EventDefinitionParser(FileSystemInfo csvFile, bool ignoreBlankLines = true) : base(csvFile, ignoreBlankLines)
|
||||
{
|
||||
}
|
||||
|
||||
public CompetitiveEvent[] Parse()
|
||||
{
|
||||
var events = new List<CompetitiveEvent>();
|
||||
|
||||
CsvReader.Read();
|
||||
CsvReader.ReadHeader();
|
||||
|
||||
while (CsvReader.Read())
|
||||
{
|
||||
var name = CsvReader.GetField("Event");
|
||||
if (string.IsNullOrEmpty(name))
|
||||
continue;
|
||||
var shortName = CsvReader.GetField("Short Name");
|
||||
|
||||
Enum.TryParse(CsvReader.GetField("Format"), out EventFormat format);
|
||||
|
||||
var teamSize = CsvReader.GetField("Team Size");
|
||||
if (string.IsNullOrEmpty(teamSize))
|
||||
throw new ArgumentException(@"Team Size is null for {name}");
|
||||
var match = Regex.Match(teamSize, @"(\d)(?:\s?to\s?)?(\d)?");
|
||||
var min = int.Parse(match.Groups[1].Captures[0].Value);
|
||||
var max = match.Groups[2].Success ? int.Parse(match.Groups[2].Captures[0].Value) : min;
|
||||
|
||||
var stateTeams = CsvReader.GetField<int>("State Count");
|
||||
var semifinalistActivity = CsvReader.GetField("Semifinalist Activity");
|
||||
var regionalCount = CsvReader.GetField("Regional Count");
|
||||
var regionalPresubmit = CsvReader.GetField("Regional Presubmission");
|
||||
var statePresubmission = CsvReader.GetField("State Presubmission");
|
||||
var statePretesting = CsvReader.GetField("State Pretesting");
|
||||
var statePreliminary = CsvReader.GetField("State Preliminary Round");
|
||||
var regionalNotes = CsvReader.GetField("Regional Notes");
|
||||
var documentation = CsvReader.GetField("Documentation");
|
||||
var eligibility = CsvReader.GetField("Eligibility");
|
||||
var theme = CsvReader.GetField("Theme");
|
||||
var description = CsvReader.GetField("Description");
|
||||
var levelOfEffort = CsvReader.GetField<int?>("Level of Effort");
|
||||
//var regionalTeams = CsvReader.GetField<int>("Regional Teams");
|
||||
|
||||
var competitiveEvent = new CompetitiveEvent
|
||||
{
|
||||
Name = name.Trim(),
|
||||
ShortName = shortName.Trim(),
|
||||
Format = format,
|
||||
MaxTeamCountState = stateTeams,
|
||||
MinTeamSize = min,
|
||||
MaxTeamSize = max,
|
||||
SemifinalistActivity = semifinalistActivity,
|
||||
RegionalEvent = !string.IsNullOrEmpty(regionalCount),
|
||||
RegionalPresubmit = regionalPresubmit.Trim() == "TRUE",
|
||||
RegionalNotes = regionalNotes,
|
||||
Documentation= documentation,
|
||||
StatePresubmission = statePresubmission.Trim() == "TRUE",
|
||||
StatePretesting = statePretesting.Trim() == "TRUE",
|
||||
StatePreliminaryRound = statePreliminary.Trim() == "TRUE",
|
||||
Eligibility = eligibility,
|
||||
Theme = theme,
|
||||
Description = description,
|
||||
LevelOfEffort = levelOfEffort
|
||||
};
|
||||
events.Add(competitiveEvent);
|
||||
}
|
||||
|
||||
return events.ToArray();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user