/// <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("");
		}
Beispiel #5
0
 public bool Equal(Parametrs parametrs)
 {
     return(x == parametrs.X && y == parametrs.Y);
 }
Beispiel #6
0
 public void Set(Parametrs parametrs)
 {
     x = parametrs.X;
     y = parametrs.Y;
     OnBegin();
 }
Beispiel #7
0
        // ОДНА ВАРИАЦИЯ
        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);
        }