在clojure中读取制表符分隔文件

时间:2014-02-11 14:54:49

标签: regex parsing clojure formatting string-formatting

如何使用Clojure读取制表符分隔的文件?一行中可能存在与制表符不对应的空格。

例如:转换

some field     another-field     a third field

["some field" "another-field" "a third field"]

2 个答案:

答案 0 :(得分:4)

您可以使用data.csv Contrib库:

;; in your :dependencies
[org.clojure/data.csv "0.1.2"]

;; at the REPL
(require '[clojure.data.csv :as csv])

(csv/read-csv
  (java.io.StringReader. "some field\tanother-field\ta third field")
  :separator \tab)
;= (["some field" "another-field" "a third field"])

(使用类似(with-open [rdr (clojure.java.io/reader f)] (vec (csv/read-csv rdr :separator \tab)))的内容来读取TSV文件f中的数据。)

答案 1 :(得分:2)

如果您不想手动操作,可以使用CSV库,例如:

https://github.com/clojure/data.csv

https://github.com/davidsantiago/clojure-csv

如果您的要求发生变化(例如,您希望允许值中的空格,分隔符更改,您想引用,......),那么您将处于保存方,因为您可以轻松地进行调整。但是,直接拆分单行也有效:

(require '[clojure.java.io :as io]
         '[clojure.string :as string])

(with-open [rd (io/reader (io/file "/path/to/file"))]
  (->> (line-seq rd)
       (map #(.split ^String % "\t"))
       (mapv vec)))

如果我是你,我还会去图书馆。