private void _tildelpoint(Match match, int antal, int[] point) { _points = point; SortedList <string, Loeber> toploebere = new SortedList <string, Loeber>(); int n = 0; // tildelte point double p = 0.0; IList <Loeber> loebereK1 = new List <Loeber>(); IList <Loeber> loebereK2 = new List <Loeber>(); IList <Loeber> loebereRestrict = new List <Loeber>(); List <string> tider = new List <string>(); // for gennemførte løbere fra de 2 klubber i matchen var matchloebere = Loebere.Where(item => ((item.Value.Klub == match.Klub1 && !match.Klub1.Udeblevet) || (item.Value.Klub == match.Klub2 && !match.Klub2.Udeblevet)) && item.Value.IsStatusOK); foreach (var kv in matchloebere) { Loeber l = kv.Value; // lav kun beregningen 1 gang for hver tid if (!tider.Contains(l.Tid)) { tider.Add(l.Tid); // noter om vi allerede har restrictioner bool restrict = loebereRestrict.Count > 0; // find alle løbere med denne tid og foretag beregning hvis der er nogle var loebereMedSammeTid = matchloebere.Where(pair => pair.Value.Tid == l.Tid); foreach (var samme in loebereMedSammeTid) { bool tildel = false; Loeber ll = samme.Value; // afgør om en løber er kandidat til at få point if (ll.Klub == match.Klub1) { if (loebereK1.Count < antal) { // fra klub1 og under antal har fået tildelt point tildel = true; } } else if (ll.Klub == match.Klub2) { if (loebereK2.Count < antal) { // fra klub2 og under antal har fået tildelt point tildel = true; } } if (tildel) { // hvis der er points at tildele så gør det if (n < point.Length) { p = point[n]; } else { p = 0.0; } // giv antal point ll.SetPoint(match, p); // noter hvem der har fået point toploebere.Add(samme.Key, samme.Value); if (ll.Klub == match.Klub1) { loebereK1.Add(ll); } else { loebereK2.Add(ll); } n++; } } } } // fordel point for pointgivende løbere med samme tid // løbere med samme tid på tværs af klubber, skal dele de point som // en eller flere har fået jvf placering (som vil være tilfældig da de alle har samme tid) // loop over løbere som er sorteret på tid // for hver ny tid // hvis en løber har samme tid som den foregående startes en beregning // for alle løbere med denne tid. alle deres point summeres og fordeles på antallet af løbere tider.Clear(); foreach (Loeber l in toploebere.Values) { // lav kun beregningen 1 gang for hver tid if (!tider.Contains(l.Tid)) { tider.Add(l.Tid); // find alle løbere med denne tid og foretag beregning hvis der er nogle var loebereMedSammeTid = toploebere.Where(kv => kv.Value.Tid == l.Tid); int cntP = loebereMedSammeTid.Count(); if (cntP > 1) { // summer point tildelt for dene match double sumP = 0; foreach (KeyValuePair <string, Loeber> kv in loebereMedSammeTid) { sumP += kv.Value.GetPoint(match); } // fordel points på alle med samme match foreach (KeyValuePair <string, Loeber> kv in loebereMedSammeTid) { kv.Value.SetPoint(match, sumP / cntP); } } } } }
public static IList <Loeber> ReadRunnersFromResultXML2(string filnavn, Config config, List <Klub> klubber) { string msg = string.Empty; IList <Loeber> loebere = new List <Loeber>(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.XmlResolver = null; xmlDoc.Load(filnavn); XmlNodeList classNodes = xmlDoc.GetElementsByTagName("ClassResult"); foreach (XmlElement classNode in classNodes) { // class detail string classtext = string.Empty; XmlNodeList classes = classNode.GetElementsByTagName("ClassShortName"); if (classes.Count > 0) { classtext = classNode.GetElementsByTagName("ClassShortName")[0].InnerText; } // deltagere foreach (XmlElement personResult in classNode.GetElementsByTagName("PersonResult")) { // person details XmlElement person = personResult.GetElementsByTagName("Person")[0] as XmlElement; XmlElement personName = person.GetElementsByTagName("PersonName")[0] as XmlElement; string efternavn = personName.GetElementsByTagName("Family")[0].InnerText; string fornavn = personName.GetElementsByTagName("Given")[0].InnerText; // club details XmlElement club = personResult.GetElementsByTagName("Club")[0] as XmlElement; string klubnavn = (club != null) ? club.GetElementsByTagName("ShortName")[0].InnerText : string.Empty; string klubId = (club != null) ? club.GetElementsByTagName("ClubId")[0].InnerText : string.Empty; // time details XmlElement result = personResult.GetElementsByTagName("Result")[0] as XmlElement; XmlNodeList resultTimes = result.GetElementsByTagName("Time"); string tid = string.Empty; if (resultTimes.Count > 0) { tid = resultTimes[0].InnerText; } XmlNodeList ccards = result.GetElementsByTagName("CCardId"); string brik = string.Empty; if (ccards.Count > 0) { brik = ccards[0].InnerText; } string placering = string.Empty; XmlNodeList resultPositions = result.GetElementsByTagName("ResultPosition"); if (resultPositions.Count > 0) { placering = resultPositions[0].InnerText; } string status = result.GetElementsByTagName("CompetitorStatus")[0].Attributes["value"].Value; try { // løberen må have en klasse som bruges i matchen var gk = config.gruppeOgKlasse.Find(k => k.LøbsKlasse == classtext); if (gk != null) { Loeber l = new Loeber(); l.Stnr = "0"; //""]; l.Fornavn = fornavn; //"fornavn"]; l.Efternavn = efternavn; // "efternavn"]; l.Klub = klubber.Find(item => item.Navn.Equals(klubnavn) || item.NavnKort.Equals(klubnavn)); //"klub" if (l.Klub == null) { // add a temporay klub for runners outside the match l.Klub = new Klub(klubId, klubnavn); } l.Løbsklassenavn = classtext; l.Gruppeklasse = gk.Klasse; l.Placering = placering; //"pl"]; l.Tid = _lavtid(tid); //"tid"]; l.Status = status; //"status"]; l.Brik = brik; loebere.Add(l); } } catch { msg += "løber: " + fornavn + " " + efternavn + " kunne ikke tilføjes\n"; } } } if (msg != string.Empty) { throw new Exception("Problemer med indlæsning af xml-data: \n" + msg); } return(loebere); }
public static IList <Loeber> ReadRunnersFromStartlistXML3(string filnavn, Config config, List <Klub> klubber) { string msg = string.Empty; IList <Loeber> loebere = new List <Loeber>(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.XmlResolver = null; xmlDoc.Load(filnavn); XmlNodeList classNodes = xmlDoc.GetElementsByTagName("ClassStart"); if (classNodes.Count == 0) { throw new Exception("Dette er ikke en fil med startliste data"); } foreach (XmlElement classNode in classNodes) { // class detail string classtext = (classNode.GetElementsByTagName("Class")[0] as XmlElement).GetElementsByTagName("Name")[0].InnerText; foreach (XmlElement personStart in classNode.GetElementsByTagName("PersonStart")) { // person details XmlElement person = personStart.GetElementsByTagName("Person")[0] as XmlElement; XmlElement personName = person.GetElementsByTagName("Name")[0] as XmlElement; string efternavn = personName.GetElementsByTagName("Family")[0].InnerText; string fornavn = personName.GetElementsByTagName("Given")[0].InnerText; // club details XmlElement club = personStart.GetElementsByTagName("Organisation")[0] as XmlElement; string klubnavn = (club != null) ? club.GetElementsByTagName("Name")[0].InnerText : ""; string klubId = (club != null) ? club.GetElementsByTagName("Id")[0].InnerText : ""; string klubSource = string.Empty; if (klubId != string.Empty) { foreach (XmlAttribute a in club.GetElementsByTagName("Id")[0].Attributes) { if (a.Name == "type") { klubSource = a.Value; } } } // time details string brik = string.Empty; string tid = string.Empty; XmlNodeList start = personStart.GetElementsByTagName("Start"); if (start != null && start.Count == 1) { XmlNodeList startTime = (start[0] as XmlElement).GetElementsByTagName("StartTime"); if (startTime != null && startTime.Count == 1) { tid = startTime[0].InnerText; } // brik detlajer XmlNodeList ccard = (start[0] as XmlElement).GetElementsByTagName("ControlCard"); if (ccard != null && ccard.Count == 1) { brik = ccard[0].InnerText; } } try { // løberen må have en klasse som bruges i matchen var gk = config.gruppeOgKlasse.Find(k => k.LøbsKlasse == classtext); if (gk != null) { Loeber l = new Loeber(); l.Stnr = "0"; //""]; l.Fornavn = fornavn; //"fornavn"]; l.Efternavn = efternavn; // "efternavn"]; l.Klub = klubber.Find(item => item.Navn.Equals(klubnavn) || item.NavnKort.Equals(klubnavn)); //"klub" if (l.Klub == null) { // add a temporay klub for runners outside the match l.Klub = new Klub(klubId, klubnavn); if (klubSource != string.Empty) { l.Klub.Id.Type = klubSource; } } l.Løbsklassenavn = classtext; l.Gruppeklasse = gk.Klasse; l.StartTid = _lavtid(tid); //"tid"]; l.Brik = brik; loebere.Add(l); } } catch { msg += "løber: " + fornavn + " " + efternavn + "\n"; } } } if (msg != string.Empty) { throw new Exception("Problemer med indlæsning af xml-data: \n" + msg); } return(loebere); }
public static IList <Loeber> ReadRunnersFromCsv(string filnavn, Config config, List <Klub> klubber) { string msg = string.Empty; IList <Loeber> loebere = new List <Loeber>(); // find løbere og tilføj dem til gruppen // open the file "data.csv" which is a CSV file with headers using (CsvReader csv = new CsvReader(new StreamReader(filnavn, ASCIIEncoding.Default), false, ';')) { if (csv.FieldCount < 43) { msg += "det er vist ikke en csv-fil...\n"; } else { // csv.MissingFieldAction = MissingFieldAction.ReplaceByNull; csv.MissingFieldAction = MissingFieldAction.ReplaceByEmpty; csv.DefaultParseErrorAction = ParseErrorAction.AdvanceToNextLine; // treat header csv.ReadNextRecord(); int idxStartnr = 0; int idxBriknr = 1; int idxEfternavn = 3; int idxFornavn = 4; int idxStartTid = 9; int idxTid = 11; int idxStatus = 12; int idxKlubId = 14; int idxKlub = 15; int idxKlasse = 18; int idxPl = 43; if (csv[0].StartsWith("OE")) { idxStartnr = 1; idxBriknr = 3; idxEfternavn = 5; idxFornavn = 6; idxStartTid = 11; idxTid = 13; idxStatus = 14; idxKlubId = 19; idxKlub = 20; idxKlasse = 25; idxPl = 57; } while (csv.ReadNextRecord()) { try { // løberen må have en klasse som bruges i matchen var gk = config.gruppeOgKlasse.Find(k => k.LøbsKlasse == csv[idxKlasse]); if (gk != null) { Loeber l = new Loeber(); l.Stnr = csv[idxStartnr]; //"startnr"]; l.Fornavn = csv[idxFornavn]; //"fornavn"]; l.Efternavn = csv[idxEfternavn]; // "efternavn"]; string klub = string.IsNullOrWhiteSpace(csv[idxKlub]) ? csv[idxKlub - 1] : csv[idxKlub]; // klub city eller navn string klubId = csv[idxKlubId - 1]; l.Klub = klubber.Find(item => item.Navn.Equals(klub) || item.NavnKort.Equals(klub)); //"klub" if (l.Klub == null) { // add a temporay klub for runners outside the match l.Klub = new Klub(klubId, klub); } l.Løbsklassenavn = csv[idxKlasse]; l.Gruppeklasse = gk.Klasse; l.Placering = csv[idxPl]; //"pl"]; l.Tid = _lavtid(csv[idxTid]); //"tid"]; l.Status = csv[idxStatus]; //"status"]; l.StartTid = _lavtid(csv[idxStartTid], config.StartTid); l.Brik = csv[idxBriknr] != "0" ? csv[idxBriknr] : string.Empty; loebere.Add(l); } } catch { msg += "linje: " + csv.CurrentRecordIndex + "\n"; } } } } if (msg != string.Empty) { throw new Exception("Problemer med indlæsning af csv-data: \n" + msg); } return(loebere); }