Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
 public CompareTable(IWorkTable masterTable, IWorkTable testTable, List <int> idColumns)
 {
     Data        = new List <ComparedRow>();
     Extra       = new List <string>();
     MasterTable = masterTable;
     TestTable   = testTable;
     IdColumns   = idColumns;
 }
Ejemplo n.º 4
0
        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);
        }