2

C インターフェイスを介して K オブジェクトのバルクを KDB に送信する必要があります。現時点では、すべての文字列がシンボルとして送信されますが、これは理想的ではありません。

すべてのシンボルを標準の char 配列に置き換えたい

シンボルについては、このようにしました

// 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*

どんな助けでもいただければ幸いです

4

1 に答える 1

3

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

上記を試してみて、どうなるか見ていただけますか?現時点では、ここに実際の例はありません:(

于 2015-05-21T13:15:35.050 に答える