public static ElectionFoo GetFoo(string fileName) { ElectionFoo electionFoo = null; if (fileName.EndsWith(Consts.Ending2003Txt)) { electionFoo = Duma2003; } else if (fileName.EndsWith(Consts.Ending2007Txt)) { electionFoo = Duma2007; } else if (fileName.EndsWith(Consts.Ending2011Txt)) { electionFoo = Duma2011; } else if (fileName.EndsWith(Consts.Ending2004Txt)) { electionFoo = President2004; } else if (fileName.EndsWith(Consts.Ending2008Txt)) { electionFoo = President2008; } else if (fileName.EndsWith(Consts.Ending2012Txt)) { electionFoo = President2012; } else if (fileName.EndsWith(Consts.Ending2016Txt)) { electionFoo = Duma2016; } else if (fileName.EndsWith(Consts.Ending2018Txt)) { electionFoo = President2018; } return(electionFoo); }
public Tik Create(string fileName) { var electionFoo = ElectionFoo.GetFoo(fileName); var stopWatch = new Stopwatch(); stopWatch.Start(); var lineCounter = 0; //var firstTime = true; var tik = new Tik() { Name = StringUtils.GetTikName(fileName) }; using (var sr = new StreamReader(fileName, Encoding.GetEncoding(1251))) { while (!sr.EndOfStream) { lineCounter++; var line = sr.ReadLine(); if (lineCounter == electionFoo.NumberOfElectorsInList.LineNumber) { Set(tik, line, electionFoo.NumberOfElectorsInList, (x, v) => x.NumberOfVoters = v); } if (lineCounter == electionFoo.NumberOfEarlier.LineNumber) { Set(tik, line, electionFoo.NumberOfEarlier, (x, v) => x.NumberOfEarlier = v); } if (lineCounter == electionFoo.NumberOfIn.LineNumber) { Set(tik, line, electionFoo.NumberOfIn, (x, v) => x.NumberOfInside = v); } if (lineCounter == electionFoo.NumberOfOut.LineNumber) { Set(tik, line, electionFoo.NumberOfOut, (x, v) => x.NumberOfOutside = v); } if (lineCounter == electionFoo.NumberOfValidBallot.LineNumber) { Set(tik, line, electionFoo.NumberOfValidBallot, (x, v) => x.Valid = v); } if (lineCounter == electionFoo.NumberOfInvalidBallot.LineNumber) { Set(tik, line, electionFoo.NumberOfInvalidBallot, (x, v) => x.InValid = v); } if (lineCounter == electionFoo.Stationary.LineNumber) { Set(tik, line, electionFoo.Stationary, (x, v) => x.Stationary = v); } if (lineCounter == electionFoo.Portable.LineNumber) { Set(tik, line, electionFoo.Portable, (x, v) => x.Portable = v); } if (lineCounter == electionFoo.RowLocalElectionCommittee) { tik.Uiks = GetUiks(line); } if (lineCounter >= electionFoo.MinRowNumberForFactions) { //if (firstTime) //{ // CheckZero(); // firstTime = false; //} //if (!GetNewPartyData(line, sr, fileName)) break; } } } //Presence = 100 * ((double)(NumberOfEarlier + NumberOfIn + NumberOfOut)) / NumberOfElectorsInList; //AllPresences = Enumerable // .Range(0, allNumberOfEarlier.Count) // .Select( // i => // Math.Round( // 100.0 * (allNumberOfEarlier[i] + allNumberOfIn[i] + allNumberOfOut[i]) / // AllNumberOfElectorsInList[i], 2)) // .ToArray(); //for (int i = 0; i < AllPresences.Length; i++) //{ // if (double.IsNaN(AllPresences[i])) // { // foreach (var electionCommittee in partiesData) // { // electionCommittee.Value.LocalElectionCommittees[i].Percent = double.NaN; // } // //Trace.WriteLine(uiks[i]); // } //} stopWatch.Stop(); //Trace.WriteLine(stopWatch.Elapsed); return(tik); }
static ElectionFoo() { Duma2003 = new ElectionFoo() { RowLocalElectionCommittee = 8, NumberOfElectorsInList = new Label(ЧИСЛО_ИЗБИРАТЕЛЕЙ_ВНЕСЕННЫХ_В_СПИСКИ, 9), NumberOfEarlier = new Label(ЧИСЛО_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_ПРОГОЛОСОВАВШИМ_ДОСРОЧНО, 11), NumberOfIn = new Label(ЧИСЛО_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_НА_ИЗБИРАТЕЛЬНОМ_УЧАСТКЕ, 12), NumberOfOut = new Label(ЧИСЛО_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_ПРОГОЛОСОВАВШИМ_ВНЕ_ПОМЕЩЕНИЯ_ДЛЯ_ГОЛОСОВАНИЯ, 13), NumberOfInvalidBallot = new Label(ЧИСЛО_НЕДЕЙСТВИТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 17), NumberOfValidBallot = new Label(ЧИСЛО_ДЕЙСТВИТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 18), Portable = new Label("Число бюллетеней в переносных ящиках для голосования", 15), Stationary = new Label("Число бюллетеней в стационарных ящиках для голосования", 16), MinRowNumberForFactions = 27, }; Duma2007 = new ElectionFoo() { RowLocalElectionCommittee = 8, NumberOfElectorsInList = new Label(ЧИСЛО_ИЗБИРАТЕЛЕЙ_ВНЕСЕННЫХ_В_СПИСКИ_ИЗБИРАТЕЛЕЙ, 9), NumberOfEarlier = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_ПРОГОЛОСОВАВШИМ_ДОСРОЧНО, 11), NumberOfIn = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_В_ПОМЕЩЕНИЯХ_ДЛЯ_ГОЛОСОВАНИЯ, 12), NumberOfOut = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_ВНЕ_ПОМЕЩЕНИЙ_ДЛЯ_ГОЛОСОВАНИЯ, 13), NumberOfInvalidBallot = new Label(ЧИСЛО_НЕДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 17), NumberOfValidBallot = new Label(ЧИСЛО_ДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 18), MinRowNumberForFactions = 29, }; Duma2011 = new ElectionFoo() { RowLocalElectionCommittee = 8, NumberOfElectorsInList = new Label(ЧИСЛО_ИЗБИРАТЕЛЕЙ_ВНЕСЕННЫХ_В_СПИСОК_ИЗБИРАТЕЛЕЙ, 9), NumberOfEarlier = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_ПРОГОЛОСОВАВШИМ_ДОСРОЧНО, 11), NumberOfIn = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_В_ПОМЕЩЕНИИ_ДЛЯ_ГОЛОСОВАНИЯ, 12), NumberOfOut = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_ВНЕ_ПОМЕЩЕНИЯ_ДЛЯ_ГОЛОСОВАНИЯ, 13), NumberOfInvalidBallot = new Label(ЧИСЛО_НЕДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 17), NumberOfValidBallot = new Label(ЧИСЛО_ДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 18), MinRowNumberForFactions = 28 }; Duma2016 = new ElectionFoo() { RowLocalElectionCommittee = 8, NumberOfElectorsInList = new Label("\"Число избирателей, внесенных в список избирателей на момент окончания голосования\"", 9), NumberOfEarlier = new Label("\"Число избирательных бюллетеней, выданных избирателям, проголосовавшим досрочно\"", 11), NumberOfIn = new Label("\"Число избирательных бюллетеней, выданных в помещении для голосования в день голосования\"", 12), NumberOfOut = new Label("\"Число избирательных бюллетеней, выданных вне помещения для голосования в день голосования\"", 13), NumberOfInvalidBallot = new Label("\"Число недействительных избирательных бюллетеней\"", 17), NumberOfValidBallot = new Label("\"Число действительных избирательных бюллетеней\"", 18), Portable = new Label("\"Число избирательных бюллетеней, содержащихся в переносных ящиках для голосования\"", 15), Stationary = new Label("\"Число избирательных бюллетеней, содержащихся в стационарных ящиках для голосования\"", 16), MinRowNumberForFactions = 28 }; President2004 = new ElectionFoo() { RowLocalElectionCommittee = 7, NumberOfElectorsInList = new Label(ЧИСЛО_ИЗБИРАТЕЛЕЙ_ВНЕСЕННЫХ_В_СПИСОК, 8), NumberOfEarlier = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ДОСРОЧНО, 10), NumberOfIn = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_В_ДЕНЬ_ГОЛОСОВАНИЯ, 11), NumberOfOut = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ВНЕ_ПОМЕЩЕНИЯ, 12), NumberOfInvalidBallot = new Label(ЧИСЛО_НЕДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 16), NumberOfValidBallot = new Label(ЧИСЛО_ДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 17), MinRowNumberForFactions = 26 }; President2008 = new ElectionFoo() { RowLocalElectionCommittee = 11, NumberOfElectorsInList = new Label(ЧИСЛО_ИЗБИРАТЕЛЕЙ_ВКЛЮЧЕННЫХ_В_СПИСКИ_ИЗБИРАТЕЛЕЙ, 12), NumberOfEarlier = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_ПРОГОЛОСОВАВШИМ_ДОСРОЧНО, 14), NumberOfIn = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_В_ПОМЕЩЕНИЯХ_ДЛЯ_ГОЛОСОВАНИЯ_В_ДЕНЬ_ГОЛОСОВАНИЯ, 15), NumberOfOut = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ВНЕ_ПОМЕЩЕНИЙ_ДЛЯ_ГОЛОСОВАНИЯ_В_ДЕНЬ_ГОЛОСОВАНИЯ, 16), NumberOfInvalidBallot = new Label(ЧИСЛО_НЕДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 20), NumberOfValidBallot = new Label(ЧИСЛО_ДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 21), MinRowNumberForFactions = 32 }; President2012 = new ElectionFoo() { RowLocalElectionCommittee = 11, NumberOfElectorsInList = new Label(ЧИСЛО_ИЗБИРАТЕЛЕЙ_ВКЛЮЧЕННЫХ_В_СПИСОК_ИЗБИРАТЕЛЕЙ, 12), NumberOfEarlier = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_ПРОГОЛОСОВАВШИМ_ДОСРОЧНО1, 14), NumberOfIn = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_В_ПОМЕЩЕНИИ_ДЛЯ_ГОЛОСОВАНИЯ_В_ДЕНЬ_ГОЛОСОВАНИЯ, 15), NumberOfOut = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ВНЕ_ПОМЕЩЕНИЯ_ДЛЯ_ГОЛОСОВАНИЯ_В_ДЕНЬ_ГОЛОСОВАНИЯ, 16), NumberOfInvalidBallot = new Label(ЧИСЛО_НЕДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 20), NumberOfValidBallot = new Label(ЧИСЛО_ДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 21), Portable = new Label("Число избирательных бюллетеней в переносных ящиках для голосования", 18), Stationary = new Label("Число бюллетеней в стационарных ящиках для голосования", 19), MinRowNumberForFactions = 31 }; President2018 = new ElectionFoo() { RowLocalElectionCommittee = 11, NumberOfElectorsInList = new Label(ЧИСЛО_ИЗБИРАТЕЛЕЙ_ВКЛЮЧЕННЫХ_В_СПИСОК_ИЗБИРАТЕЛЕЙ, 12), NumberOfEarlier = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ИЗБИРАТЕЛЯМ_ПРОГОЛОСОВАВШИМ_ДОСРОЧНО1, 14), NumberOfIn = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_В_ПОМЕЩЕНИИ_ДЛЯ_ГОЛОСОВАНИЯ_В_ДЕНЬ_ГОЛОСОВАНИЯ, 15), NumberOfOut = new Label(ЧИСЛО_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ_ВЫДАННЫХ_ВНЕ_ПОМЕЩЕНИЯ_ДЛЯ_ГОЛОСОВАНИЯ_В_ДЕНЬ_ГОЛОСОВАНИЯ, 16), NumberOfInvalidBallot = new Label(ЧИСЛО_НЕДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 20), NumberOfValidBallot = new Label(ЧИСЛО_ДЕЙСТВИТЕЛЬНЫХ_ИЗБИРАТЕЛЬНЫХ_БЮЛЛЕТЕНЕЙ, 21), Portable = new Label("Число избирательных бюллетеней в переносных ящиках для голосования", 18), Stationary = new Label("Число бюллетеней в стационарных ящиках для голосования", 19), MinRowNumberForFactions = 25 }; }
public ElectionCommitteeResults(string fileName) { ElectionFoo electionFoo = ElectionFoo.GetFoo(fileName); const int captionIndex = 1; var stopWatch = new Stopwatch(); stopWatch.Start(); var lineCouner = 0; var firstTime = true; using (var sr = new StreamReader(fileName, Encoding.GetEncoding(1251))) { while (!sr.EndOfStream) { lineCouner++; var line = sr.ReadLine(); var parts = line.Split(new[] { Data.Core.Consts.Tab }, StringSplitOptions.RemoveEmptyEntries); Func <int> getTotal = () => Convert.ToInt32(parts[captionIndex + 1].Trim()); Func <List <int> > getAll = () => Enumerable.Range(captionIndex + 2, parts.Length - captionIndex - 2) .Select(i => Convert.ToInt32(parts[i].Trim())) .ToList(); if (lineCouner == electionFoo.NumberOfElectorsInList.LineNumber) { AssertCaption(parts[captionIndex], electionFoo.NumberOfElectorsInList.Caption); NumberOfElectorsInList = getTotal(); AllNumberOfElectorsInList = getAll(); } if (lineCouner == electionFoo.NumberOfEarlier.LineNumber) { AssertCaption(parts[captionIndex], electionFoo.NumberOfEarlier.Caption); NumberOfEarlier = getTotal(); allNumberOfEarlier = getAll(); } if (lineCouner == electionFoo.NumberOfIn.LineNumber) { AssertCaption(parts[captionIndex], electionFoo.NumberOfIn.Caption); NumberOfIn = getTotal(); allNumberOfIn = getAll(); } if (lineCouner == electionFoo.NumberOfOut.LineNumber) { AssertCaption(parts[captionIndex], electionFoo.NumberOfOut.Caption); NumberOfOut = getTotal(); allNumberOfOut = getAll(); } if (lineCouner == electionFoo.NumberOfValidBallot.LineNumber) { AssertCaption(parts[captionIndex], electionFoo.NumberOfValidBallot.Caption); NumberOfValidBallot = getTotal(); } if (lineCouner == electionFoo.NumberOfInvalidBallot.LineNumber) { AssertCaption(parts[captionIndex], electionFoo.NumberOfInvalidBallot.Caption); NumberOfInvalidBallot = getTotal(); } if (lineCouner == electionFoo.RowLocalElectionCommittee) { GetUiks(line); } if (lineCouner >= electionFoo.MinRowNumberForFactions) { if (firstTime) { CheckZero(); firstTime = false; } if (!GetNewPartyData(line, sr, fileName)) { break; } } } } Presence = 100 * ((double)(NumberOfEarlier + NumberOfIn + NumberOfOut)) / NumberOfElectorsInList; AllPresences = Enumerable .Range(0, allNumberOfEarlier.Count) .Select( i => Math.Round( 100.0 * (allNumberOfEarlier[i] + allNumberOfIn[i] + allNumberOfOut[i]) / AllNumberOfElectorsInList[i], 2)) .ToArray(); for (int i = 0; i < AllPresences.Length; i++) { if (double.IsNaN(AllPresences[i])) { foreach (var electionCommittee in partiesData) { electionCommittee.Value.LocalElectionCommittees[i].Percent = double.NaN; } //Trace.WriteLine(uiks[i]); } } stopWatch.Stop(); //Trace.WriteLine(stopWatch.Elapsed); }