// Beginn eigner Code /// <summary> /// Vergleicher auf Wertebene /// </summary> /// <param name="y"></param> /// <returns></returns> public int CompareTo(MSR y) { BinaryFormatter formatter = new BinaryFormatter(); using (MemoryStream memoryStreamX = new MemoryStream()) { using (MemoryStream memoryStreamY = new MemoryStream()) { formatter.Serialize(memoryStreamX, this); formatter.Serialize(memoryStreamY, y); var binaryArrayX = memoryStreamX.GetBuffer(); var binaryArrayY = memoryStreamY.GetBuffer(); if (binaryArrayX.Length != binaryArrayY.Length) { return(binaryArrayX.Length.CompareTo(binaryArrayY.Length)); } for (int i = 0; i < binaryArrayX.Length; i++) { if (binaryArrayX[i] != binaryArrayY[i]) { return(binaryArrayX[i].CompareTo(binaryArrayY[i])); } } } } return(0); }
/// <summary> /// laden der Comos XML /// </summary> /// <returns>class MSR Rückgabe aller Gerätedaten</returns> private MSR xmlComosLoad(string comosXmlFilename) { MSR outData = new MSR(); // Prüfen ob Dateien existiert if (string.IsNullOrEmpty(comosXmlFilename) || !File.Exists(comosXmlFilename)) { MessageBox.Show("Es wurde keine Datei gewählt"); } else { this.Title = "COMOS Datendatei wird eingelesen"; //Datei laden XmlSerializer serializer = new XmlSerializer(typeof(MSR)); FileStream fs = new FileStream(comosXmlFilename, FileMode.Open); outData = (MSR)serializer.Deserialize(fs); //filestream schliesen fs.Close(); } return(outData); }
/// <summary> /// eigener Vergleicher überschrieben Equals /// </summary> /// <param name="other"></param> /// <returns></returns> public bool Equals(MSR other) { return(this.CompareTo(other) == 0); }
// ab hier Vergleich COMOS /// <summary> /// Vergelich Comos Daten Listen /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnComosCompare_click(object sender, RoutedEventArgs e) { this.Title = "Start Vergleich neu gegen alte COMOS Daten"; MSR comosDataOld = new MSR(); MSR comosDataNew = new MSR(); comosDataOld = xmlComosLoad(tbopenComosContent_Old.Text); comosDataNew = xmlComosLoad(tbopenComosContent_New.Text); // Gleichheit Signale var list3 = comosDataNew.MSR_Gerät.Intersect(comosDataOld.MSR_Gerät, new KeyEqualityComparer <MSRMSR_Gerät>(s => s.Signale)); foreach (var item in list3) { Console.WriteLine(item.TAG_NAME); } // Ungleichheit Signale Index 0 var list4 = comosDataNew.MSR_Gerät.Except(comosDataOld.MSR_Gerät, new KeyEqualityComparer <MSRMSR_Gerät>(s => s.Signale[0].Signal)); // ungleichheit HW Kartentyp var list5 = (comosDataNew.MSR_Gerät.Except(comosDataOld.MSR_Gerät, new KeyEqualityComparer <MSRMSR_Gerät>(s => s.Signale[0].HW_Anbindung.Kartentyp))).ToList(); foreach (var item in list4) { // Console.WriteLine(item.TAG_NAME); } // Ausgabe aller Datensätze die geänderte Feldgeräte haben //funktioniert var vrglResultHW = from x in comosDataNew.MSR_Gerät join y in comosDataOld.MSR_Gerät on new { x.TAG_NAME, x.Hersteller, x.Gerät } equals new { y.TAG_NAME, y.Hersteller, y.Gerät } select x; // Ausgabe aller Datensätze die nicht in der vorherigen Liste enthalten waren var result = from x in comosDataNew.MSR_Gerät where !(from y in vrglResultHW select y.TAG_NAME).Contains(x.TAG_NAME) select x.TAG_NAME; //Ausgabe in Datei List <string> dataOutput = new List <string>(); foreach (var item in result) { dataOutput.Add(item); } string outputXMlfile = (string.Format(outputDirectory + "\\Vergleich_unterschiedliche_Feldgeräte_{0}{1}{2}.xml", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)); writeXmlTagList(outputXMlfile, dataOutput); // Ausgabe der Daten die in neuer und alter Liste sind // Liste aus beiden Datensätzen bauen var listTagEqual = from x in comosDataNew.MSR_Gerät join y in comosDataOld.MSR_Gerät on x.TAG_NAME equals y.TAG_NAME orderby x.TAG_NAME select new MSRMSR_Gerät_Vergleicher { Daten_new = x, Daten_old = y }; // Ausgabe der TAG-Nummern mit geänderten Datensätzen List <string> dataOutputÄnderung = new List <string>(); foreach (var item in listTagEqual) { if ((item.Daten_new.Equals(item.Daten_old)) == false) { dataOutputÄnderung.Add(item.Daten_new.TAG_NAME); } } outputXMlfile = (string.Format(outputDirectory + "\\Vergleich_unterschiedliche_Datensätze_{0}{1}{2}.xml", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)); writeXmlTagList(outputXMlfile, dataOutputÄnderung); // Ausgabe der TAG-Nummern mit geänderter Hardware List <string> dataOutputÄnderungHW = new List <string>(); foreach (var item in listTagEqual) { for (int i = 0; i < item.Daten_new.Signale.Count(); i++) { if (item.Daten_new.Signale[i].Signal != null) { if (item.Daten_old.Signale[i].Signal == null) //wenn es im alten Datensatz nicht das Signal gibt { dataOutputÄnderungHW.Add(item.Daten_new.TAG_NAME); continue; } else if ((item.Daten_new.Signale[i].HW_Anbindung.Equals(item.Daten_old.Signale[i].HW_Anbindung)) == false) { dataOutputÄnderungHW.Add(item.Daten_new.TAG_NAME); } continue; } else { continue; } } } outputXMlfile = (string.Format(outputDirectory + "\\Vergleich_unterschiedliche_HW_Anbindung_{0}{1}{2}.xml", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)); writeXmlTagList(outputXMlfile, dataOutputÄnderungHW); //Ausgabe der neuen Tag-Nummern var listTagNeu = from x in comosDataNew.MSR_Gerät where !(from y in comosDataOld.MSR_Gerät select y.TAG_NAME).Contains(x.TAG_NAME) select x; // Ausgabe der TAG-Nummern mit geänderten Datensätzen List <string> dataOutputNeueTag = new List <string>(); foreach (var item in listTagNeu) { dataOutputNeueTag.Add(item.TAG_NAME); } outputXMlfile = (string.Format(outputDirectory + "\\Vergleich_neue_Datensätze_{0}{1}{2}.xml", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)); writeXmlTagList(outputXMlfile, dataOutputNeueTag); this.Title = "Vergleich ist fertig"; }