2016-08-12 7 views
1

나는 1000, 50처럼 저장된 float를 입력했습니다. 소수점은 쉼표로 바뀝니다. K에이 번호를 직접 부유물에 적재 할 수있는 옵션이 있습니까?숫자가있는 텍스트를 CCC, CC 형식으로 직접로드 할 수 있습니까? (K4)

data:("SFF" ;";",";") 0:. filename 을 사용하는 경우 숫자가 수레로 인식되지 않기 때문에 나는 물론, 0ns를 얻을. 지금 문자열로로드하고c:.:' .q.ssr'[data;",";"."] 과 같은 ssr을 사용하여 변환하지만 매우 느립니다.

K가 이러한 번호를 CCC, CC 형식으로 직접로드 할 수있는 옵션이 있습니까? 일반 형식과 ccc, cc 형식은 혼합되지 않으며 모든 파일에는 하나만 있습니다. 없다면, 나는 "."을 아주 쉽게 대체해야한다고 생각합니다. 로드 - 함수가있는 Q- 바이너리 어딘가에 ","와 함께이 숫자를로드하는 버전을 얻습니다. 아무도 그걸 시도 했니? 또는 합리적인 시간에 큰 숫자의 파일을로드하는 팁이 있습니까? 당신이 도움이 작은 기능을 찾을 수 있습니다 당신의 작업에 느린

+1

나는 그것을 직접적으로 직접 파싱 할 방법이 없다고 생각합니다. kdb에 파일을로드하기 전에 파일을 사전 처리 할 수 ​​있습니다. 일부 리눅스 명령/도구는 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} 

그것을 모든 문자열을 하나의 긴 문자열로 연결하고, 쉼표의 위치를 ​​찾고, 쉼표를 대체합니다. (?)

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" 

적용 : 마침표들 그 긴 문자열을 분할합니다. 더 쉬운 방법이있을 것이라고 확신합니다 ...