Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
22.01.2025, 10:47:03
Начало Помощь Поиск Войти Регистрация
Новости: ООО «Скрин маркет системз», правообладатель программы «Система брокерского обслуживания «TRANSAQ» официально заявляет, что не ведет никакой деятельности в мессенджерах или социальных сетях. 
Подробности на нашем сайте  WWW.TRANSAQ.RU.

Просмотр сообщений

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - anest

Pages: [1]
1
TRANSAQ Connector / Re: Парсинг данных
« on: 24.05.2023, 05:48:05 »
   В варианте Switch Case написанном выше в дебаге xr.Name показывает , что пустой - "None" .
   Если убрать строку xr.Skip();  в default : , то начинают приходить данные в xr.Name , но вылетает ошибка : на секторе "SecCode" - исключение не обработано , метод ReadElementContentAsString не поддерживается для узлов типа EndElement. строка 1 , позиция 65 .

2
TRANSAQ Connector / Парсинг данных
« on: 22.05.2023, 02:31:12 »
  И снова здравствуйте ! 
 Долгое время использовал для парсинга строк данных конструкцией If  , в принципе всё устраивало , но решил немного модернизировать и использовать Switch case

public void Callback(Stream stream)
        {
            string section = "";
            string line = "";
            string str = "";
            string ename = "";
            string evalue = "";
            string attr = "";

            using (XmlReader xr = XmlReader.Create(stream))
            {
                while (xr.Read())
                {
                    switch (xr.NodeType)
                    {
                        case XmlNodeType.Element:
                        case XmlNodeType.EndElement:
                            ename = xr.Name; break;
                        case XmlNodeType.Text:
                        case XmlNodeType.CDATA:
                        case XmlNodeType.Comment:
                        case XmlNodeType.XmlDeclaration:
                            evalue = xr.Value; break;
                        case XmlNodeType.DocumentType:
                            ename = xr.Name; evalue = xr.Value; break;
                        default: break;
                    }
                    //................................................................................
                    // определяем узел верхнего уровня - "секцию"
                    if (xr.Depth == 0)
                    {
                        if (xr.NodeType == XmlNodeType.Element)
                        {
                            section = ename;

                            if ((section != "boards") && (section != "securities") && (section != "pits") && (section != "sec_info_upd"))
                            {
                                //Form_AddText(textForWindow);
                                //textForWindow = "";
                            }

                            //line = "";
                            str = "";
                            for (int i = 0; i < xr.AttributeCount; i++)
                            {
                                str = str + xr.GetAttribute(i) + ";";
                            }
                        }
                        if (xr.NodeType == XmlNodeType.EndElement)
                        {
                            //line = "";
                            //section = "";
                        }
                        if (xr.NodeType == XmlNodeType.Text)
                        {
                            str = str + evalue + ";";
                        }
                    }
                    //................................................................................
                    //................................................................................
                    // данные о статусе соединения с сервером
                    if (section == "server_status")
                    {
                        if (xr.NodeType == XmlNodeType.Element)
                        {
                            line = "";
                            str = "";
                            string attr_connected = xr.GetAttribute("connected");
                            if (attr_connected == "true") bConnected = true;
                            if (attr_connected == "false") bConnected = false;

                            for (int i = 0; i < xr.AttributeCount; i++)
                            {
                                attr = xr.GetAttribute(i);
                                str = str + i.ToString() + ":<" + attr + ">;";
                            }
                            line = "set server_status: " + str;
                        }

                        VolScanForm.StatusConnect_Handler(bConnected);

                        Console.WriteLine(" bConnected = " + bConnected);
                        Console.WriteLine(" xr.AttributeCount = " + xr.AttributeCount);
                        Console.WriteLine(line);
                    }
                    //-----------------------------------------------------------------------
                    if (section == "orders") //обрабатываем заявки
                    {
                        if (!(xr.Name == "order"))
                        {


                        }
                        else
                        {
                            transactionid = xr.GetAttribute("transactionid");
                            Console.WriteLine(" transactionid = " + transactionid);
                        }
                        //----------------------------------------------------------

                        if (xr.Name == "result")
                        {
                            Result = xr.ReadElementContentAsString();
                            Console.WriteLine(" Result = " + Result);

                        }
                        if (xr.Name == "orderno")
                        {
                            OrderNo = xr.ReadElementContentAsLong();
                            Console.WriteLine(" OrderNo = " + OrderNo);
                        }
                        if (xr.Name == "balance")
                        {
                            Balance = xr.ReadElementContentAsInt();
                            Console.WriteLine(" Balance = " + Balance);
                        }
                        if (xr.Name == "status")
                        {
                            Status = xr.ReadElementContentAsString();
                            Console.WriteLine(" status = " + Status);
                        }
                        if (xr.Name == "price")
                        {
                            GetPrice = xr.ReadElementContentAsString();
                            Console.WriteLine(" GetPrice = " + GetPrice);
                        }


                    }
                    //-----------------------------------------------------------------------
                    if (section == "ticks")
                    {
                        if (xr.Name == "board")
                        {
                            Board = xr.ReadElementContentAsString();
                        }
                        if (xr.Name == "seccode")
                        {
                            SecCode = xr.ReadElementContentAsString();
                        }
                        if (xr.Name == "tradeno")
                        {
                            TradeNo = xr.ReadElementContentAsLong();
                        }
                        if (xr.Name == "tradetime")
                        {
                            TradeTime = DateTime.Parse(xr.ReadElementContentAsString());
                        }
                        if (xr.Name == "price")
                        {
                            Price = xr.ReadElementContentAsDouble();
                        }
                        if (xr.Name == "quantity")
                        {
                            Quantity = xr.ReadElementContentAsInt();
                        }
                        if (xr.Name == "buysell")
                        {
                            BuySell = xr.ReadElementContentAsString();
                        }
                        if (xr.Name == "openinterest")
                        {
                            OpenInterest = xr.ReadElementContentAsInt();
                        }
               }
            }
            Меняю на Switch Case ,  не работает , данные не считываются . Может , кто подскажет , что делаю не правильно . Break пробовал менять на Case goto , результата тоже нет .

switch (xr.Name)
            {
                case "board":
                    Board = xr.ReadElementContentAsString();
                    break;
                case "seccode":
                    SecCode = xr.ReadElementContentAsString();
                    break;
                case "tradeno":
                    TradeNo = xr.ReadElementContentAsLong();
                    break;
                case "tradetime":
                    TradeTime = DateTime.Parse(xr.ReadElementContentAsString());
                    break;
                case "price":
                    Price = xr.ReadElementContentAsDouble();
                    break;
                case "quantity":
                    Quantity = xr.ReadElementContentAsInt();
                    break;
                case "buysell":
                    BuySell = xr.ReadElementContentAsString();
                    break;
                case "openinterest":
                    OpenInterest = xr.ReadElementContentAsInt();
                    break;
                default:
                    xr.Skip();
                    break;
            }


3
 Здравствуйте Сергей .
 Да , всё правильно поняли . Спасибо за оперативную помощь . Заработало всё  как надо .

4
  Здравствуйте !
Не подскажите , как организовать  запрос по получению данных по нескольким тикерам (section == "ticks") одновременно ?

Pages: [1]


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!