как создать массовый объект с массивами символов для KDB +

Мне нужно отправить массу объекта K в KDB через интерфейс C
На данный момент все мои строки отправляются как символы, что не идеально.

Я хотел бы заменить все символы на стандартные массивы символов

Для символов я сделал это так

// 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");
}

Но не уверен, как создать структуру 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*

Любая помощь будет оценена

2

Решение

Строковый столбец в kdb рассматривается как общий тип (список списка символов).

q)type each flip ([]a:string`aa`bb;b:"ab")
a| 0       <-- string column
b| 10      <-- char column

Итак, ваше определение таблицы kdb должно было быть

// table_def:([] name: ())

Ваше предыдущее определение предполагает, что значениями столбцов будут атомные символы (что не является тем, что вам нужно), поэтому я считаю ошибку типа.

Поэтому при создании объекта K в вашем коде C тип данных в первом столбце должен быть смешанным:

kK(m_data)[0] = ktn(0, 100);

Оттуда создайте значения для каждой строки:

kK(kK(m_data)[0])[i] = kp("abc");

Можете ли вы попробовать вышеизложенное и посмотреть, как это происходит? У меня сейчас нет рабочего примера 🙁

3

Другие решения


По вопросам рекламы [email protected]