Мне нужно отправить массу объекта 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*
Любая помощь будет оценена
Строковый столбец в 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");
Можете ли вы попробовать вышеизложенное и посмотреть, как это происходит? У меня сейчас нет рабочего примера 🙁