private void LoadTestData(List <string> masterInit, List <string> testInit) { Master = new WorkTable("Master"); Test = new WorkTable("Test"); Master.LoadData(masterInit, ";", true); Test.LoadData(testInit, ";", true); }
private IEnumerable <string> GetExtraRows(IWorkTable table, IEnumerable <int> comparedId) { var filter = table.Rows.Select(r => r.Id).Except(comparedId); return(from r in table.Rows join f in filter on r.Id equals f select r.Id + table.Delimiter + table.Name + table.Delimiter + string.Join(table.Delimiter, r.Data)); }
public CompareTable(IWorkTable masterTable, IWorkTable testTable, List <int> idColumns) { Data = new List <ComparedRow>(); Extra = new List <string>(); MasterTable = masterTable; TestTable = testTable; IdColumns = idColumns; }
public CompareTable Execute(IWorkTable masterTable, IWorkTable testTable) { MasterTable = masterTable; TestTable = testTable; //var mm = masterTable.Rows.Where(item => item.Data[10] == "373522"); //var tt = testTable.Rows.Where(item => item.Data[10] == "373522"); Delimiter = masterTable.Delimiter; //gather base stat PerfCounter.Start(); BaseStat = GatherStatistics(masterTable.Rows, testTable.Rows); PerfCounter.Stop("Base Gather Stat"); //analyse File.WriteAllLines(@"C:\Users\MSBZ\Desktop\baseStat.txt", BaseStat.Select(r => r.ToString())); PerfCounter.Start(); PivotKeysIndexes = AnalyseForPivotKey(masterTable.Rows, BaseStat); PerfCounter.Stop("AnalyseForPivotKey"); File.AppendAllText(@"C:\Users\MSBZ\Desktop\baseStat.txt", "baseKeyIndex: " + string.Join(";", masterTable.Headers.ColumnIndexIn(PivotKeysIndexes))); //group PerfCounter.Start(); var groupsM = Group(masterTable.Rows, PivotKeysIndexes); var groupsT = Group(testTable.Rows, PivotKeysIndexes); PerfCounter.Stop("Base Group"); //File.WriteAllText(@"C:\Users\MSBZ\Desktop\groupsM.txt", "Hash" + ";" + string.Join(";", masterTable.Headers.ColumnIndexIn(PivotKeysIndexes)) + Environment.NewLine); //File.AppendAllLines(@"C:\Users\MSBZ\Desktop\groupsM.txt", groupsM.SelectMany(item => item.Value.Select(it => it.GetValuesHashCode(PivotKeysIndexes) + ";" + string.Join(";", it.ColumnIndexIn(PivotKeysIndexes))))); //File.WriteAllText(@"C:\Users\MSBZ\Desktop\groupsT.txt", "Hash" + ";" + string.Join(";", masterTable.Headers.ColumnIndexIn(PivotKeysIndexes)) + Environment.NewLine); //File.AppendAllLines(@"C:\Users\MSBZ\Desktop\groupsT.txt", groupsT.SelectMany(item => item.Value.Select(it => it.GetValuesHashCode(PivotKeysIndexes) + ";" + string.Join(";", it.ColumnIndexIn(PivotKeysIndexes))))); //PerfCounter.Start(); var compareHeaders = masterTable.Headers.ColumnIndexIn(PivotKeysIndexes).ToList(); compareHeaders.AddRange(masterTable.Headers.Data); CompareTable = new CompareTable(masterTable, testTable, PivotKeysIndexes); //var uMasterRows = groupsM.Where(r => r.Value.Count() == 1).ToDictionary(item => item.Key, item => item.Value); //var uTestRows = groupsT.Where(r => r.Value.Count() == 1).ToDictionary(item => item.Key, item => item.Value); //CompareTable.Data.AddRange(Match(uMasterRows.SelectMany(item=>item.Value), uTestRows.SelectMany(item => item.Value), PivotKeysIndexes)); //PerfCounter.Stop("Preparison"); PerfCounter.Start(); //var mRemainings = groupsM.Where(r => !uMasterRows.Keys.Contains(r.Key)).ToDictionary(item => item.Key, item => item.Value); //var tRemainings = groupsT.Where(r => !uTestRows.Keys.Contains(r.Key)).ToDictionary(item => item.Key, item => item.Value); verticalMatch = new VerticalMatch(BaseStat); //var test = masterTable.Rows.Where(item=>item.Data[117] == "CRT-U XTSE" && item.Data[225] == "20180727"); //var test2 = groupsM.Values.SelectMany(item => item.Where(i=>i.Data[117] == "CRT-U XTSE" && i.Data[225] == "20180727").Select(i=>i.Id)); //var test3 = testTable.Rows.Where(item => item.Data[117] == "CRT-U XTSE" && item.Data[225] == "20180727"); //var test4 = groupsT.Values.SelectMany(item => item.Where(i => i.Data[117] == "CRT-U XTSE" && i.Data[225] == "20180727").Select(i => i.Id)); //var test5 = groupsM.Where(item => item.Value.Select(i => i.Id).Contains(58)).First().Key; //var test6 = groupsT.Where(item => item.Value.Select(i => i.Id).Contains(25382)).First().Key; //File.AppendAllText(@"C:\Users\MSBZ\Desktop\ex.txt", test5); //File.AppendAllText(@"C:\Users\MSBZ\Desktop\ex.txt", "*****"); //File.AppendAllText(@"C:\Users\MSBZ\Desktop\ex.txt", test6); var groups = from m in groupsM join t in groupsT on m.Key equals t.Key select ProcessGroup(m.Value, t.Value); var res = groups.SelectMany(r => r); if (res.Any()) { CompareTable.Data.AddRange(res); } PerfCounter.Stop("Process"); //extra PerfCounter.Start(); var masterExtra = GetExtraRows(masterTable, CompareTable.Data.Select(r => r.MasterRowID).Distinct()); var testExtra = GetExtraRows(testTable, CompareTable.Data.Select(r => r.TestRowID).Distinct()); CompareTable.AddExtraData(masterExtra); CompareTable.AddExtraData(testExtra); PerfCounter.Stop("Extra"); if (CompareTable.Extra.Count > 0) { File.WriteAllLines(@"C:\Users\MSBZ\Desktop\extra.txt", CompareTable.Extra); } //save to file string comparedRecordsFile = @"C:\Users\MSBZ\Desktop\comparedRecords.txt"; FillSummary(masterTable.RowsCount, testTable.RowsCount, CompareTable.Data.Count, CompareTable.Extra.Count); PerfCounter.Start(); CompareTable.SaveToFile(comparedRecordsFile); PerfCounter.Stop("Save comparison"); PerfCounter.SaveAllResults(); return(CompareTable); }