我需要通过C接口将大量的K对象发送到KDB。目前,我所有的字符串都作为符号发送,这并不理想。
我想用标准char数组替换所有符号
对于Symbols,我是这样做的
// table_def:([] name: `symbol$())
K m_data = ktn(0, 1); // 1 column
kK(m_data)[0] = ktn(KS, 100); // 100 rows in bulk
for (unsigned i = 0; i < 100; i++) {
kS(kK(m_data)[0])[i] = ss("abc");
}
但是不确定如何为char数组创建Bulk结构,这是我尝试的方法。
// table_def:([] name: `char$())
K m_data = ktn(0, 1); // 1 column
kK(m_data)[0] = ktn(KC, 100); // 100 rows in bulk
for (unsigned i = 0; i < 100; i++) {
kS(kK(m_data)[0])[i] = ss("abc"); // this fail with a `type error
kC(kK(m_data)[0])[i] = kp("abc"); // this fail because kC expect a char not a char*
任何帮助,将不胜感激
kdb中的字符串列被认为是常规类型(char列表的列表)。
q)type each flip ([]a:string`aa`bb;b:"ab")
a| 0 <-- string column
b| 10 <-- char column
所以你的kdb表定义应该是
// table_def:([] name: ())
您先前的定义期望列值是原子字符(这不是您想要的),因此我相信是“类型错误”。
因此,在C代码中创建K对象时,第一列中的数据类型应为混合类型:
kK(m_data)[0] = ktn(0, 100);
在此处,为每行创建值:
kK(kK(m_data)[0])[i] = kp("abc");
您可以尝试上述方法,看看效果如何吗?目前没有有效的示例:(
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句