public override bool Equals(object obj) { Item_flat flat = obj as Item_flat; bool EqOwners = true; if (owners.Count == flat.owners.Count) { for (int i = 0; i < owners.Count; i++) { if (!owners[i].Equals(flat.owners[i])) { EqOwners = false; } } } else { EqOwners = false; } return(address == flat.address && numberOfFlat == flat.numberOfFlat && area == flat.area && EqOwners); }
//Извлечение XML из архивов public static void UnZip(List <string> FileNames, bool NeedRename, ref ProgressBar progressBar) { //Временная директориz и папка для сохранения string home = Directory.GetCurrentDirectory() + "\\"; string temp = home + "__tmp__"; string target = home + "\\Распакованные файлы\\"; try { Directory.CreateDirectory(temp); Directory.CreateDirectory(target); } catch { } foreach (string arhive_1lvl in FileNames) { progressBar.Value++; //прогресс бар try { clrDir(temp); //чистим временную папку ZipFile.ExtractToDirectory(arhive_1lvl, temp); //распаковываем основной архив //Распаковка вложениых архивов foreach (string arhive_1lv2 in Directory.EnumerateFiles(temp, "*.zip", SearchOption.AllDirectories)) { //РАзархивация ZipFile.ExtractToDirectory(arhive_1lv2, temp); //Получили XML foreach (string xml_filename in Directory.EnumerateFiles(temp, "*.xml", SearchOption.AllDirectories)) { //Выгрузка Item_flat flat = XmlProcessing(XDocument.Load(xml_filename)); if (NeedRename) { File.Copy(xml_filename, target + flat.address + ", " + flat.numFlat + ".xml"); } else { File.Copy(xml_filename, target + Path.GetFileName(xml_filename)); } } } } catch { } } //Удаление временной дериктории if (Directory.Exists(temp)) { clrDir(temp); try { Directory.Delete(temp); } catch { } } }
public object Clone() { Item_flat flat = new Item_flat(); flat.addressWithDot = this.addressWithDot; flat.number = this.number; flat.address = this.address; flat.numberOfFlat = this.numberOfFlat; flat.area = this.area; flat.owners = this.owners; return(flat); }
public int CompareTo(object Flat) { const string eror = "Сравниваемый объект не пренадлежит классу Item_flat."; Item_flat flat = Flat as Item_flat; if (numberOfFlat < flat.numberOfFlat) { return(-1); } if (numberOfFlat == flat.numberOfFlat) { return(0); } if (numberOfFlat > flat.numberOfFlat) { return(1); } throw new ArgumentException(eror); }
//Переименование Xml файлов public static void RenameFiles(List <string> FileNames, string Target, string Type, ref ProgressBar progressBar, bool SaveDuplicate = false) { //Временная директориz и папка для сохранения string target = Target + "Переименованные файлы\\"; //Решение проблем с прошлой итерацией while (Directory.Exists(target)) { target += "Новые Переименованные файлы\\"; } try { Directory.CreateDirectory(target); } catch { } string temp = target + "__tmp__"; if (Type == ".zip") { Directory.CreateDirectory(temp); } if (FileNames.Count() > 0) { foreach (string filename in FileNames) { progressBar.Value++; //прогресс бар //Получение данных об объекте Item_flat flat = new Item_flat(); if (Type == ".xml") { flat = XmlProcessing(XDocument.Load(filename)); } if (Type == ".zip") { try { clrDir(temp); //чистим временную папку ZipFile.ExtractToDirectory(filename, temp); //распаковываем основной архив //Распаковка вложениых архивов foreach (string arhive_1lv2 in Directory.EnumerateFiles(temp, "*.zip", SearchOption.AllDirectories)) { ZipFile.ExtractToDirectory(arhive_1lv2, temp); //Получили XML foreach (string xml_filename in Directory.EnumerateFiles(temp, "*.xml", SearchOption.AllDirectories)) { flat = XmlProcessing(XDocument.Load(xml_filename)); } } } catch { } } bool SaveThis = true; // нужно ли ещё сохранять этот файл //Устранение непригодных символов string newName = ""; foreach (char ch in flat.address + ", " + flat.numFlat + Type) { if (ch == '/') { newName += '-'; } else { newName += ch; } } if (File.Exists(target + newName)) { try { Item_flat taretFlat = XmlProcessing(XDocument.Load(target + newName)); if (!flat.Equals(taretFlat)) { File.Copy(filename, target + "Другой " + newName); continue; } else if (SaveDuplicate) { if (File.Exists(target + "Дубликат " + newName)) { continue; } File.Copy(filename, target + "Дубликат " + newName); continue; } } catch { continue; } } //копирование try { if (SaveThis) { File.Copy(filename, target + newName); } } catch { } } } if (Directory.Exists(temp)) { clrDir(temp); try { Directory.Delete(temp); } catch { } } }
//Переименование Xml файлов public static void RenameXML(List <string> FileNames, string Target, ref ProgressBar progressBar, bool SaveDuplicate = false) { //Временная директориz и папка для сохранения string target = Target + "Переименованные файлы\\"; //Решение проблем с прошлой итерацией while (Directory.Exists(target)) { target += "Новые Переименованные файлы\\"; } try { Directory.CreateDirectory(target); } catch { } if (FileNames.Count() > 0) { foreach (string xml_filename in FileNames) { progressBar.Value++; //прогресс бар //Получение данных об объекте Item_flat flat = XmlProcessing(XDocument.Load(xml_filename)); bool SaveThis = true; // нужно ли ещё сохранять этот файл //Устранение непригодных символов string newName = ""; foreach (char ch in flat.address + ", " + flat.numFlat + ".xml") { if (ch == '/') { newName += '-'; } else { newName += ch; } } if (File.Exists(target + newName)) { try { Item_flat taretFlat = XmlProcessing(XDocument.Load(target + newName)); if (!flat.Equals(taretFlat)) { File.Copy(xml_filename, target + "Другой " + newName); continue; } else if (SaveDuplicate) { if (File.Exists(target + "Дубликат " + newName)) { continue; } File.Copy(xml_filename, target + "Дубликат " + newName); continue; } } catch { continue; } } //копирование try { if (SaveThis) { File.Copy(xml_filename, target + newName); } } catch { } } } }
//Обработка XML, создание записи по квартире public static Item_flat XmlProcessing(XDocument xDoc) { //Разделитель точка (для перевода строк в Double) NumberFormatInfo provider = new NumberFormatInfo(); provider.NumberDecimalSeparator = "."; //Данные по помещению string number_flat_string = ""; string address = ""; //Адрес string addressWithDot = ""; //Дополнительно int number_flat = 0; //Номер помещения double area = 0; //Площадь List <Owner> Owners = new List <Owner>(); //Список владельцев //Получаем корень XElement root = xDoc.Root; //Все узлы в документе. Перебираем IEnumerable <XElement> all_nodes = root.Descendants(); foreach (XElement node in all_nodes) { switch (node.Name.LocalName) { // ---Адрес--- case ("Address"): { foreach (XElement node_adr in node.Nodes()) { switch (node_adr.Name.LocalName) { case ("Street"): address += node_adr.Attribute("Type").Value + " "; address += node_adr.Attribute("Name").Value + ", "; addressWithDot += node_adr.Attribute("Type").Value + ". "; addressWithDot += node_adr.Attribute("Name").Value + ", "; break; case ("Level1"): address += node_adr.Attribute("Type").Value + " "; address += node_adr.Attribute("Value").Value + ", "; addressWithDot += node_adr.Attribute("Type").Value + ". "; addressWithDot += node_adr.Attribute("Value").Value + ", "; break; case ("Level2"): address += node_adr.Attribute("Type").Value + " "; address += node_adr.Attribute("Value").Value + ", "; addressWithDot += node_adr.Attribute("Type").Value + ". "; addressWithDot += node_adr.Attribute("Value").Value + ", "; break; case ("Level3"): address += node_adr.Attribute("Type").Value + " "; address += node_adr.Attribute("Value").Value; addressWithDot += node_adr.Attribute("Type").Value + ". "; addressWithDot += node_adr.Attribute("Value").Value + ", "; break; case ("Apartment"): //номер квартиры number_flat_string = node_adr.Attribute("Value").Value + " кв."; try { number_flat = Convert.ToInt32(node_adr.Attribute("Value").Value); } catch { number_flat = Int32.MaxValue; /* //Console.WriteLine(" Плохой номер помещения. "); */ } break; case ("Other"): //что-то другое string type = "", analise = ""; //Временные строки if (node_adr.Value.Length > 12 && node_adr.Value.Length < 30 && node_adr.Value.Substring(0, 12) == "машино-место") { type = "м/м"; analise = node_adr.Value.Substring(12); } else if (node_adr.Value.Substring(node_adr.Value.Length - 3) == "м/м") { type = "м/м"; if (node_adr.Value.Length < 12) { analise = node_adr.Value.Substring(0, node_adr.Value.Length - 3); } else { analise = node_adr.Value.Substring(node_adr.Value.Length - 22); } } if (type == "м/м") { //Выдераем "a/b" bool notOne = false; string number = ""; int num = 0, den = 0; foreach (char ch in analise) { if (Char.IsNumber(ch)) { number += ch; } else if (num != 0) { den = Convert.ToInt32(number); break; } else if (ch == ',' && number != "") { number_flat_string += number + ","; number = ""; notOne = true; } else if (ch == '/' && number != "") { num = Convert.ToInt32(number); number = ""; } } //Вносим в ячейку number_flat = 5000 + den * 400 + num; if (notOne) { number_flat = 5000 + den * 400; //Переделываем } number_flat_string += num + "/" + den + " " + type; } break; default: break; } } break; } //Конец блока адреса //---Площадь--- case ("Area"): { if (node.Parent.Name.LocalName == "Flat" && node.Parent.Parent.Name.LocalName != "Flats" || node.Parent.Name.LocalName == "Building" && node.Parent.Parent.Name.LocalName != "Buildings") { string s = node.Value; area = Convert.ToDouble(s, provider); } break; } //---Собственность--- case ("Rights"): { //Определение собственности foreach (XElement right in node.Elements()) { //Документ на собственность string document = ""; string part = ""; //Доля double partOf = 0; //Размер доли try { foreach (XElement registration in right.Elements()) { if (registration.Name.LocalName == "Registration") { foreach (XElement reg in registration.Elements()) { if (reg.Name.LocalName == "RegNumber") { document += "№ " + reg.Value; } } foreach (XElement reg in registration.Elements()) { if (reg.Name.LocalName == "RegDate") { document += ", " + reg.Value; } } } } foreach (XElement point in right.Elements()) { if (point.Name.LocalName == "Share") { int num = Convert.ToInt32(point.Attribute("Numerator").Value); int den = Convert.ToInt32(point.Attribute("Denominator").Value); part += num + " / " + den; partOf = area * (double)num / (double)den; } } foreach (XElement point in right.Elements()) { if (point.Name.LocalName == "Name") { document += ", " + point.Value; if (part == "") { if (point.Value == "Собственность") { part = "1"; partOf = area; } if (point.Value == "Общая совместная собственность") { part = "*"; } } } } } catch { } //Собственники string FIO = ""; //Ф.И.О try { foreach (XElement owners in right.Elements()) { if (owners.Name.LocalName == "Owners") { foreach (XElement owner in owners.Elements()) { if (owner.Name.LocalName == "Owner") { foreach (XElement person in owner.Elements()) { if (person.Name.LocalName == "Person") { foreach (XElement point in person.Elements()) { if (point.Name.LocalName == "FamilyName") { FIO += point.Value + " "; } } foreach (XElement point in person.Elements()) { if (point.Name.LocalName == "FirstName") { FIO += point.Value + " "; } } foreach (XElement point in person.Elements()) { if (point.Name.LocalName == "Patronymic") { FIO += point.Value + " "; } } // Записываем собственника Owners.Add(new Owner(FIO, part, Convert.ToString(Math.Round(partOf, 2)), document)); FIO = ""; } else if (person.Name.LocalName == "Governance") { foreach (XElement point in person.Elements()) { if (point.Name.LocalName == "Name") { FIO += point.Value + " "; } } // Записываем государственного собственника Owners.Add(new Owner(FIO, part, Convert.ToString(Math.Round(partOf, 2)), document)); FIO = ""; } } } } } } } catch { } } break; } //Конец поиска блока Rights (собственники) default: break; } }//Окончание перебора узлов документа foreach (Owner owner in Owners) { if (owner.part == "*") { owner.part = "1/" + Owners.Count() + "*"; owner.partOf = Convert.ToString(area * (double)1 / (double)Owners.Count()) + "*"; } } Item_flat flat_temp = new Item_flat(address, number_flat, area, Owners); flat_temp.numFlat = number_flat_string; flat_temp.addressWithDot = addressWithDot; return(flat_temp); //Конец XmlProcessing }