首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解析Cascalog中谓词中的符号

无法解析Cascalog中谓词中的符号
EN

Stack Overflow用户
提问于 2013-07-07 21:57:19
回答 1查看 389关注 0票数 3

我有这样的疑问:

代码语言:javascript
复制
(?<- (hfs-textline data-out :sinkmode :replace)
        [?item1 ?item2]
        ((hfs-textline data-in) ?line)
        (data-line? ?line)
        (filter-out-data (#(vector (s/split % #",")) ?line) :> ?item1 ?item2)
        )

(defn data-line? [^String row]
  (and (not= -1 (.indexOf row ","))
       (not (.endsWith row ","))
       (not (.startsWith row ","))))

(defn filter-out-data [data]
  (<- [?item1 ?item2]
      (data :#> 9 {4 ?item1
                  8 ?item2})))

该查询逐行读取CSV文件,并检查满足有效数据条件(data-line?)的行-此部分有效。然后,假设用逗号分割行,并将向量传递给filter-out-data函数,该函数反过来返回从该向量中提取的两个项。当我执行查询时,我得到以下错误: Unable to resolve symbol:?line in this context。

我一直在尝试不同的方法来传递split的结果(我希望它是灵活的,因为split的大小不同)。我刚刚开始使用Clojure和Cascalog,如果您能为我指明正确的方向,我将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-08 00:38:58

函数filter-out-data生成子查询,但您试图将其用作谓词,这是行不通的。

我建议您将表达式(#(vector (s/split % #",")) ?line)中的所有逻辑移到仍然可以调用fill-out-data的正则函数中。

代码语言:javascript
复制
(defn filter-out-data [data]
  (let [[_ _ _ item1 _ _ _ item2] (s/split % #"," data))]
    [item1 item2]))

(?<- (hfs-textline data-out :sinkmode :replace)
    [?item1 ?item2]
    ((hfs-textline data-in) ?line)
    (data-line? ?line)
    (filter-out-data ?line :> ?item1 ?item2))

但是,通过使用data.csv这样的CSV库,您可以进一步简化代码。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17512789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档