public void GenerateOFile(string leftFilePath, string rightFilePath, string ignoreCols, string keyCols, string outFilePath) { string leftFile = ""; using (StreamReader sr = new StreamReader(leftFilePath, Encoding.UTF8)) { leftFile = sr.ReadToEnd(); } string rightFile = ""; using (StreamReader sr = new StreamReader(rightFilePath, Encoding.UTF8)) { rightFile = sr.ReadToEnd(); } ResGroup resGroup1 = GenerateResGroup(leftFile); resGroup1.name = getNameAndKey(leftFilePath); ResGroup resGroup2 = GenerateResGroup(rightFile); resGroup2.name = getNameAndKey(rightFilePath); IgnoreList igList = GenerateIgnoreList(ignoreCols); // todo CompareGroup comGroup = CompareResult(resGroup1, resGroup2, igList, keyCols); string outStr = ConvertCompareGroup(comGroup); File.WriteAllText(outFilePath, outStr, Encoding.UTF8); }
private string ConvertCompareGroup(CompareGroup comGroup) { int thick = comGroup.thick(); string colKeys = ""; List <string> vecKeyValue1 = new List <string>(); List <string> vecKeyValue2 = new List <string>(); string columns = ""; List <string> vecValue1 = new List <string>(); List <string> vecValue2 = new List <string>(); for (int i = 0; i < thick; ++i) { vecKeyValue1.Add(""); vecKeyValue2.Add(""); vecValue1.Add(""); vecValue2.Add(""); } foreach (var it in comGroup.comKeys) { if (colKeys != "") { colKeys += ","; } colKeys += fill(it.col, it.length()); for (int i = 0; i < thick; ++i) { if (vecKeyValue1[i] != "") { vecKeyValue1[i] += ","; } vecKeyValue1[i] += fill(it.vecStr1[i], it.length()); if (vecKeyValue2[i] != "") { vecKeyValue2[i] += ","; } vecKeyValue2[i] += fill(it.vecStr2[i], it.length()); } } foreach (var it in comGroup.comUnits) { columns += fill(it.col, it.length()); columns += ","; for (int i = 0; i < thick; ++i) { vecValue1[i] += fill(it.vecStr1[i], it.length()); vecValue1[i] += ","; vecValue2[i] += fill(it.vecStr2[i], it.length()); vecValue2[i] += ","; } } if (columns == "") { return(""); } string str = colKeys + ";" + columns + "\r\n"; for (int i = 0; i < vecValue1.Count; ++i) { str += vecKeyValue1[i] + ";" + vecValue1[i] + "\r\n"; str += vecKeyValue2[i] + ";" + vecValue2[i] + "\r\n"; } return(str); }
private CompareGroup CompareResult(ResGroup rsGroup1, ResGroup rsGroup2, IgnoreList igList, string comKeys) { CompareGroup comGroup = new CompareGroup(); if (!rsGroup1.isValid() || !rsGroup2.isValid()) { throw new Exception("resGroup Invalid"); } if (rsGroup1.size() != rsGroup2.size()) { throw new Exception("res1 && res2 size Invalid"); } int szOfGroup = rsGroup1.size(); for (int i = 0; i < szOfGroup; ++i) { if (rsGroup1.columns[i] != rsGroup1.columns[i]) { throw new Exception("columns not matched."); } } if (rsGroup1.colValues.Count != rsGroup2.colValues.Count) { string exMsg = "record size not match," + rsGroup1.name + "=" + rsGroup1.colValues.Count.ToString() + " is not equal to " + rsGroup2.name + "=" + rsGroup2.colValues.Count.ToString(); throw new Exception(exMsg); } List <string> keys = comKeys.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList(); for (int i = 0; i < rsGroup1.colValues.Count; ++i) { for (int j = 0; j < szOfGroup; ++j) { if (comKeys != "") { foreach (var it in keys) { if (it == rsGroup1.columns[j]) { CompareUnit ck = comGroup.getColKey(it); if (ck == null) { ck = new CompareUnit(it); comGroup.comKeys.Add(ck); } ck.vecStr1[i] = rsGroup1.colValues[i][j]; ck.vecStr2[i] = rsGroup2.colValues[i][j]; } } } if (rsGroup1.colValues[i][j] == rsGroup2.colValues[i][j]) { continue; } if (igList.HasValue(rsGroup1.columns[j]) && rsGroup1.colValues[i][j] != "" && rsGroup2.colValues[i][j] != "") { continue; } CompareUnit cu = comGroup.getColUnit(rsGroup1.columns[j]); if (cu == null) { cu = new CompareUnit(rsGroup1.columns[j]); comGroup.comUnits.Add(cu); } cu.vecStr1[i] = rsGroup1.colValues[i][j]; cu.vecStr2[i] = rsGroup2.colValues[i][j]; } } return(comGroup); }