// 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);
        }
Ejemplo n.º 2
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);
 }
Ejemplo n.º 4
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";
        }