2012-08-13 58 views
2

當我有一個空格分隔的鍵時,如何在不重新創建鍵的情況下使用它來提取值?如何使用空格分隔鍵訪問值?

我有一組潛在的鍵,列名實際上,在數據中的第一順序從Clojure的-CSV返回:(這被格式化,以避免滾動)

["AGY/DIV " "STS" "GIC-ID  " 
"LAST-NAME  " 
"FIRST-NAME  " 
"COVERAGE DESCRIPTION         " 
"PREMIUM " 
"RUN-DATE" 
"BIL MO "] 

然後,我創建這個鍵行和zipmap密鑰與數據的每一後續行(序列):

(defn create-map-keys 
    "Takes a sequence, and turns it into viable keys for a map." 
    [in-seq] 
    (map (fn [element] (keyword element)) (map #(cstr/trim %1) in-seq))) 

; gic-csv-keys  
(:AGY/DIV :STS :GIC-ID :LAST-NAME :FIRST-NAME 
:COVERAGE DESCRIPTION :PREMIUM :RUN-DATE :BIL MO) 

(defn zip-apply-col-nams 
    [col-keys row] 
    (zipmap col-keys row)) 

對於測試數據,我zipmap的鑰匙CSV-數據的第二行。

(def zm2 (zip-apply-col-nams gic-csv-keys (first gic-csv-data))) 

當我嘗試從:COVERAGE DESCRIPTION鍵提取值,我得到這個錯誤

(:COVERAGE DESCRIPTION zm2) 
CompilerException java.lang.RuntimeException: Unable to resolve symbol: DESCRIPTION in this context, compiling:(NO_SOURCE_PATH:23) 

然而,這個工程:

(zm2 (keyword "COVERAGE DESCRIPTION")) 
"HARVARD PILGRIM FAMILY - INSURED      " 

我應該修改的空間分隔鍵例如用短劃線替換空間,還是有另一種方法來引用密鑰而不重新創建它?

謝謝。

回答

2

爲了記錄在案:「一些關鍵」是(目前)不是在Clojure的一個有效的關鍵字。您應該用 - 或_替換空格。或者你應該用普通的琴鍵作爲琴鍵並使用get

6

(keyword "some key")不會「重新創建」一個關鍵字,它實習生一個關鍵字,這意味着它將始終在給定相同名稱時返回相同的關鍵字對象。您還可以將返回的關鍵字並重新使用它的方式:

(def coverage-description (keyword "COVERAGE DESCRIPTION")) 

(coverage-description my-row-map)