Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# qSharp股票报价器工厂订阅_C#_Kdb_Q Lang_Exxeleron Q - Fatal编程技术网

C# qSharp股票报价器工厂订阅

C# qSharp股票报价器工厂订阅,c#,kdb,q-lang,exxeleron-q,C#,Kdb,Q Lang,Exxeleron Q,我目前正试图使用qsharp订阅我的tickerplant,但是当我试图获取消息数据时,我只得到要返回的System.Int64[]或System.object[],如下所示: C#代码取自样本: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using NetMQ; using System.Text.RegularEx

我目前正试图使用qsharp订阅我的tickerplant,但是当我试图获取消息数据时,我只得到要返回的
System.Int64[]
System.object[]
,如下所示:

C#代码取自样本:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using NetMQ;
using System.Text.RegularExpressions;
using qSharp;
namespace SubscribeToData
{
    class Program
    {
        static void Main(string[] args)
        {
            QCallbackConnection q = new QCallbackConnection("localhost", 5005);
            try
            {

                Console.WriteLine("conn: " + q + "  protocol: " + q.ProtocolVersion);
                Console.WriteLine("Press <ENTER> to close application");
                q.DataReceived += OnData;
                q.ErrorOccured += OnError;
                q.Open();
                Console.WriteLine("conn: " + q + "  protocol: " + q.ProtocolVersion);
                Console.WriteLine("Press <ENTER> to close application");
                Object response = q.Sync(".u.sub", "trade", ""); // subscribe to tick
                QTable model = (QTable)((Object[])response)[1]; // get table model
                Console.WriteLine(model);
                q.StartListener();
                Console.ReadLine();
                q.StopListener();
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("Error occured: " + e);
                Console.ReadLine();
            }
            finally
            {
                q.Close();
            }



        }
        static void OnData(object sender, QMessageEvent message)
        {
            Object data = message.Message.Data;
            Console.WriteLine(sender);
            Console.WriteLine(message.Message.Data);
            Console.WriteLine("message type: " + message.Message.MessageType + " size: " + message.Message.MessageSize + " isCompressed: " + message.Message.Compressed + " endianess: " + message.Message.Endianess);
            PrintResult(message.Message.Data);
            if (data is Object[])
            {
                 Console.WriteLine("TEST");
                Console.WriteLine(message);
                // unpack upd message
                Object[] args = ((Object[])data);
                Console.WriteLine("testargs");
                Console.WriteLine(args[0].ToString());
                Console.WriteLine(args[1]);
                Console.WriteLine(args[2].GetType());
                Console.WriteLine(data);
                if (args.Length == 3 && args[0].Equals("upd") && args[2] is QTable)
                {
                    QTable table = (QTable)args[2];
                    foreach (QTable.Row row in table)
                    {
                        Console.WriteLine(row);
                    }
                }
            }
        }
        static void PrintResult(object obj)
        {
            if (obj == null)
            {
                Console.WriteLine("::");
            }
            else if (obj is QDictionary)
            {
                PrintResult(obj as QDictionary);
            }
            else
            {
                Console.WriteLine(obj);
            }
        }
        static void PrintResult(QDictionary d)
        {
            foreach (QDictionary.KeyValuePair e in d)
            {
                Console.WriteLine(e.Key + "| " + e.Value);
            }
        }
        static void OnError(object sender, QErrorEvent error)
        {
            Console.Error.WriteLine("Error received via callback: " + error.Cause.Message);
        }
    }
我使用

.u.pub[`trade;2,2,2,2,2,1,1,1,1]

现在的问题是,它似乎确实收到了
QMessage
,但只是解析不正确?

我不清楚您的问题是什么……。您正在发布一个long(int64)列表,而您正在接收一个int64列表。您是否希望收到QTable类型?但是您还没有从tickerplant发布QTable尝试从tickerplant发布一个表,即u.pub[`tab;([]col1:`a`b`c;col2:1 23)]是的,发布记录更高效,这是tickerplant通常做的事情。kdb能够以这种方式将记录插入表中,例如'trade insert 2,2,2,2,1,1,1,1在您的情况下,使用qSharp,您必须相应地处理该记录。例如,您不能选中“&&args[2]是QTable”,因为发布的消息不包含QTable,而是包含混合的记录列表。换句话说,您从tickerplant发布的记录(列表)不会在过程中变成一个表,它仍然是一个列表。您可以将记录本身作为另一个对象来读取,其中arg[0]是您的第一个字段(白天),arg[1]是您的下一个字段(instrumenttype)等等。最终,从tickerplant发布为表可能会更容易—这取决于您期望的吞吐量/卷量!正如@terrylynch所写,记录(q混合列表)在qSharp中被解析为
object[]
。列表中的每个元素都被单独解析,并按照所述进行解析。
.u.pub[`trade;2,2,2,2,2,1,1,1,1]