2016-08-16 34 views
1

我在黎曼處理流,所有字段都是字符串。不過,我想在一些字段上執行一些數字比較。因此我試圖將它們浮動轉換。在clojure中用黎曼轉換字符串

比方說,我流是這樣的:

#riemann.codec.Event{:host "myHost", :service nil, :state nil, :description "my description", :pred_score "0.156"} 

我試圖修改riemann.conf文件,像這樣:

(streams 
(with :new_field (read-string :pred_score)) 
prn) 

但是我得到了一些錯誤,我喜歡這種感覺是不是這樣做的正確方法。我最近讀了一些東西讓我覺得我應該使用smapadjust,但我不確定。

我完全不熟悉clojure的方式。 (事實上​​,我發現它與黎曼)。

你對如何解決這個問題有什麼想法嗎?

在此先感謝,

羅賓。

回答

0

我不知道riemann部分,但在普通clojure中,您可以使用Java interop或the Tupelo library。使用Java的互操作,你會怎麼做:

> (def x {:host "myHost", :service nil, :state nil, :description "my description", :pred_score "0.156"}) 
> (Double/parseDouble (:pred_score x)) 
0.156 

的「tupelo.parse」命名空間封裝這個普通的Clojure函數內部,並增加了指定一個默認值的格式不正確值的情況下返回(的能力而不是拋出一個異常):

> (require '[tupelo.parse :as parse]) 
> (parse/parse-double (:pred_score x)) 
0.156 
> (parse/parse-double "123.4x6" :default 0) 
0 
+0

你應該[添加一個聲明,你是庫的作者(https://meta.stackoverflow.com/questions/298734/is-it-acceptable-to - 促進 - 我自己 - 庫-AS-部分的-A-真實的答案#comment217878_298743)。 –

+0

非常感謝您的回答,但我仍然得到一個錯誤: 'clojure.lang.Compiler $ CompilerException:java.lang.NullPointerException' 這裏是我的語法: '(流 (如果(>(雙人間/ parseDouble(:pred_score事件))0.5)prn) )' 我是否犯了clojure語法錯誤,還是它是由於我搞砸了一些黎曼配置錯誤? –

+0

它可能像'事件'未定義那樣簡單(即'nil')?您需要粘貼整個代碼才能看到類似的問題。試着輸入'(println「event =」event)' –