1

我在黎曼处理流,所有字段都是字符串。但是,我想对某些字段进行一些数字比较。因此,我尝试将它们转换为浮点数。

假设我的流是这样的:

#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)

但是我遇到了一些错误,我觉得这不是正确的方法。我最近读了一些东西,让我觉得我应该使用smap或者adjust但我不确定。

顺便说一句,我绝对不熟悉clojure。(实际上我是用 riemann 发现的)。

你对如何解决这个问题有任何想法吗?

提前致谢,

罗宾。

4

1 回答 1

0

我不知道 riemann 部分,但在普通的 clojure 中,您可以使用 Java interop 或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
于 2016-08-16T15:41:08.860 回答