/// <summary> /// Получат Ф-ия получает для ind-ого элемента. /// </summary> /// <param name="listXml">Список XML-тэгов</param> /// <param name="ind">Номер тэга</param> /// <param name="p">Параметр (пишется результат)</param> private void GetParent(ArrayList listXml, int ind, Parametrs p) { //Parametrs p = new Parametrs(); //Ф-ия получает потомка для i-ого элемента. int count = 1; int i = ind -1; while (i >= 0) { XmlNodeValue nd = (XmlNodeValue)listXml[i]; if (nd.type == XmlNodeType.EndElement) count++; else if (nd.type == XmlNodeType.Element && nd.value != null) count--; if (count == 0) { p.parentname = nd.name; p.parenttype = nd.type; break; } i--; } }
/// <summary> /// Пишет текущий узел /// </summary> /// <param name="node">Узел</param> /// <param name="isSingle">Single или Array</param> /// <param name="parent">Параметры</param> private void Write(Node node, bool isSingle, Parametrs parent) { int id = 0; for (int i=0;i<node.listXml.Count;i++) { XmlNodeValue val = (XmlNodeValue) node.listXml[i]; if (val.value == null) { //тада пишем Child int count = 0; Child ch = (Child) node.list[id]; //Здесь должна быть обработка и вставка конструкций XSLT if (xsd.isSingle(ch.value) && ch.child.listXml.Count != 0) { //count = WriteXSLT(node, id, i); Parametrs p = new Parametrs(); p.parent = ch.value; p.attr = ch.child.att; p.isEmpty = false; p.parentname = null; Write(ch.child ,true, p); } else if (ch.child.listXml.Count == 0 && xsd.isSingle(ch.value)) { //count = WriteXSLT(node, id, i); Parametrs p = new Parametrs(); p.parent = ch.value; p.attr = ch.child.att; //надо выбрать настоящего предка... /*Parametrs p1 =*/ GetParent(node.listXml, i, p); /*p.parentname = p1.parentname; p.parenttype = p1.parenttype;*/ //p.parentname = ((XmlNodeValue) node.listXml[i-1]).name; //p.parenttype = ((XmlNodeValue) node.listXml[i-1]).type; p.isEmpty = true; WriteXSLT(p); } else { //else - (isSingle=false) count = WriteXSLT(node, id, i); Write(ch.child, false); isSingle = false; } //Здесь должна быть обработка и вставка конструкций XSLT for (int k=0;k<count;k++) tw.WriteEndElement(); id++; } else { switch (val.type) { case XmlNodeType.Element: { tw.WriteStartElement(val.name); }break; case XmlNodeType.EndElement: { if (isSingle) { parent.parentname = val.name; bool res = WriteXSLT(parent); if (res) isSingle = false; } /*if (val.name == "w:t" && isSingle) { //tw.WriteStartElement("xsl:value-of"); //tw.WriteAttributeString("select","value"); //tw.WriteEndElement(); string value = parent.parent; tw.WriteString(value); if (parent.attr!= null) { tw.WriteString(parent.attr.Count.ToString()); } isSingle = false; }*/ tw.WriteEndElement(); }break; case XmlNodeType.Attribute: { tw.WriteAttributeString(val.name,val.value); }break; case XmlNodeType.Text: { tw.WriteString(val.value); }break; } } } }
/// <summary> /// Нужен для вствки значений пустых тегов, т.е. если в XSD-тэге пусто, то туда необходимо добавить нужные теэги для вывода строки в WORD /// </summary> /// <param name="p"></param> /// <returns></returns> private bool WriteXSLT(Parametrs p) { bool res = false; if (p.parentname == "w:p") { if (p.parenttype == XmlNodeType.EndElement) tw.WriteStartElement("w:p"); tw.WriteStartElement("w:r"); tw.WriteStartElement("w:t"); WriteString(p); tw.WriteEndElement(); tw.WriteEndElement(); if (p.parenttype == XmlNodeType.EndElement) tw.WriteEndElement(); res = true; }else if (p.parentname == "w:r") { if (p.parenttype == XmlNodeType.EndElement) tw.WriteStartElement("w:r"); tw.WriteStartElement("w:t"); WriteString(p); tw.WriteEndElement(); if (p.parenttype == XmlNodeType.EndElement) tw.WriteEndElement(); res = true; }else if(p.parentname == "w:t") { if (p.parenttype == XmlNodeType.EndElement) tw.WriteStartElement("w:t"); WriteString(p); if (p.parenttype == XmlNodeType.EndElement) tw.WriteEndElement(); res = true; } return res; }
/// <summary> /// Пишет строку в файл: xsl:value-of( /// А так же делает необходимое форматирование числа и даты /// </summary> /// <param name="p"></param> private void WriteString(Parametrs p) { //tw.WriteString(p.parent); //tw.WriteWhitespace(""); tw.WriteStartElement("xsl:value-of"); bool exit = false; for (int i=0;i<p.attr.Count;i++) { XmlNodeValue val = (XmlNodeValue)p.attr[i]; if (val.name.IndexOf("formatting_number") != -1 && !exit) { tw.WriteAttributeString("select", "format-number(" + p.parent + ",'" + val.value + "')"); exit = true; } else if (val.name.IndexOf("formatting_date") != -1 && !exit) { tw.WriteAttributeString("select", "format-date(xs:date(" + p.parent + "),'" + val.value + "')"); exit = true; } } if (!exit) { tw.WriteAttributeString("select", p.parent); } tw.WriteEndElement(); //tw.WriteWhitespace(""); }
public bool Equal(Parametrs parametrs) { return(x == parametrs.X && y == parametrs.Y); }
public void Set(Parametrs parametrs) { x = parametrs.X; y = parametrs.Y; OnBegin(); }
// ОДНА ВАРИАЦИЯ static void Main(string[] args) { /// **** ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ *** /// TimeSpan Point1, Point2, Point3; // точки засекания времени int Index_Senhronizacii = 1; // индекс синхронизации стадий прохождения портфеля торговых систем int Index_Stadii = Index_Senhronizacii + 1; // индекс стадий торговых систем // всего 6 стадий, соответствующих классу Robot // СТАВКИ НА СИСТЕМУ Stavka Stavka = new Stavka(); // создаем экземпляр структуры типа Parametrs Parametrs_Stavka St = new Parametrs_Stavka(); // объявляем класс по заполнению экземпляра Stavka = St.Inicializaciz(); // присваиваем данные экземпляру Stavka /// **** ВАРИАЦИИ *** /// // ОБЪЯВЛЕНИЕ ВАРИАЦИЙ #1 Si_1min_30 Parametrs Si_1min_30 = new Parametrs(); // создаем экземпляр структуры типа Parametrs Parametrs_Si_1min_30 Var_Si_1min_30 = new Parametrs_Si_1min_30(); // объявляем класс по заполнению экземпляра структуры Var_Si_1min_30 с типом данных Parametrs Si_1min_30 = Var_Si_1min_30.Inicializaciz(); // присваиваем данные экземпляру Si_1min_30 Class_Robot R01 = new Class_Robot(); // создаем клон робота с парамерами Si_1min_30 int indexR01 = 1; // переменная стадий работы робота Si_1min_30 decimal[] Chislo_out_Si_1min_30 = new decimal[10]; // массив дублирования считанных котировок int index_Dubler_Si_1min_30 = 0; // индекс дублирования котировок (0-нет дублирования, 1 - дублирует). int index_end_file_Si_1min_30 = 0; // индекс конца текстового файла /// **** КОД ЗАПУСКА *** /// // ЗАПУСКАЕМ РОБОТОВ Point1 = DateTime.Now.TimeOfDay; while (Index_Senhronizacii != 6) { if (Index_Senhronizacii != Index_Stadii) { indexR01 = R01.Inicialisacion_Massiv(indexR01, index_Dubler_Si_1min_30, ref index_end_file_Si_1min_30, ref Chislo_out_Si_1min_30, Si_1min_30, Stavka.ST_SBER_1min_032); // запускаем версию робота #Si_1min_30 } if (indexR01 == Index_Stadii) // когда все портфели торговых систем сравняются в одной стадии, переходим на новую стадию { Index_Senhronizacii++; Index_Stadii++; } Point2 = DateTime.Now.TimeOfDay; Point3 = Point2 - Point1; Console.Clear(); // очищаем экран Console.WriteLine("Время в работе:" + " " + Point3); } Point2 = DateTime.Now.TimeOfDay; Point3 = Point2 - Point1; Console.Clear(); Console.WriteLine("Прогрузка файла с настройками завершена:" + " " + Point3); }