2016-08-12 9 views
1

私は1000,50のように格納された浮動小数点数を入力しました。小数点はコンマで置き換えられます。 Kにこれらの数値を直接浮動小数点数にロードするオプションがありますか? CCC、CC形式の数字でテキストを直接読み込むことはできますか? (K4)

data:("SFF" ;";",";") 0:. filename 数値は浮動小数点として認識されないため、もちろん0nsになります。 これを文字列としてロードし、c:.:' .q.ssr'[data;",";"."] のようなssrを使用して変換しますが、それは非常に遅いです。

Kにこれらの数値をCCCで読み込ませるオプションがありますか?CCフォーマットは直接浮動小数点数ですか?標準形式とccc、cc形式は混在していません。いずれのファイルにも1つしかありません。 もし存在しなければ、私は "。"ロードファンクションが置かれているQバイナリのどこかに "、"をつけて、これらの番号をロードするバージョンを取得します。誰かがそれを試みたのですか?妥当な時間内にこれらの数値を持つ大きなファイルをロードするヒントはありますか?あなたが便利なこの小さな機能を見つけることがあなたの仕事のために遅い

+1

私はそれをきれいに直接解析する方法はないと思います。ファイルをkdbにロードする前に、ファイルを前処理することができます。私はいくつかのLinuxのコマンド/ツールはkdbに読み込んでそこでそれをやっているよりもはるかに迅速にドットでカンマを置き換えることができると確信しています。 – terrylynch

答えて

2

ssr'場合

乾杯、 共同:

c2p:{c:-1_sums count each x;p:ss[r:raze x;","];r[p]:".";(0,c) _ r} 

更新:代替バージョン:

c2p:{p:ss[r:raze x;","];r[p]:".";(0,-1_sums count'[x])_r} 

それをすべての文字列を1つの長い文字列に連結し、カンマの位置を見つけ、カンマ(?)

q)N:1000000 
q)s:string[N?100000],'",",'string N?1000 

q)\t r1:ssr'[s;",";"."] 
4284 
q)\t r2:c2p s 
242 
q)r1~r2 
1b 
+0

それは本当にはるかに良いです。ここのシステムでは、10倍高速ですが、それでも良いです – commonTTT

+0

すべてのフロートが特定のフォーマットに従っていない場合(たとえば、小数点以下2桁)、q/kでうまくいくことはほとんどありませんIMHO –

0

私は、インデックスと組み合わせて検索のようなものを考えていた/それは完璧ではないのですが、それが一般的な考え方だ

q)N:1000000 
    q)s:string[N?100000],'",",'string N?1000 
    q)\ts {s[x;y]:"."}./:flip(til count s;s?\:",") 
    967 52972144 
    q)s 
    "93912.794" 
    "57144.788" 
    "77809.659" 
    "7839.47" 
    "6363.523" 
    "44761.244" 
    "65699.712" 

適用する:期間とsが、その長い文字列を分割します。私はもっ​​と簡単な方法があると確信しています...

関連する問題